Merge pull request #12672 from zmstone/0308-load-cluster-hocon-to-generate-app.config

0308 load cluster hocon to generate app.config
This commit is contained in:
Zaiming (Stone) Shi 2024-03-13 09:05:04 +01:00 committed by GitHub
commit a00ce8fe41
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 50 additions and 15 deletions

View File

@ -747,7 +747,11 @@ relx_start_command() {
# Function to check configs without generating them
check_config() {
## this command checks the configs without generating any files
call_hocon -v -s "$SCHEMA_MOD" -c "$EMQX_ETC_DIR"/emqx.conf check_schema
call_hocon -v \
-s "$SCHEMA_MOD" \
-c "$DATA_DIR"/configs/cluster.hocon \
-c "$EMQX_ETC_DIR"/emqx.conf \
check_schema
}
# Function to generate app.config and vm.args
@ -763,11 +767,19 @@ generate_config() {
local NOW_TIME
NOW_TIME="$(date +'%Y.%m.%d.%H.%M.%S')"
## this command populates two files: app.<time>.config and vm.<time>.args
## NOTE: the generate command merges environment variables to the base config (emqx.conf),
## but does not include the cluster-override.conf and local-override.conf
## meaning, certain overrides will not be mapped to app.<time>.config file
call_hocon -v -t "$NOW_TIME" -s "$SCHEMA_MOD" -c "$EMQX_ETC_DIR"/emqx.conf -d "$DATA_DIR"/configs generate
## This command populates two files: app.<time>.config and vm.<time>.args
## It takes input sources and overlays values in below order:
## - $DATA_DIR/cluster.hocon (if exists)
## - etc/emqx.conf
## - environment variables starts with EMQX_ e.g. EMQX_NODE__ROLE
##
## NOTE: it's a known issue that cluster.hocon may change right after the node boots up
## because it has to sync cluster.hocon from other nodes.
call_hocon -v -t "$NOW_TIME" \
-s "$SCHEMA_MOD" \
-c "$DATA_DIR"/configs/cluster.hocon \
-c "$EMQX_ETC_DIR"/emqx.conf \
-d "$DATA_DIR"/configs generate
## filenames are per-hocon convention
CONF_FILE="$CONFIGS_DIR/app.$NOW_TIME.config"
@ -986,7 +998,7 @@ if [[ "$IS_BOOT_COMMAND" == 'yes' && "$(get_boot_config 'node.db_backend')" == "
if ! (echo -e "$COMPATIBILITY_INFO" | $GREP -q 'MNESIA_OK'); then
logwarn "DB Backend is RLOG, but an incompatible OTP version has been detected. Falling back to using Mnesia DB backend."
export EMQX_NODE__DB_BACKEND=mnesia
export EMQX_NODE__DB_ROLE=core
export EMQX_NODE__ROLE=core
fi
fi

39
dev
View File

@ -63,8 +63,23 @@ if [ -n "${DEBUG:-}" ]; then
fi
export HOCON_ENV_OVERRIDE_PREFIX='EMQX_'
export EMQX_LOG__FILE__DEFAULT__ENABLE='false'
export EMQX_LOG__CONSOLE__ENABLE='true'
case "${EMQX_DEFAULT_LOG_HANDLER:-console}" in
console|default)
export EMQX_LOG__FILE__DEFAULT__ENABLE='false'
export EMQX_LOG__CONSOLE__ENABLE='true'
;;
file)
export EMQX_LOG__FILE__DEFAULT__ENABLE='true'
export EMQX_LOG__CONSOLE__ENABLE='false'
;;
both)
export EMQX_LOG__CONSOLE__ENABLE='true'
export EMQX_LOG__FILE__ENABLE='true'
;;
*)
;;
esac
SYSTEM="$(./scripts/get-distro.sh)"
if [ -n "${EMQX_NODE_NAME:-}" ]; then
export EMQX_NODE__NAME="${EMQX_NODE_NAME}"
@ -284,7 +299,8 @@ call_hocon() {
os:putenv(\"EMQX_NODE__DB_BACKEND\", \"mnesia\"),
os:putenv(\"EMQX_NODE__DB_ROLE\", \"core\")
end,
ok = hocon_cli:main([$args]),
{Time, ok} = timer:tc(fun() -> ok = hocon_cli:main([$args]) end),
io:format(user, \"Took ~pms to generate config~n\", [Time div 1000]),
init:stop().
"
erl -noshell -eval "$erl_code"
@ -297,11 +313,18 @@ generate_app_conf() {
local NOW_TIME
NOW_TIME="$(date +'%Y.%m.%d.%H.%M.%S')"
## this command populates two files: app.<time>.config and vm.<time>.args
## NOTE: the generate command merges environment variables to the base config (emqx.conf),
## but does not include the cluster-override.conf and local-override.conf
## meaning, certain overrides will not be mapped to app.<time>.config file
call_hocon -v -t "$NOW_TIME" -s "$SCHEMA_MOD" -c "$EMQX_ETC_DIR"/emqx.conf -d "$EMQX_DATA_DIR"/configs generate
## This command populates two files: app.<time>.config and vm.<time>.args
## It takes input sources and overlays values in below order:
## - $DATA_DIR/cluster.hocon (if exists)
## - etc/emqx.conf
## - environment variables starts with EMQX_ e.g. EMQX_NODE__ROLE
##
## NOTE: it's a known issue that cluster.hocon may change right after the node boots up
## because it has to sync cluster.hocon from other nodes.
call_hocon -v -t "$NOW_TIME" -s "$SCHEMA_MOD" \
-c "$EMQX_DATA_DIR"/configs/cluster.hocon \
-c "$EMQX_ETC_DIR"/emqx.conf \
-d "$EMQX_DATA_DIR"/configs generate
## filenames are per-hocon convention
CONF_FILE="$CONFIGS_DIR/app.$NOW_TIME.config"