summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2021-08-24 04:41:04 +0300
committerMichael Klishin <michael@clojurewerkz.org>2021-08-24 04:41:04 +0300
commit6f97707dacf95d53f27ebe73c740e81cde0a5082 (patch)
tree68506ebb7b1280c3035ae82933593e2db74c66d1
parent6bf4a99f58dcd22107da1a232ab98e86249b2066 (diff)
downloadrabbitmq-server-git-6f97707dacf95d53f27ebe73c740e81cde0a5082.tar.gz
Definition import: correctly import vhost metadata
-rw-r--r--deps/rabbit/src/rabbit_definitions.erl12
-rw-r--r--deps/rabbit/test/definition_import_SUITE.erl28
2 files changed, 34 insertions, 6 deletions
diff --git a/deps/rabbit/src/rabbit_definitions.erl b/deps/rabbit/src/rabbit_definitions.erl
index 2edc233d74..8faf2f808a 100644
--- a/deps/rabbit/src/rabbit_definitions.erl
+++ b/deps/rabbit/src/rabbit_definitions.erl
@@ -481,11 +481,13 @@ add_policy(VHost, Param, Username) ->
-spec add_vhost(map(), rabbit_types:username()) -> ok.
add_vhost(VHost, ActingUser) ->
- VHostName = maps:get(name, VHost, undefined),
- VHostTrace = maps:get(tracing, VHost, undefined),
- VHostDefinition = maps:get(definition, VHost, undefined),
- VHostTags = maps:get(tags, VHost, undefined),
- rabbit_vhost:put_vhost(VHostName, VHostDefinition, VHostTags, VHostTrace, ActingUser).
+ Name = maps:get(name, VHost, undefined),
+ IsTracingEnabled = maps:get(tracing, VHost, undefined),
+ Metadata = rabbit_data_coercion:atomize_keys(maps:get(metadata, VHost, #{})),
+ Description = maps:get(description, VHost, maps:get(description, Metadata, <<"">>)),
+ Tags = maps:get(tags, VHost, maps:get(tags, Metadata, [])),
+
+ rabbit_vhost:put_vhost(Name, Description, Tags, IsTracingEnabled, ActingUser).
add_permission(Permission, ActingUser) ->
rabbit_auth_backend_internal:set_permissions(maps:get(user, Permission, undefined),
diff --git a/deps/rabbit/test/definition_import_SUITE.erl b/deps/rabbit/test/definition_import_SUITE.erl
index eff4ba1707..216402ef1f 100644
--- a/deps/rabbit/test/definition_import_SUITE.erl
+++ b/deps/rabbit/test/definition_import_SUITE.erl
@@ -45,7 +45,8 @@ groups() ->
import_case12,
import_case13,
import_case14,
- import_case15
+ import_case15,
+ import_case16
]},
{boot_time_import_using_classic_source, [], [
@@ -206,6 +207,28 @@ import_case13(Config) ->
import_case14(Config) -> import_file_case(Config, "case14").
%% contains a user with tags as a list
import_case15(Config) -> import_file_case(Config, "case15").
+%% contains a virtual host with tags
+import_case16(Config) ->
+ case rabbit_ct_broker_helpers:enable_feature_flag(Config, virtual_host_metadata) of
+ ok ->
+ import_file_case(Config, "case16"),
+ VHost = <<"tagged">>,
+ VHostIsImported =
+ fun () ->
+ case vhost_lookup(Config, VHost) of
+ {error, {no_such_vhosts, _}} -> false;
+ _ -> true
+ end
+ end,
+ rabbit_ct_helpers:await_condition(VHostIsImported, 20000),
+ VHostRec = vhost_lookup(Config, VHost),
+ ?assertEqual(<<"A case16 description">>, vhost:get_description(VHostRec)),
+ ?assertEqual([multi_dc_replication,ab,cde], vhost:get_tags(VHostRec)),
+
+ ok;
+ Skip ->
+ Skip
+ end.
export_import_round_trip_case1(Config) ->
%% case 6 has runtime parameters that do not depend on any plugins
@@ -338,3 +361,6 @@ run_invalid_import_case(Path) ->
queue_lookup(Config, VHost, Name) ->
rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, lookup, [rabbit_misc:r(VHost, queue, Name)]).
+
+vhost_lookup(Config, VHost) ->
+ rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_vhost, lookup, [VHost]).