Skip to content

Commit eb06138

Browse files
authored
Merge pull request #2258 from rabbitmq/load-several-config-files
Load additional Cuttlefish configuration files
2 parents 8ce1f32 + c1e891c commit eb06138

File tree

2 files changed

+49
-14
lines changed

2 files changed

+49
-14
lines changed

apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,28 @@ setup(Context) ->
2020

2121
%% TODO: Check if directories/files are inside Mnesia dir.
2222

23-
%% TODO: Support glob patterns & directories in RABBITMQ_CONFIG_FILE.
24-
%% TODO: Always try parsing of both erlang and cuttlefish formats.
25-
2623
ok = set_default_config(),
2724

25+
AdditionalConfigFiles = find_additional_config_files(Context),
2826
AdvancedConfigFile = find_actual_advanced_config_file(Context),
2927
State = case find_actual_main_config_file(Context) of
3028
{MainConfigFile, erlang} ->
29+
case AdditionalConfigFiles of
30+
[] ->
31+
ok;
32+
_ ->
33+
rabbit_log_prelaunch:notice(
34+
"The following additional configuration "
35+
"files are not loaded when the main "
36+
"configuration file uses the Erlang terms "
37+
"based format"),
38+
lists:foreach(
39+
fun(File) ->
40+
rabbit_log_prelaunch:notice(
41+
" - ~ts", [File])
42+
end,
43+
AdditionalConfigFiles)
44+
end,
3145
Config = load_erlang_term_based_config_file(
3246
MainConfigFile),
3347
Apps = [App || {App, _} <- Config],
@@ -36,7 +50,17 @@ setup(Context) ->
3650
config_files => [MainConfigFile],
3751
config_advanced_file => undefined};
3852
{MainConfigFile, cuttlefish} ->
39-
ConfigFiles = [MainConfigFile],
53+
ConfigFiles = [MainConfigFile | AdditionalConfigFiles],
54+
Config = load_cuttlefish_config_file(Context,
55+
ConfigFiles,
56+
AdvancedConfigFile),
57+
Apps = [App || {App, _} <- Config],
58+
decrypt_config(Apps),
59+
#{config_type => cuttlefish,
60+
config_files => ConfigFiles,
61+
config_advanced_file => AdvancedConfigFile};
62+
undefined when AdditionalConfigFiles =/= [] ->
63+
ConfigFiles = AdditionalConfigFiles,
4064
Config = load_cuttlefish_config_file(Context,
4165
ConfigFiles,
4266
AdvancedConfigFile),
@@ -134,6 +158,19 @@ find_actual_main_config_file(#{main_config_file := File}) ->
134158
end
135159
end.
136160

161+
find_additional_config_files(#{additional_config_files := Pattern})
162+
when Pattern =/= undefined ->
163+
Pattern1 = case filelib:is_dir(Pattern) of
164+
true -> filename:join(Pattern, "*");
165+
false -> Pattern
166+
end,
167+
OnlyFiles = [File ||
168+
File <- filelib:wildcard(Pattern1),
169+
filelib:is_regular(File)],
170+
lists:sort(OnlyFiles);
171+
find_additional_config_files(_) ->
172+
[].
173+
137174
find_actual_advanced_config_file(#{advanced_config_file := File}) ->
138175
case filelib:is_regular(File) of
139176
true -> File;
@@ -210,19 +247,20 @@ generate_config_from_cuttlefish_files(Context,
210247
end, ConfigFiles),
211248
case cuttlefish_conf:files(ConfigFiles) of
212249
{errorlist, Errors} ->
213-
rabbit_log_prelaunch:error("Error generating configuration:", []),
250+
rabbit_log_prelaunch:error("Error parsing configuration:"),
214251
lists:foreach(
215252
fun(Error) ->
216253
rabbit_log_prelaunch:error(" - ~ts", [cuttlefish_error:xlate(Error)])
217254
end, Errors),
218-
throw({error, failed_to_generate_configuration_file});
255+
rabbit_log_prelaunch:error("Are these files using the Cuttlefish format?"),
256+
throw({error, failed_to_parse_configuration_file});
219257
Config0 ->
220258
%% Finalize configuration, based on the schema.
221259
Config = case cuttlefish_generator:map(Schema, Config0) of
222260
{error, Phase, {errorlist, Errors}} ->
223261
%% TODO
224262
rabbit_log_prelaunch:error(
225-
"Error generating configuration in phase ~ts:",
263+
"Error preparing configuration in phase ~ts:",
226264
[Phase]),
227265
lists:foreach(
228266
fun(Error) ->
@@ -231,7 +269,7 @@ generate_config_from_cuttlefish_files(Context,
231269
[cuttlefish_error:xlate(Error)])
232270
end, Errors),
233271
throw(
234-
{error, failed_to_generate_configuration_file});
272+
{error, failed_to_prepare_configuration});
235273
ValidConfig ->
236274
proplists:delete(vm_args, ValidConfig)
237275
end,

src/rabbit.erl

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -349,21 +349,18 @@ run_prelaunch_second_phase() ->
349349
%% 2. Feature flags registry.
350350
ok = rabbit_prelaunch_feature_flags:setup(Context),
351351

352-
%% 3. Configuration check + loading.
353-
ok = rabbit_prelaunch_conf:setup(Context),
354-
355-
%% 4. Logging.
352+
%% 3. Logging.
356353
ok = rabbit_prelaunch_logging:setup(Context),
357354

358355
case IsInitialPass of
359356
true ->
360-
%% 5. HiPE compilation.
357+
%% 4. HiPE compilation.
361358
ok = rabbit_prelaunch_hipe:setup(Context);
362359
false ->
363360
ok
364361
end,
365362

366-
%% 6. Clustering.
363+
%% 5. Clustering.
367364
ok = rabbit_prelaunch_cluster:setup(Context),
368365

369366
%% Start Mnesia now that everything is ready.

0 commit comments

Comments
 (0)