Skip to content
This repository was archived by the owner on Nov 17, 2020. It is now read-only.

Commit 3bdfaae

Browse files
authored
Merge pull request #357 from rabbitmq/load-several-config-files
rabbit_env: Add `$RABBITMQ_CONFIG_FILES`
2 parents ae7b907 + c7e4daa commit 3bdfaae

File tree

2 files changed

+48
-5
lines changed

2 files changed

+48
-5
lines changed

src/rabbit_env.erl

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"RABBITMQ_BASE",
4343
"RABBITMQ_CONF_ENV_FILE",
4444
"RABBITMQ_CONFIG_FILE",
45+
"RABBITMQ_CONFIG_FILES",
4546
"RABBITMQ_DBG",
4647
"RABBITMQ_DIST_PORT",
4748
"RABBITMQ_ENABLED_PLUGINS",
@@ -121,6 +122,7 @@ get_context_after_reloading_env(Context) ->
121122
fun maybe_setup_dist_for_remote_query/1,
122123
fun dbg_config/1,
123124
fun main_config_file/1,
125+
fun additional_config_files/1,
124126
fun advanced_config_file/1,
125127
fun log_base_dir/1,
126128
fun main_log_file/1,
@@ -495,11 +497,19 @@ split_nodename(#{nodename := Nodename} = Context) ->
495497
%%
496498
%% RABBITMQ_CONFIG_FILE
497499
%% Main configuration file.
498-
%% Extension is optional. `.config` for the old rlang-term-based
500+
%% Extension is optional. `.config` for the old erlang-term-based
499501
%% format, `.conf` for the new Cuttlefish-based format.
500502
%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/rabbitmq
501503
%% (Windows) ${RABBITMQ_BASE}\rabbitmq
502504
%%
505+
%% RABBITMQ_CONFIG_FILES
506+
%% Additional configuration files.
507+
%% If a directory, all files directly inside it are loaded.
508+
%% If a glob pattern, all matching file are loaded.
509+
%% Only considered if the main configuration file is Cuttlefish-based.
510+
%% Default: (Unix) ${SYS_PREFIX}/etc/rabbitmq/conf.d/*.conf
511+
%% (Windows) ${RABBITMQ_BASE}\conf.d\*.conf
512+
%%
503513
%% RABBITMQ_ADVANCED_CONFIG_FILE
504514
%% Advanced configuration file.
505515
%% Erlang-term-based format with a `.config` extension.
@@ -527,6 +537,21 @@ main_config_file(Context) ->
527537
get_default_main_config_file(#{config_base_dir := ConfigBaseDir}) ->
528538
filename:join(ConfigBaseDir, "rabbitmq").
529539

540+
additional_config_files(Context) ->
541+
case get_prefixed_env_var("RABBITMQ_CONFIG_FILES") of
542+
false ->
543+
Pattern = get_default_additional_config_files(Context),
544+
update_context(
545+
Context, additional_config_files, Pattern, default);
546+
Value ->
547+
Pattern = normalize_path(Value),
548+
update_context(
549+
Context, additional_config_files, Pattern, environment)
550+
end.
551+
552+
get_default_additional_config_files(#{config_base_dir := ConfigBaseDir}) ->
553+
filename:join([ConfigBaseDir, "conf.d", "*.conf"]).
554+
530555
advanced_config_file(Context) ->
531556
case get_prefixed_env_var("RABBITMQ_ADVANCED_CONFIG_FILE") of
532557
false ->

test/rabbit_env_SUITE.erl

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
check_context_to_code_path/1,
3535
check_RABBITMQ_ADVANCED_CONFIG_FILE/1,
3636
check_RABBITMQ_CONFIG_FILE/1,
37+
check_RABBITMQ_CONFIG_FILES/1,
3738
check_RABBITMQ_DIST_PORT/1,
3839
check_RABBITMQ_ENABLED_PLUGINS/1,
3940
check_RABBITMQ_ENABLED_PLUGINS_FILE/1,
@@ -71,6 +72,7 @@ all() ->
7172
check_context_to_code_path,
7273
check_RABBITMQ_ADVANCED_CONFIG_FILE,
7374
check_RABBITMQ_CONFIG_FILE,
75+
check_RABBITMQ_CONFIG_FILES,
7476
check_RABBITMQ_DIST_PORT,
7577
check_RABBITMQ_ENABLED_PLUGINS,
7678
check_RABBITMQ_ENABLED_PLUGINS_FILE,
@@ -156,6 +158,7 @@ check_default_values(_) ->
156158
NodeS = atom_to_list(Node),
157159

158160
Origins = #{
161+
additional_config_files => default,
159162
advanced_config_file => default,
160163
amqp_ipaddr => default,
161164
amqp_tcp_port => default,
@@ -190,7 +193,8 @@ check_default_values(_) ->
190193
},
191194

192195
?assertEqual(
193-
#{advanced_config_file => "/etc/rabbitmq/advanced.config",
196+
#{additional_config_files => "/etc/rabbitmq/conf.d/*.conf",
197+
advanced_config_file => "/etc/rabbitmq/advanced.config",
194198
amqp_ipaddr => "auto",
195199
amqp_tcp_port => 5672,
196200
conf_env_file => "/etc/rabbitmq/rabbitmq-env.conf",
@@ -236,7 +240,8 @@ check_default_values(_) ->
236240
UnixContext),
237241

238242
?assertEqual(
239-
#{advanced_config_file => "%APPDATA%/RabbitMQ/advanced.config",
243+
#{additional_config_files => "%APPDATA%/RabbitMQ/conf.d/*.conf",
244+
advanced_config_file => "%APPDATA%/RabbitMQ/advanced.config",
240245
amqp_ipaddr => "auto",
241246
amqp_tcp_port => 5672,
242247
conf_env_file => "%APPDATA%/RabbitMQ/rabbitmq-env-conf.bat",
@@ -362,6 +367,7 @@ check_values_from_reachable_remote_node(Config) ->
362367
{RFFValue, RFFOrigin} = forced_feature_flags_on_init_expect(),
363368

364369
Origins = #{
370+
additional_config_files => default,
365371
advanced_config_file => default,
366372
amqp_ipaddr => default,
367373
amqp_tcp_port => default,
@@ -396,7 +402,8 @@ check_values_from_reachable_remote_node(Config) ->
396402
},
397403

398404
?assertEqual(
399-
#{advanced_config_file => "/etc/rabbitmq/advanced.config",
405+
#{additional_config_files => "/etc/rabbitmq/conf.d/*.conf",
406+
advanced_config_file => "/etc/rabbitmq/advanced.config",
400407
amqp_ipaddr => "auto",
401408
amqp_tcp_port => 5672,
402409
conf_env_file => "/etc/rabbitmq/rabbitmq-env.conf",
@@ -477,6 +484,7 @@ check_values_from_offline_remote_node(_) ->
477484
{RFFValue, RFFOrigin} = forced_feature_flags_on_init_expect(),
478485

479486
Origins = #{
487+
additional_config_files => default,
480488
advanced_config_file => default,
481489
amqp_ipaddr => default,
482490
amqp_tcp_port => default,
@@ -511,7 +519,8 @@ check_values_from_offline_remote_node(_) ->
511519
},
512520

513521
?assertEqual(
514-
#{advanced_config_file => "/etc/rabbitmq/advanced.config",
522+
#{additional_config_files => "/etc/rabbitmq/conf.d/*.conf",
523+
advanced_config_file => "/etc/rabbitmq/advanced.config",
515524
amqp_ipaddr => "auto",
516525
amqp_tcp_port => 5672,
517526
conf_env_file => "/etc/rabbitmq/rabbitmq-env.conf",
@@ -668,6 +677,15 @@ check_RABBITMQ_CONFIG_FILE(_) ->
668677
Value1, Value1,
669678
Value2, Value2).
670679

680+
check_RABBITMQ_CONFIG_FILES(_) ->
681+
Value1 = random_string(),
682+
Value2 = random_string(),
683+
check_prefixed_variable("RABBITMQ_CONFIG_FILES",
684+
additional_config_files,
685+
'_',
686+
Value1, Value1,
687+
Value2, Value2).
688+
671689
check_RABBITMQ_DIST_PORT(_) ->
672690
Value1 = random_int(),
673691
Value2 = random_int(),

0 commit comments

Comments
 (0)