consolidate module configs

This commit is contained in:
uprightbass360
2025-11-04 22:48:29 -05:00
parent 00100894c5
commit b8bebb28c0
2 changed files with 112 additions and 35 deletions

View File

@@ -140,8 +140,6 @@ else
sed -i "s|^LoginDatabaseInfo *=.*|LoginDatabaseInfo = \"${MYSQL_HOST};${MYSQL_PORT};${MYSQL_USER};${MYSQL_ROOT_PASSWORD};${DB_AUTH_NAME}\"|" /azerothcore/config/worldserver.conf || true
sed -i "s|^WorldDatabaseInfo *=.*|WorldDatabaseInfo = \"${MYSQL_HOST};${MYSQL_PORT};${MYSQL_USER};${MYSQL_ROOT_PASSWORD};${DB_WORLD_NAME}\"|" /azerothcore/config/worldserver.conf || true
sed -i "s|^CharacterDatabaseInfo *=.*|CharacterDatabaseInfo = \"${MYSQL_HOST};${MYSQL_PORT};${MYSQL_USER};${MYSQL_ROOT_PASSWORD};${DB_CHARACTERS_NAME}\"|" /azerothcore/config/worldserver.conf || true
update_playerbots_conf /azerothcore/config/playerbots.conf
update_playerbots_conf /azerothcore/config/playerbots.conf.dist
update_playerbots_conf /azerothcore/config/modules/playerbots.conf
update_playerbots_conf /azerothcore/config/modules/playerbots.conf.dist

View File

