Skip to content

Commit 27ed8c1

Browse files
authored
Merge pull request #2277 from rabbitmq/always-handle-config-files-with-cuttlefish
Always handle config files with Cuttlefish
2 parents c9e9509 + 5f5fccf commit 27ed8c1

File tree

2 files changed

+25
-117
lines changed

2 files changed

+25
-117
lines changed

apps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl

Lines changed: 12 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -26,38 +26,21 @@ setup(Context) ->
2626
AdvancedConfigFile = find_actual_advanced_config_file(Context),
2727
State = case find_actual_main_config_file(Context) of
2828
{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,
45-
Config = load_erlang_term_based_config_file(
46-
MainConfigFile),
29+
Config = load_cuttlefish_config_file(Context,
30+
AdditionalConfigFiles,
31+
MainConfigFile),
4732
Apps = [App || {App, _} <- Config],
4833
decrypt_config(Apps),
49-
#{config_type => erlang,
50-
config_files => [MainConfigFile],
51-
config_advanced_file => undefined};
34+
#{config_files => AdditionalConfigFiles,
35+
config_advanced_file => MainConfigFile};
5236
{MainConfigFile, cuttlefish} ->
5337
ConfigFiles = [MainConfigFile | AdditionalConfigFiles],
5438
Config = load_cuttlefish_config_file(Context,
5539
ConfigFiles,
5640
AdvancedConfigFile),
5741
Apps = [App || {App, _} <- Config],
5842
decrypt_config(Apps),
59-
#{config_type => cuttlefish,
60-
config_files => ConfigFiles,
43+
#{config_files => ConfigFiles,
6144
config_advanced_file => AdvancedConfigFile};
6245
undefined when AdditionalConfigFiles =/= [] ->
6346
ConfigFiles = AdditionalConfigFiles,
@@ -66,23 +49,21 @@ setup(Context) ->
6649
AdvancedConfigFile),
6750
Apps = [App || {App, _} <- Config],
6851
decrypt_config(Apps),
69-
#{config_type => cuttlefish,
70-
config_files => ConfigFiles,
52+
#{config_files => ConfigFiles,
7153
config_advanced_file => AdvancedConfigFile};
7254
undefined when AdvancedConfigFile =/= undefined ->
7355
rabbit_log_prelaunch:warning(
7456
"Using RABBITMQ_ADVANCED_CONFIG_FILE: ~s",
7557
[AdvancedConfigFile]),
76-
Config = load_erlang_term_based_config_file(
77-
AdvancedConfigFile),
58+
Config = load_cuttlefish_config_file(Context,
59+
AdditionalConfigFiles,
60+
AdvancedConfigFile),
7861
Apps = [App || {App, _} <- Config],
7962
decrypt_config(Apps),
80-
#{config_type => erlang,
81-
config_files => [AdvancedConfigFile],
63+
#{config_files => AdditionalConfigFiles,
8264
config_advanced_file => AdvancedConfigFile};
8365
undefined ->
84-
#{config_type => undefined,
85-
config_files => [],
66+
#{config_files => [],
8667
config_advanced_file => undefined}
8768
end,
8869
ok = override_with_hard_coded_critical_config(),
@@ -186,26 +167,6 @@ determine_config_format(File) ->
186167
end
187168
end.
188169

189-
load_erlang_term_based_config_file(ConfigFile) ->
190-
rabbit_log_prelaunch:debug(
191-
"Loading configuration file \"~ts\" (Erlang terms based)", [ConfigFile]),
192-
case file:consult(ConfigFile) of
193-
{ok, [Config]} when is_list(Config) ->
194-
apply_erlang_term_based_config(Config),
195-
Config;
196-
{ok, OtherTerms} ->
197-
rabbit_log_prelaunch:error(
198-
"Failed to load configuration file \"~ts\", "
199-
"incorrect format: ~p",
200-
[ConfigFile, OtherTerms]),
201-
throw({error, failed_to_parse_configuration_file});
202-
{error, Reason} ->
203-
rabbit_log_prelaunch:error(
204-
"Failed to load configuration file \"~ts\": ~ts",
205-
[ConfigFile, file:format_error(Reason)]),
206-
throw({error, failed_to_read_configuration_file})
207-
end.
208-
209170
load_cuttlefish_config_file(Context,
210171
ConfigFiles,
211172
AdvancedConfigFile) ->

