diff options
| author | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2020-03-16 17:00:02 +0100 |
|---|---|---|
| committer | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2020-04-23 17:33:45 +0200 |
| commit | 7edfe2292c3c59a8e03e37574b89a00708ae1bf8 (patch) | |
| tree | 472980b0adac31a6dbf80b1fc5f49a0af4c82e4f /apps | |
| parent | c9e9509846b85ce63f0588b937e7e01cdbd45df9 (diff) | |
| download | rabbitmq-server-git-7edfe2292c3c59a8e03e37574b89a00708ae1bf8.tar.gz | |
rabbit_prelaunch_conf: Always handle config. files with Cuttlefish
This has several benefits:
1. It simplifies the code, all configuration being handled by the same
code path (no more condition on Erlang-term-based vs. Cuttlefish).
`rabbit_config` shrinks quite a lot in the process.
2. We can use additional configuration files AND an Erlang-term-based
configuration file. In other words, it is possible to use the same
existing Erlang-term-based file and introduce Cuttlefish files when
needed.
It allows a user to run RabbitMQ with:
RABBITMQ_CONFIG_FILE=/path/to/rabbitmq.config \
RABBITMQ_CONFIG_FILES=/path/to/conf.d/*.conf \
./sbin/rabbitmq-server
A developer can do the same with `make run-broker`:
make run-broker \
RABBITMQ_CONFIG_FILES=/path/to/conf.d/*.conf
In the example above, the main configuration file generated by
rabbitmq-run.mk is an Erlang-term-based one.
This is implemented by calling Cuttlefish with a (possibly empty) list
of additional files and the Erlang-term-based file as the advanced
configuration file.
References #2180.
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl | 63 |
1 files changed, 12 insertions, 51 deletions
diff --git a/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl b/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl index 9ff4cf09d0..ece600b68e 100644 --- a/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl +++ b/apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl @@ -26,29 +26,13 @@ setup(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), + Config = load_cuttlefish_config_file(Context, + AdditionalConfigFiles, + MainConfigFile), Apps = [App || {App, _} <- Config], decrypt_config(Apps), - #{config_type => erlang, - config_files => [MainConfigFile], - config_advanced_file => undefined}; + #{config_files => AdditionalConfigFiles, + config_advanced_file => MainConfigFile}; {MainConfigFile, cuttlefish} -> ConfigFiles = [MainConfigFile | AdditionalConfigFiles], Config = load_cuttlefish_config_file(Context, @@ -56,8 +40,7 @@ setup(Context) -> AdvancedConfigFile), Apps = [App || {App, _} <- Config], decrypt_config(Apps), - #{config_type => cuttlefish, - config_files => ConfigFiles, + #{config_files => ConfigFiles, config_advanced_file => AdvancedConfigFile}; undefined when AdditionalConfigFiles =/= [] -> ConfigFiles = AdditionalConfigFiles, @@ -66,23 +49,21 @@ setup(Context) -> AdvancedConfigFile), Apps = [App || {App, _} <- Config], decrypt_config(Apps), - #{config_type => cuttlefish, - config_files => ConfigFiles, + #{config_files => ConfigFiles, config_advanced_file => AdvancedConfigFile}; undefined when AdvancedConfigFile =/= undefined -> rabbit_log_prelaunch:warning( "Using RABBITMQ_ADVANCED_CONFIG_FILE: ~s", [AdvancedConfigFile]), - Config = load_erlang_term_based_config_file( - AdvancedConfigFile), + Config = load_cuttlefish_config_file(Context, + AdditionalConfigFiles, + AdvancedConfigFile), Apps = [App || {App, _} <- Config], decrypt_config(Apps), - #{config_type => erlang, - config_files => [AdvancedConfigFile], + #{config_files => AdditionalConfigFiles, config_advanced_file => AdvancedConfigFile}; undefined -> - #{config_type => undefined, - config_files => [], + #{config_files => [], config_advanced_file => undefined} end, ok = override_with_hard_coded_critical_config(), @@ -186,26 +167,6 @@ determine_config_format(File) -> end end. -load_erlang_term_based_config_file(ConfigFile) -> - rabbit_log_prelaunch:debug( - "Loading configuration file \"~ts\" (Erlang terms based)", [ConfigFile]), - case file:consult(ConfigFile) of - {ok, [Config]} when is_list(Config) -> - apply_erlang_term_based_config(Config), - Config; - {ok, OtherTerms} -> - rabbit_log_prelaunch:error( - "Failed to load configuration file \"~ts\", " - "incorrect format: ~p", - [ConfigFile, OtherTerms]), - throw({error, failed_to_parse_configuration_file}); - {error, Reason} -> - rabbit_log_prelaunch:error( - "Failed to load configuration file \"~ts\": ~ts", - [ConfigFile, file:format_error(Reason)]), - throw({error, failed_to_read_configuration_file}) - end. - load_cuttlefish_config_file(Context, ConfigFiles, AdvancedConfigFile) -> |
