From c50603494b5526f37181a6b3450b2922dc5b1d51 Mon Sep 17 00:00:00 2001 From: Leonard Lyubich Date: Tue, 18 Oct 2022 11:29:25 +0400 Subject: [PATCH] [#1916] cli/control: Pre-check maintenance mode in `set-status` Node's maintenance state can be set only if the network allows it. Make `neofs-cli control set-status` to read current network settings and check is maintenance state is allowed. Fail the execution if the mode is not allowed. Signed-off-by: Leonard Lyubich --- .../modules/control/set_netmap_status.go | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/cmd/neofs-cli/modules/control/set_netmap_status.go b/cmd/neofs-cli/modules/control/set_netmap_status.go index 9d3c86a54..9acc2a156 100644 --- a/cmd/neofs-cli/modules/control/set_netmap_status.go +++ b/cmd/neofs-cli/modules/control/set_netmap_status.go @@ -4,10 +4,13 @@ import ( "fmt" rawclient "github.com/nspcc-dev/neofs-api-go/v2/rpc/client" + internalclient "github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/client" "github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/common" + "github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/commonflags" "github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/key" "github.com/nspcc-dev/neofs-node/pkg/services/control" "github.com/spf13/cobra" + "github.com/spf13/viper" ) const ( @@ -54,6 +57,32 @@ func setNetmapStatus(cmd *cobra.Command, _ []string) { status = control.NetmapStatus_OFFLINE case netmapStatusMaintenance: status = control.NetmapStatus_MAINTENANCE + + common.PrintVerbose("Reading network settings to check allowance of \"%s\" mode...", st) + + if !viper.IsSet(commonflags.RPC) { + common.ExitOnErr(cmd, "", + fmt.Errorf("flag --%s (-%s) is not set, you must specify it for \"%s\" mode", + commonflags.RPC, + commonflags.RPCShorthand, + st, + ), + ) + } + + cli := internalclient.GetSDKClientByFlag(cmd, pk, commonflags.RPC) + + var prm internalclient.NetworkInfoPrm + prm.SetClient(cli) + + res, err := internalclient.NetworkInfo(prm) + common.ExitOnErr(cmd, "receive network info: %v", err) + + if !res.NetworkInfo().MaintenanceModeAllowed() { + common.ExitOnErr(cmd, "", fmt.Errorf("\"%s\" mode is not allowed by the network", st)) + } + + common.PrintVerbose("\"%s\" mode is allowed, continue processing...", st) } body := new(control.SetNetmapStatusRequest_Body)