From ce655864050a78f46005b8aa5e047394a6178cd6 Mon Sep 17 00:00:00 2001 From: Michal Kuratczyk Date: Sun, 15 Nov 2020 19:05:22 +0100 Subject: [PATCH] Allow "all" as a feature flag name `rabbitmqctl enable_feature_flag all` enables all currently disabled feature flags. While https://github.com/rabbitmq/rabbitmq-cli/issues/455 asked for `--all`, I decided to just use "all" for consistency with `rabbitmq-queues rebalance all`. Closes rabbitmq/rabbitmq-cli#455 (cherry picked from commit af9e877848cfe4434de697d756e64014d180a945) --- .../ctl/commands/enable_feature_flag_command.ex | 14 +++++++++++++- .../test/ctl/enable_feature_flag_test.exs | 6 ++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/enable_feature_flag_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/enable_feature_flag_command.ex index ddcaec924dff..b4108c7944f3 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/enable_feature_flag_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/enable_feature_flag_command.ex @@ -17,6 +17,16 @@ defmodule RabbitMQ.CLI.Ctl.Commands.EnableFeatureFlagCommand do use RabbitMQ.CLI.Core.RequiresRabbitAppRunning + def run(["all"], %{node: node_name}) do + case :rabbit_misc.rpc_call(node_name, :rabbit_feature_flags, :enable_all, []) do + # Server does not support feature flags, consider none are available. + # See rabbitmq/rabbitmq-cli#344 for context. MK. + {:badrpc, {:EXIT, {:undef, _}}} -> {:error, :unsupported} + {:badrpc, _} = err -> err + other -> other + end + end + def run([feature_flag], %{node: node_name}) do case :rabbit_misc.rpc_call(node_name, :rabbit_feature_flags, :enable, [String.to_atom(feature_flag)]) do # Server does not support feature flags, consider none are available. @@ -32,11 +42,13 @@ defmodule RabbitMQ.CLI.Ctl.Commands.EnableFeatureFlagCommand do end use RabbitMQ.CLI.DefaultOutput - def usage, do: "enable_feature_flag " + def usage, do: "enable_feature_flag < all | feature_flag >" def help_section(), do: :feature_flags def description(), do: "Enables a feature flag on target node" + def banner(["all"], _), do: "Enabling all feature flags ..." + def banner([feature_flag], _), do: "Enabling feature flag \"#{feature_flag}\" ..." end diff --git a/deps/rabbitmq_cli/test/ctl/enable_feature_flag_test.exs b/deps/rabbitmq_cli/test/ctl/enable_feature_flag_test.exs index e9700c6c86bc..f8a3e62920d7 100644 --- a/deps/rabbitmq_cli/test/ctl/enable_feature_flag_test.exs +++ b/deps/rabbitmq_cli/test/ctl/enable_feature_flag_test.exs @@ -57,6 +57,12 @@ defmodule EnableFeatureFlagCommandTest do assert list_feature_flags(:enabled) |> Map.has_key?(context[:feature_flag]) end + test "run: enabling all feature flags succeeds", context do + enable_feature_flag context[:feature_flag] + assert @command.run(["all"], context[:opts]) == :ok + assert list_feature_flags(:enabled) |> Map.has_key?(context[:feature_flag]) + end + test "banner", context do assert @command.banner([context[:feature_flag]], context[:opts]) =~ ~r/Enabling feature flag \"#{context[:feature_flag]}\" \.\.\./