diff options
| author | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2020-02-28 10:16:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-28 10:16:52 +0100 |
| commit | eb061384fe508a8acaa39b75d32afd7c5a8ecee2 (patch) | |
| tree | 9116bbfb52e3fbfdb6cf6787130514acdda3059f | |
| parent | 8ce1f32351a1536f687eb7e797be6e53b283c730 (diff) | |
| parent | c1e891c5ee343910a9b4537fd5930b0bb34d20a2 (diff) | |
| download | rabbitmq-server-git-eb061384fe508a8acaa39b75d32afd7c5a8ecee2.tar.gz | |
Merge pull request #2258 from rabbitmq/load-several-config-files
Load additional Cuttlefish configuration files
| -rw-r--r-- | apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl | 54 | ||||
| -rw-r--r-- | src/rabbit.erl | 9 |
2 files changed, 49 insertions, 14 deletions
diff --git a/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl b/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl index 0e107a007d..db7f16702f 100644 --- a/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl +++ b/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl @@ -20,14 +20,28 @@ setup(Context) -> %% TODO: Check if directories/files are inside Mnesia dir. - %% TODO: Support glob patterns & directories in RABBITMQ_CONFIG_FILE. - %% TODO: Always try parsing of both erlang and cuttlefish formats. - ok = set_default_config(), + AdditionalConfigFiles = find_additional_config_files(Context), AdvancedConfigFile = find_actual_advanced_config_file(Context), State = case find_actual_main_config_file(Context) of {MainConfigFile, erlang} -> + case AdditionalConfigFiles of + [] -> + ok; + _ -> + rabbit_log_prelaunch:notice( + "The following additional configuration " + "files are not loaded when the main " + "configuration file uses the Erlang terms " + "based format"), + lists:foreach( + fun(File) -> + rabbit_log_prelaunch:notice( + " - ~ts", [File]) + end, + AdditionalConfigFiles) + end, Config = load_erlang_term_based_config_file( MainConfigFile), Apps = [App || {App, _} <- Config], @@ -36,7 +50,17 @@ setup(Context) -> config_files => [MainConfigFile], config_advanced_file => undefined}; {MainConfigFile, cuttlefish} -> - ConfigFiles = [MainConfigFile], + ConfigFiles = [MainConfigFile | AdditionalConfigFiles], + Config = load_cuttlefish_config_file(Context, + ConfigFiles, + AdvancedConfigFile), + Apps = [App || {App, _} <- Config], + decrypt_config(Apps), + #{config_type => cuttlefish, + config_files => ConfigFiles, + config_advanced_file => AdvancedConfigFile}; + undefined when AdditionalConfigFiles =/= [] -> + ConfigFiles = AdditionalConfigFiles, Config = load_cuttlefish_config_file(Context, ConfigFiles, AdvancedConfigFile), @@ -134,6 +158,19 @@ find_actual_main_config_file(#{main_config_file := File}) -> end end. +find_additional_config_files(#{additional_config_files := Pattern}) + when Pattern =/= undefined -> + Pattern1 = case filelib:is_dir(Pattern) of + true -> filename:join(Pattern, "*"); + false -> Pattern + end, + OnlyFiles = [File || + File <- filelib:wildcard(Pattern1), + filelib:is_regular(File)], + lists:sort(OnlyFiles); +find_additional_config_files(_) -> + []. + find_actual_advanced_config_file(#{advanced_config_file := File}) -> case filelib:is_regular(File) of true -> File; @@ -210,19 +247,20 @@ generate_config_from_cuttlefish_files(Context, end, ConfigFiles), case cuttlefish_conf:files(ConfigFiles) of {errorlist, Errors} -> - rabbit_log_prelaunch:error("Error generating configuration:", []), + rabbit_log_prelaunch:error("Error parsing configuration:"), lists:foreach( fun(Error) -> rabbit_log_prelaunch:error(" - ~ts", [cuttlefish_error:xlate(Error)]) end, Errors), - throw({error, failed_to_generate_configuration_file}); + rabbit_log_prelaunch:error("Are these files using the Cuttlefish format?"), + throw({error, failed_to_parse_configuration_file}); Config0 -> %% Finalize configuration, based on the schema. Config = case cuttlefish_generator:map(Schema, Config0) of {error, Phase, {errorlist, Errors}} -> %% TODO rabbit_log_prelaunch:error( - "Error generating configuration in phase ~ts:", + "Error preparing configuration in phase ~ts:", [Phase]), lists:foreach( fun(Error) -> @@ -231,7 +269,7 @@ generate_config_from_cuttlefish_files(Context, [cuttlefish_error:xlate(Error)]) end, Errors), throw( - {error, failed_to_generate_configuration_file}); + {error, failed_to_prepare_configuration}); ValidConfig -> proplists:delete(vm_args, ValidConfig) end, diff --git a/src/rabbit.erl b/src/rabbit.erl index 65a2e4707e..312e30d4ae 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -349,21 +349,18 @@ run_prelaunch_second_phase() -> %% 2. Feature flags registry. ok = rabbit_prelaunch_feature_flags:setup(Context), - %% 3. Configuration check + loading. - ok = rabbit_prelaunch_conf:setup(Context), - - %% 4. Logging. + %% 3. Logging. ok = rabbit_prelaunch_logging:setup(Context), case IsInitialPass of true -> - %% 5. HiPE compilation. + %% 4. HiPE compilation. ok = rabbit_prelaunch_hipe:setup(Context); false -> ok end, - %% 6. Clustering. + %% 5. Clustering. ok = rabbit_prelaunch_cluster:setup(Context), %% Start Mnesia now that everything is ready. |
