Skip to content

Commit 9ffb44a

Browse files
Merge pull request #9160 from rabbitmq/mergify/bp/v3.11.x/pr-9156
Disable add/delete/shrink/grow QQ operations via HTTP api (backport #9151) (backport #9156)
2 parents 39d49a0 + b44b755 commit 9ffb44a

7 files changed

+58
-8
lines changed

deps/rabbitmq_management/priv/schema/rabbitmq_management.schema

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,3 +535,10 @@ end}.
535535
{datatype, {enum, [true, false]}},
536536
{include_default, false}
537537
]}.
538+
539+
%% Disables add/remove/grow/shrink over API.
540+
541+
{mapping, "management.restrictions.quorum_queue_replica_operations.disabled", "rabbitmq_management.restrictions.quorum_queue_replica_operations.disabled", [
542+
{datatype, {enum, [true, false]}},
543+
{include_default, false}
544+
]}.

deps/rabbitmq_management/src/rabbit_mgmt_features.erl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77

88
-module(rabbit_mgmt_features).
99

10-
-export([is_op_policy_updating_disabled/0]).
10+
-export([is_op_policy_updating_disabled/0,
11+
is_qq_replica_operations_disabled/0]).
12+
13+
is_qq_replica_operations_disabled() ->
14+
get_restriction([quorum_queue_replica_operations, disabled]).
1115

1216
is_op_policy_updating_disabled() ->
1317
case get_restriction([operator_policy_changes, disabled]) of

deps/rabbitmq_management/src/rabbit_mgmt_wm_quorum_queue_replicas_add_member.erl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,9 @@ accept_content(ReqData, Context) ->
5656

5757

5858
is_authorized(ReqData, Context) ->
59-
rabbit_mgmt_util:is_authorized_admin(ReqData, Context).
59+
case rabbit_mgmt_features:is_qq_replica_operations_disabled() of
60+
true ->
61+
rabbit_mgmt_util:method_not_allowed(<<"Broker settings disallow quorum queue replica operations.">>, ReqData, Context);
62+
false ->
63+
rabbit_mgmt_util:is_authorized_admin(ReqData, Context)
64+
end.

deps/rabbitmq_management/src/rabbit_mgmt_wm_quorum_queue_replicas_delete_member.erl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,11 @@ delete_completed(ReqData, Context) ->
5656
%% return 202 Accepted since this is an inherently asynchronous operation
5757
{false, ReqData, Context}.
5858

59+
5960
is_authorized(ReqData, Context) ->
60-
rabbit_mgmt_util:is_authorized_admin(ReqData, Context).
61+
case rabbit_mgmt_features:is_qq_replica_operations_disabled() of
62+
true ->
63+
rabbit_mgmt_util:method_not_allowed(<<"Broker settings disallow quorum queue replica operations.">>, ReqData, Context);
64+
false ->
65+
rabbit_mgmt_util:is_authorized_admin(ReqData, Context)
66+
end.

deps/rabbitmq_management/src/rabbit_mgmt_wm_quorum_queue_replicas_grow.erl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ accept_content(ReqData, Context) ->
4848
end),
4949
{true, ReqData, Context}.
5050

51-
5251
is_authorized(ReqData, Context) ->
53-
rabbit_mgmt_util:is_authorized_admin(ReqData, Context).
52+
case rabbit_mgmt_features:is_qq_replica_operations_disabled() of
53+
true ->
54+
rabbit_mgmt_util:method_not_allowed(<<"Broker settings disallow quorum queue replica operations.">>, ReqData, Context);
55+
false ->
56+
rabbit_mgmt_util:is_authorized_admin(ReqData, Context)
57+
end.

deps/rabbitmq_management/src/rabbit_mgmt_wm_quorum_queue_replicas_shrink.erl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,9 @@ delete_completed(ReqData, Context) ->
3535
{false, ReqData, Context}.
3636