src/rabbit_config.erl

Lines changed: 13 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,30 @@
11
-module(rabbit_config).
22

33
-export([
4-
schema_dir/0,
54
config_files/0,
65
get_advanced_config/0
76
]).
87

8+
-export([schema_dir/0]).
9+
-deprecated([{schema_dir, 0, eventually}]).
10+
911
-export_type([config_location/0]).
1012

1113
-type config_location() :: string().
1214

13-
%% we support both the classic Erlang term
14-
%% config file (rabbitmq.config) as well as rabbitmq.conf
15-
legacy_erlang_term_config_used() ->
16-
case get_prelaunch_config_state() of
17-
#{config_type := erlang,
18-
config_advanced_file := undefined} ->
19-
true;
20-
_ ->
21-
false
22-
end.
23-
2415
get_confs() ->
2516
case get_prelaunch_config_state() of
26-
#{config_files := Confs} ->
27-
[ filename:rootname(Conf, ".conf") ++ ".conf"
28-
|| Conf <- Confs ];
29-
_ ->
30-
[]
17+
#{config_files := Confs} -> Confs;
18+
_ -> []
3119
end.
3220

3321
schema_dir() ->
34-
case init:get_argument(conf_schema_dir) of
35-
{ok, SchemaDir} -> SchemaDir;
36-
_ ->
37-
case code:priv_dir(rabbit) of
38-
{error, bad_name} -> filename:join([".", "priv", "schema"]);
39-
PrivDir -> filename:join([PrivDir, "schema"])
40-
end
41-
end.
22+
undefined.
4223

4324
get_advanced_config() ->
4425
case get_prelaunch_config_state() of
4526
%% There can be only one advanced.config
46-
#{config_advanced_file := FileName} ->
27+
#{config_advanced_file := FileName} when FileName =/= undefined ->
4728
case rabbit_file:is_file(FileName) of
4829
true -> FileName;
4930
false -> none
@@ -53,47 +34,13 @@ get_advanced_config() ->
5334

5435
-spec config_files() -> [config_location()].
5536
config_files() ->
56-
case legacy_erlang_term_config_used() of
57-
true ->
58-
case get_prelaunch_config_state() of
59-
#{config_files := Files} ->
60-
[ filename:absname(filename:rootname(File) ++ ".config")
61-
|| File <- Files];
62-
_ ->
63-
case config_setting() of
37+
ConfFiles = [filename:absname(File) || File <- get_confs(),
38+
filelib:is_regular(File)],
39+
AdvancedFiles = case get_advanced_config() of
6440
none -> [];
65-
File -> [filename:absname(filename:rootname(File, ".config") ++ ".config")
66-
++
67-
" (not found)"]
68-
end
69-
end;
70-
false ->
71-
ConfFiles = [filename:absname(File) || File <- get_confs(),
72-
filelib:is_regular(File)],
73-
AdvancedFiles = case get_advanced_config() of
74-
none -> [];
75-
FileName -> [filename:absname(FileName)]
76-
end,
77-
AdvancedFiles ++ ConfFiles
78-
79-
end.
41+
FileName -> [filename:absname(FileName)]
42+
end,
43+
AdvancedFiles ++ ConfFiles.
8044

8145
get_prelaunch_config_state() ->
8246
rabbit_prelaunch_conf:get_config_state().
83-
84-
%% This is a pain. We want to know where the config file is. But we
85-
%% can't specify it on the command line if it is missing or the VM
86-
%% will fail to start, so we need to find it by some mechanism other
87-
%% than init:get_arguments/0. We can look at the environment variable
88-
%% which is responsible for setting it... but that doesn't work for a
89-
%% Windows service since the variable can change and the service not
90-
%% be reinstalled, so in that case we add a magic application env.
91-
config_setting() ->
92-
case application:get_env(rabbit, windows_service_config) of
93-
{ok, File1} -> File1;
94-
undefined ->
95-
case application:get_env(rabbitmq_prelaunch, context) of
96-
#{main_config_file := File2} -> File2;
97-
_ -> none
98-
end
99-
end.

0 commit comments

Comments
 (0)