@@ -209,35 +209,103 @@ install_enabled_modules(){
update_playerbots_db_info(){
local target="$1"
if [ ! -f "$target" ]; then
if [ ! -f "$target" ] && [ ! -L "$target" ]; then
return 0
fi
local host
host="$(read_env_value CONTAINER_MYSQL)"
if [ -z "$host" ]; then
host="$(read_env_value MYSQL_HOST)"
fi
host="${host:-ac-mysql}"
local env_file="${ENV_PATH:-}"
local resolved
local port
port="$(read_env_value MYSQL_PORT "3306")"
resolved="$(
python3 - "$target" "${env_file}" <<'PY'
import os
import pathlib
import sys
local user
user="$(read_env_value MYSQL_USER "root")"
def load_env_file(path):
data = {}
if not path:
return data
candidate = pathlib.Path(path)
if not candidate.is_file():
return data
for raw in candidate.read_text(encoding="utf-8", errors="ignore").splitlines():
if not raw or raw.lstrip().startswith("#"):
continue
if "=" not in raw:
continue
key, val = raw.split("=", 1)
key = key.strip()
val = val.strip()
if not key:
continue
if val and val[0] == val[-1] and val[0] in {"'", '"'}:
val = val[1:-1]
if "#" in val:
# Strip inline comments
val = val.split("#", 1)[0].rstrip()
data[key] = val
return data
local pass
pass="$(read_env_value MYSQL_ROOT_PASSWORD)"
def resolve_key(env_map, key, default=""):
value = os.environ.get(key)
if value:
return value
return env_map.get(key, default)
local db
db="$(read_env_value DB_PLAYERBOTS_NAME "acore_playerbots")"
local value="${host};${port};${user};${pass};${db}"
def update_config(path_in, replacement):
if not (os.path.exists(path_in) or os.path.islink(path_in)):
return False
path = os.path.realpath(path_in)
try:
with open(path, "r", encoding="utf-8", errors="ignore") as fh:
lines = fh.read().splitlines()
except FileNotFoundError:
lines = []
if grep -qE '^[[:space:]]*PlayerbotsDatabaseInfo[[:space:]]*=' "$target"; then
sed -i "s|^[[:space:]]*PlayerbotsDatabaseInfo[[:space:]]*=.*|PlayerbotsDatabaseInfo = \"${value}\"|" "$target" || return
else
printf '\nPlayerbotsDatabaseInfo = "%s"\n' "$value" >> "$target" || return
fi
key = "PlayerbotsDatabaseInfo"
replacement_line = f'{key} = "{replacement}"'
changed = False
for idx, raw in enumerate(lines):
if raw.strip().startswith(key):
if raw.strip() != replacement_line:
lines[idx] = replacement_line
changed = True
break
else:
lines.append(replacement_line)
changed = True
if changed:
output = "\n".join(lines)
if output and not output.endswith("\n"):
output += "\n"
with open(path, "w", encoding="utf-8") as fh:
fh.write(output)
return True
target_path, env_path = sys.argv[1:3]
env_map = load_env_file(env_path)
host = resolve_key(env_map, "CONTAINER_MYSQL") or resolve_key(env_map, "MYSQL_HOST", "ac-mysql") or "ac-mysql"
port = resolve_key(env_map, "MYSQL_PORT", "3306") or "3306"
user = resolve_key(env_map, "MYSQL_USER", "root") or "root"
password = resolve_key(env_map, "MYSQL_ROOT_PASSWORD", "")
database = resolve_key(env_map, "DB_PLAYERBOTS_NAME", "acore_playerbots") or "acore_playerbots"
value = ";".join([host, port, user, password, database])
update_config(target_path, value)
print(value)
PY
)" || return 0
local host port
host="${resolved%%;*}"
port="${resolved#*;}"
port="${port%%;*}"
if [ "$PLAYERBOTS_DB_UPDATE_LOGGED" = "0" ]; then
info "Updated PlayerbotsDatabaseInfo to use host ${host}:${port}"
@@ -279,17 +347,12 @@ manage_configuration_files(){
unset patterns
done
local module_dir
for key in "${MODULE_KEYS[@]}"; do
module_dir="${MODULE_NAME[$key]:-}"
[ -n "$module_dir" ] || continue
[ -d "$module_dir" ] || continue
find "$module_dir" -name "*.conf.dist" -exec cp {} "$env_target"/ \; 2>/dev/null || true
done
local modules_conf_dir="${env_target%/}/modules"
mkdir -p "$modules_conf_dir"
rm -rf "${modules_conf_dir}.backup"
rm -f "$modules_conf_dir"/*.conf "$modules_conf_dir"/*.conf.dist 2>/dev/null || true
local module_dir
for key in "${MODULE_KEYS[@]}"; do
module_dir="${MODULE_NAME[$key]:-}"
[ -n "$module_dir" ] || continue
@@ -297,8 +360,26 @@ manage_configuration_files(){
while IFS= read -r conf_file; do
[ -n "$conf_file" ] || continue
base_name="$(basename "$conf_file")"
dest_name="${base_name%.dist}"
cp "$conf_file" "$modules_conf_dir/$dest_name"
# Ensure previous copies in root config are removed to keep modules/ canonical
main_conf_path="${env_target}/${base_name}"
if [ -f "$main_conf_path" ]; then
rm -f "$main_conf_path"
fi
if [[ "$base_name" == *.conf.dist ]]; then
root_conf="${env_target}/${base_name%.dist}"
if [ -f "$root_conf" ]; then
rm -f "$root_conf"
fi
fi
dest_path="${modules_conf_dir}/${base_name}"
cp "$conf_file" "$dest_path"
if [[ "$base_name" == *.conf.dist ]]; then
dest_conf="${modules_conf_dir}/${base_name%.dist}"
if [ ! -f "$dest_conf" ]; then
cp "$conf_file" "$dest_conf"
fi
fi
done < <(find "$module_dir" -path "*/conf/*" -type f \( -name "*.conf" -o -name "*.conf.dist" \) 2>/dev/null)
done
@@ -308,8 +389,6 @@ manage_configuration_files(){
fi
if [ "$playerbots_enabled" = "1" ]; then
update_playerbots_db_info "$env_target/playerbots.conf"
update_playerbots_db_info "$env_target/playerbots.conf.dist"
update_playerbots_db_info "$modules_conf_dir/playerbots.conf"
update_playerbots_db_info "$modules_conf_dir/playerbots.conf.dist"
fi