Skip to content

Commit 91adf70

Browse files
Merge pull request #12703 from rabbitmq/mergify/bp/v4.0.x/pr-12702
Make it possible to set some node-specific metadata using tags (backport #12702)
2 parents 5b27204 + a0be24f commit 91adf70

File tree

5 files changed

+53
-7
lines changed

5 files changed

+53
-7
lines changed

deps/rabbit/priv/schema/rabbit.schema

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2702,6 +2702,20 @@ fun(Conf) ->
27022702
end
27032703
end}.
27042704

2705+
{mapping, "node_tags.$tag", "rabbit.node_tags", [
2706+
{datatype, [binary]}
2707+
]}.
2708+
2709+
{translation, "rabbit.node_tags",
2710+
fun(Conf) ->
2711+
case cuttlefish:conf_get("node_tags", Conf, undefined) of
2712+
none -> [];
2713+
_ ->
2714+
Settings = cuttlefish_variable:filter_by_prefix("node_tags", Conf),
2715+
[ {list_to_binary(K), V} || {[_, K], V} <- Settings]
2716+
end
2717+
end}.
2718+
27052719
% ===============================
27062720
% Validators
27072721
% ===============================

deps/rabbit/src/rabbit.erl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,7 @@ status() ->
741741
{erlang_version, erlang:system_info(system_version)},
742742
{memory, rabbit_vm:memory()},
743743
{alarms, alarms()},
744+
{tags, tags()},
744745
{is_under_maintenance, rabbit_maintenance:is_being_drained_local_read(node())},
745746
{listeners, listeners()},
746747
{vm_memory_calculation_strategy, vm_memory_monitor:get_memory_calculation_strategy()}],
@@ -800,6 +801,9 @@ alarms() ->
800801
%% [{{resource_limit,memory,rabbit@mercurio},[]}]
801802
[{resource_limit, Limit, Node} || {{resource_limit, Limit, Node}, _} <- Alarms, Node =:= N].
802803

804+
tags() ->
805+
application:get_env(rabbit, node_tags, []).
806+
803807
listeners() ->
804808
Listeners = try
805809
rabbit_networking:active_listeners()

deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/status_command.ex

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StatusCommand do
6969

7070
def output(result, %{node: node_name, unit: unit}) when is_list(result) do
7171
m = result_map(result)
72-
7372
product_name_section =
7473
case m do
7574
%{:product_name => product_name} when product_name != "" ->
@@ -142,6 +141,17 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StatusCommand do
142141
xs -> alarm_lines(xs, node_name)
143142
end
144143

144+
IO.inspect(m[:tags])
145+
tags_section =
146+
[
147+
"\n#{bright("Tags")}\n"
148+
] ++
149+
case m[:tags] do
150+
nil -> ["(none)"]
151+
[] -> ["(none)"]
152+
xs -> tag_lines(xs)
153+
end
154+
145155
breakdown = compute_relative_values(m[:memory])
146156
memory_calculation_strategy = to_atom(m[:vm_memory_calculation_strategy])
147157
total_memory = get_in(m[:memory], [:total, memory_calculation_strategy])
@@ -198,6 +208,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StatusCommand do
198208
config_section ++
199209
log_section ++
200210
alarms_section ++
211+
tags_section ++
201212
memory_section ++
202213
file_descriptors ++ disk_space_section ++ totals_section ++ listeners_section
203214

@@ -265,6 +276,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StatusCommand do
265276
disk_free: Keyword.get(result, :disk_free),
266277
file_descriptors: Enum.into(Keyword.get(result, :file_descriptors), %{}),
267278
alarms: Keyword.get(result, :alarms),
279+
tags: Keyword.get(result, :tags, []),
268280
listeners: listener_maps(Keyword.get(result, :listeners, [])),
269281
memory: Keyword.get(result, :memory) |> Enum.into(%{}),
270282
data_directory: Keyword.get(result, :data_directory) |> to_string,
@@ -285,6 +297,12 @@ defmodule RabbitMQ.CLI.Ctl.Commands.StatusCommand do
285297
end
286298
end
287299