3737
is_authorized(ReqData, Context) ->
38-
rabbit_mgmt_util:is_authorized_admin(ReqData, Context).
38+
case rabbit_mgmt_features:is_qq_replica_operations_disabled() of
39+
true ->
40+
rabbit_mgmt_util:method_not_allowed(<<"Broker settings disallow quorum queue replica operations.">>, ReqData, Context);
41+
false ->
42+
rabbit_mgmt_util:is_authorized_admin(ReqData, Context)
43+
end.

deps/rabbitmq_management/test/rabbit_mgmt_http_SUITE.erl

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
http_put/4, http_put/6,
2323
http_post/4, http_post/6,
2424
http_upload_raw/8,
25-
http_delete/3, http_delete/5,
25+
http_delete/3, http_delete/4, http_delete/5,
2626
http_put_raw/4, http_post_accept_json/4,
2727
req/4, auth_header/2,
2828
assert_permanent_redirect/3,
@@ -151,7 +151,8 @@ all_tests() -> [
151151
auth_attempts_test,
152152
user_limits_list_test,
153153
user_limit_set_test,
154-
config_environment_test
154+
config_environment_test,
155+
disabled_qq_replica_opers_test
155156
].
156157

157158
%% -------------------------------------------------------------------
@@ -216,6 +217,11 @@ init_per_testcase(Testcase = disabled_operator_policy_test, Config) ->
216217
rabbit_ct_broker_helpers:rpc_all(Config,
217218
application, set_env, [rabbitmq_management, restrictions, Restrictions]),
218219
rabbit_ct_helpers:testcase_started(Config, Testcase);
220+
init_per_testcase(Testcase = disabled_qq_replica_opers_test, Config) ->
221+
Restrictions = [{quorum_queue_replica_operations, [{disabled, true}]}],
222+
rabbit_ct_broker_helpers:rpc_all(Config,
223+
application, set_env, [rabbitmq_management, restrictions, Restrictions]),
224+
rabbit_ct_helpers:testcase_started(Config, Testcase);
219225
init_per_testcase(Testcase, Config) ->
220226
rabbit_ct_broker_helpers:close_all_connections(Config, 0, <<"rabbit_mgmt_SUITE:init_per_testcase">>),
221227
rabbit_ct_helpers:testcase_started(Config, Testcase).
@@ -277,6 +283,10 @@ end_per_testcase0(disabled_operator_policy_test, Config) ->
277283
rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
278284
[rabbitmq_management, restrictions]),
279285
Config;
286+
end_per_testcase0(disabled_qq_replica_opers_test, Config) ->
287+
rabbit_ct_broker_helpers:rpc(Config, 0, application, unset_env,
288+
[rabbitmq_management, restrictions]),
289+
Config;
280290
end_per_testcase0(_, Config) -> Config.
281291

282292
%% -------------------------------------------------------------------
@@ -3553,6 +3563,15 @@ config_environment_test(Config) ->
35533563
?assertEqual(config_environment_test_value, V).
35543564

35553565

3566+
disabled_qq_replica_opers_test(Config) ->
3567+
Nodename = rabbit_data_coercion:to_list(rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename)),
3568+
Body = [{node, Nodename}],
3569+
http_post(Config, "/queues/quorum/%2F/qq.whatever/replicas/add", Body, ?METHOD_NOT_ALLOWED),
3570+
http_delete(Config, "/queues/quorum/%2F/qq.whatever/replicas/delete", ?METHOD_NOT_ALLOWED, Body),
3571+
http_post(Config, "/queues/quorum/replicas/on/" ++ Nodename ++ "/grow", Body, ?METHOD_NOT_ALLOWED),
3572+
http_delete(Config, "/queues/quorum/replicas/on/" ++ Nodename ++ "/shrink", ?METHOD_NOT_ALLOWED),
3573+
passed.
3574+
35563575
%% -------------------------------------------------------------------
35573576
%% Helpers.
35583577
%% -------------------------------------------------------------------

0 commit comments

Comments
 (0)