ctl add_vhost: check if relevant feature flags are enabled

This commit is contained in:
Michael Klishin 2022-08-01 15:56:10 +04:00
parent 5ecb546ef5
commit 2c4c51d62d
No known key found for this signature in database
GPG Key ID: 8ADA141E1AD87C94
2 changed files with 34 additions and 2 deletions

View File

@ -5,11 +5,31 @@
## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Core.FeatureFlags do
alias RabbitMQ.CLI.Core.ExitCodes
#
# API
#
def is_enabled_remotely(node_name, feature_flag) do
case :rabbit_misc.rpc_call(node_name, :rabbit_feature_flags, :is_enabled, [feature_flag]) do
true -> true
false -> false
{:error, _} = error -> error
end
end
def assert_feature_flag_enabled(node_name, feature_flag, success_fun) do
case is_enabled_remotely(node_name, feature_flag) do
true ->
success_fun.()
false ->
{:error, ExitCodes.exit_dataerr(), "The #{feature_flag} feature flag is not enabled on the target node"}
{:error, _} = error ->
error
end
end
def feature_flag_lines(feature_flags) do
feature_flags
|> Enum.map(fn %{name: name, state: state} ->

View File

@ -5,7 +5,7 @@
## Copyright (c) 2007-2022 VMware, Inc. or its affiliates. All rights reserved.
defmodule RabbitMQ.CLI.Ctl.Commands.AddVhostCommand do
alias RabbitMQ.CLI.Core.{DocGuide, Helpers}
alias RabbitMQ.CLI.Core.{DocGuide, ErrorCodes, FeatureFlags, Helpers}
@behaviour RabbitMQ.CLI.CommandBehaviour
@ -24,7 +24,19 @@ defmodule RabbitMQ.CLI.Ctl.Commands.AddVhostCommand do
meta = %{description: desc,
tags: parse_tags(tags),
default_queue_type: default_qt}
:rabbit_misc.rpc_call(node_name, :rabbit_vhost, :add, [vhost, meta, Helpers.cli_acting_user()])
# check if the respective feature flag is enabled
case default_qt do
"quorum" ->
FeatureFlags.assert_feature_flag_enabled(node_name, :quorum_queue, fn () ->
:rabbit_misc.rpc_call(node_name, :rabbit_vhost, :add, [vhost, meta, Helpers.cli_acting_user()])
end)
"stream" ->
FeatureFlags.assert_feature_flag_enabled(node_name, :stream_queue, fn () ->
:rabbit_misc.rpc_call(node_name, :rabbit_vhost, :add, [vhost, meta, Helpers.cli_acting_user()])
end)
_ ->
:rabbit_misc.rpc_call(node_name, :rabbit_vhost, :add, [vhost, meta, Helpers.cli_acting_user()])
end
end
def run([vhost], %{node: node_name, description: desc, tags: tags}) do
:rabbit_misc.rpc_call(node_name, :rabbit_vhost, :add, [vhost, description, tags, Helpers.cli_acting_user()])