300+
defp tag_lines(mapping) do
301+
Enum.map(mapping, fn {key, value} ->
302+
"#{key}: #{value}"
303+
end)
304+
end
305+
288306
def space_as_iu_or_unknown(value, unit) do
289307
case value do
290308
:NaN ->

deps/rabbitmq_management/src/rabbit_mgmt_wm_overview.erl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ to_json(ReqData, Context = #context{user = User = #user{tags = Tags}}) ->
4848
{rabbitmq_version, list_to_binary(rabbit:base_product_version())},
4949
{cluster_name, rabbit_nodes:cluster_name()},
5050
{cluster_tags, cluster_tags()},
51+
{node_tags, node_tags()},
5152
{erlang_version, erlang_version()},
5253
{erlang_full_version, erlang_full_version()},
5354
{release_series_support_status, rabbit_release_series:readable_support_status()},
@@ -190,3 +191,6 @@ cluster_tags() ->
190191
[];
191192
Tags -> Tags
192193
end.
194+
195+
node_tags() ->
196+
application:get_env(rabbit, node_tags, []).

deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ all_tests() -> [
202202
qq_status_test,
203203
list_deprecated_features_test,
204204
list_used_deprecated_features_test,
205-
cluster_tags_test
205+
cluster_and_node_tags_test
206206
].
207207

208208
%% -------------------------------------------------------------------
@@ -283,8 +283,10 @@ init_per_testcase(Testcase = disabled_qq_replica_opers_test, Config) ->
283283
rabbit_ct_broker_helpers:rpc_all(Config,
284284
application, set_env, [rabbitmq_management, restrictions, Restrictions]),
285285
rabbit_ct_helpers:testcase_started(Config, Testcase);
286-
init_per_testcase(Testcase = cluster_tags_test, Config) ->
286+
init_per_testcase(Testcase = cluster_and_node_tags_test, Config) ->
287287
Tags = [{<<"az">>, <<"us-east-3">>}, {<<"region">>,<<"us-east">>}, {<<"environment">>,<<"production">>}],
288+
rpc(Config,
289+
application, set_env, [rabbit, node_tags, Tags]),
288290
rpc(
289291
Config, rabbit_runtime_parameters, set_global,
290292
[cluster_tags, Tags, none]),
@@ -355,7 +357,9 @@ end_per_testcase0(disabled_operator_policy_test, Config) ->
355357
end_per_testcase0(disabled_qq_replica_opers_test, Config) ->
356358
rpc(Config, application, unset_env, [rabbitmq_management, restrictions]),
357359
Config;
358-
end_per_testcase0(cluster_tags_test, Config) ->
360+
end_per_testcase0(cluster_and_node_tags_test, Config) ->
361+
rpc(
362+
Config, application, unset_env, [rabbit, node_tags]),
359363
rpc(
360364
Config, rabbit_runtime_parameters, clear_global,
361365
[cluster_tags, none]),
@@ -3948,12 +3952,14 @@ list_used_deprecated_features_test(Config) ->
39483952
?assertEqual(list_to_binary(Desc), maps:get(desc, Feature)),
39493953
?assertEqual(list_to_binary(DocUrl), maps:get(doc_url, Feature)).
39503954

3951-
cluster_tags_test(Config) ->
3955+
cluster_and_node_tags_test(Config) ->
39523956
Overview = http_get(Config, "/overview"),
3953-
Tags = maps:get(cluster_tags, Overview),
3957+
ClusterTags = maps:get(cluster_tags, Overview),
3958+
NodeTags = maps:get(node_tags, Overview),
39543959
ExpectedTags = #{az => <<"us-east-3">>,environment => <<"production">>,
39553960
region => <<"us-east">>},
3956-
?assertEqual(ExpectedTags, Tags),
3961+
?assertEqual(ExpectedTags, ClusterTags),
3962+
?assertEqual(ExpectedTags, NodeTags),
39573963
passed.
39583964

39593965
%% -------------------------------------------------------------------

0 commit comments

Comments
 (0)