mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
144 lines
4.1 KiB
Go
144 lines
4.1 KiB
Go
// Copyright 2018 The CubeFS Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
// implied. See the License for the specific language governing
|
|
// permissions and limitations under the License.
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/cubefs/cubefs/proto"
|
|
sdk "github.com/cubefs/cubefs/sdk/master"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
const (
|
|
cmdZoneUse = "zone [COMMAND]"
|
|
cmdZoneShort = "Manage zone"
|
|
)
|
|
|
|
func newZoneCmd(client *sdk.MasterClient) *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: cmdZoneUse,
|
|
Short: cmdZoneShort,
|
|
Args: cobra.MinimumNArgs(0),
|
|
}
|
|
cmd.AddCommand(
|
|
newZoneListCmd(client),
|
|
newZoneInfoCmd(client),
|
|
newZoneUpdateCmd(client),
|
|
)
|
|
return cmd
|
|
}
|
|
|
|
const (
|
|
cmdZoneListShort = "List cluster zones"
|
|
cmdZoneInfoShort = "Show zone information"
|
|
cmdZoneUpdateShort = "Update zone settings"
|
|
)
|
|
|
|
func newZoneListCmd(client *sdk.MasterClient) *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: CliOpList,
|
|
Short: cmdZoneListShort,
|
|
Aliases: []string{"ls"},
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
var zones []*proto.ZoneView
|
|
var err error
|
|
defer func() {
|
|
errout(err)
|
|
}()
|
|
if zones, err = client.AdminAPI().ListZones(); err != nil {
|
|
return
|
|
}
|
|
zoneTablePattern := "%-8v %-10v\n"
|
|
stdout(zoneTablePattern, "ZONE", "STATUS")
|
|
for _, zone := range zones {
|
|
stdout(zoneTablePattern, zone.Name, zone.Status)
|
|
}
|
|
},
|
|
}
|
|
return cmd
|
|
}
|
|
|
|
func newZoneInfoCmd(client *sdk.MasterClient) *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: CliOpInfo + " [NAME]",
|
|
Short: cmdZoneInfoShort,
|
|
Args: cobra.MinimumNArgs(1),
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
var topo *proto.TopologyView
|
|
var (
|
|
err error
|
|
zoneName string
|
|
zoneView *proto.ZoneView
|
|
)
|
|
defer func() {
|
|
errout(err)
|
|
}()
|
|
zoneName = args[0]
|
|
if topo, err = client.AdminAPI().Topo(); err != nil {
|
|
return
|
|
}
|
|
|
|
for _, zone := range topo.Zones {
|
|
if zoneName == zone.Name {
|
|
zoneView = zone
|
|
}
|
|
}
|
|
if zoneView == nil {
|
|
err = fmt.Errorf("Zone[%v] not exists in cluster\n ", zoneName)
|
|
return
|
|
}
|
|
stdout("%v", formatZoneView(zoneView))
|
|
},
|
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
|
if len(args) != 0 {
|
|
return nil, cobra.ShellCompDirectiveNoFileComp
|
|
}
|
|
return validZones(client, toComplete), cobra.ShellCompDirectiveNoFileComp
|
|
},
|
|
}
|
|
return cmd
|
|
}
|
|
|
|
func newZoneUpdateCmd(client *sdk.MasterClient) *cobra.Command {
|
|
enable := true
|
|
dataNodesetSelector := ""
|
|
metaNodesetSelector := ""
|
|
dataNodeSelector := ""
|
|
metaNodeSelector := ""
|
|
cmd := &cobra.Command{
|
|
Use: CliOpUpdate + " [NAME]",
|
|
Short: cmdZoneUpdateShort,
|
|
Args: cobra.MinimumNArgs(1),
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
var err error
|
|
defer func() {
|
|
errout(err)
|
|
}()
|
|
zoneName := args[0]
|
|
if err = client.AdminAPI().UpdateZone(zoneName, enable, dataNodesetSelector, metaNodesetSelector, dataNodeSelector, metaNodeSelector); err != nil {
|
|
return
|
|
}
|
|
stdout(fmt.Sprintf("Zone %v has been update successfully!\n", zoneName))
|
|
},
|
|
}
|
|
cmd.Flags().BoolVar(&enable, "enable", true, "Enable of disable specify zone")
|
|
cmd.Flags().StringVar(&dataNodesetSelector, CliFlagDataNodesetSelector, "", "Set the nodeset select policy(datanode) for specify zone")
|
|
cmd.Flags().StringVar(&metaNodesetSelector, CliFlagMetaNodesetSelector, "", "Set the nodeset select policy(metanode) for specify zone")
|
|
cmd.Flags().StringVar(&dataNodeSelector, CliFlagDataNodeSelector, "", "Set the node select policy(datanode) for specify zone")
|
|
cmd.Flags().StringVar(&metaNodeSelector, CliFlagMetaNodeSelector, "", "Set the node select policy(metanode) for specify zone")
|
|
return cmd
|
|
}
|