@@ -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+
137174find_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 ,
0 commit comments