github.com/vmware/govmomi@v0.51.0/cli/cluster/change.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 package cluster 6 7 import ( 8 "context" 9 "flag" 10 "strings" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/vim25/types" 15 ) 16 17 func DrsBehaviorUsage() string { 18 drsModes := types.DrsBehavior("").Strings() 19 return "DRS behavior for virtual machines: " + strings.Join(drsModes, ", ") 20 } 21 22 type change struct { 23 *flags.DatacenterFlag 24 25 types.ClusterConfigSpecEx 26 } 27 28 func init() { 29 cli.Register("cluster.change", &change{}) 30 } 31 32 func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { 33 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 34 cmd.DatacenterFlag.Register(ctx, f) 35 36 cmd.DrsConfig = new(types.ClusterDrsConfigInfo) 37 cmd.DasConfig = new(types.ClusterDasConfigInfo) 38 cmd.VsanConfig = new(types.VsanClusterConfigInfo) 39 cmd.VsanConfig.DefaultConfig = new(types.VsanClusterConfigInfoHostDefaultInfo) 40 41 // DRS 42 f.Var(flags.NewOptionalBool(&cmd.DrsConfig.Enabled), "drs-enabled", "Enable DRS") 43 44 f.StringVar((*string)(&cmd.DrsConfig.DefaultVmBehavior), "drs-mode", "", DrsBehaviorUsage()) 45 46 f.Var(flags.NewInt32(&cmd.DrsConfig.VmotionRate), "drs-vmotion-rate", "Aggressiveness of vMotions (1-5)") 47 48 // HA 49 f.Var(flags.NewOptionalBool(&cmd.DasConfig.Enabled), "ha-enabled", "Enable HA") 50 f.Var(flags.NewOptionalBool(&cmd.DasConfig.AdmissionControlEnabled), "ha-admission-control-enabled", "Enable HA admission control") 51 52 // vSAN 53 f.Var(flags.NewOptionalBool(&cmd.VsanConfig.Enabled), "vsan-enabled", "Enable vSAN") 54 f.Var(flags.NewOptionalBool(&cmd.VsanConfig.DefaultConfig.AutoClaimStorage), "vsan-autoclaim", "Autoclaim storage on cluster hosts") 55 } 56 57 func (cmd *change) Process(ctx context.Context) error { 58 if err := cmd.DatacenterFlag.Process(ctx); err != nil { 59 return err 60 } 61 return nil 62 } 63 64 func (cmd *change) Usage() string { 65 return "CLUSTER..." 66 } 67 68 func (cmd *change) Description() string { 69 return `Change configuration of the given clusters. 70 71 Examples: 72 govc cluster.change -drs-enabled -vsan-enabled -vsan-autoclaim ClusterA 73 govc cluster.change -drs-enabled=false ClusterB 74 govc cluster.change -drs-vmotion-rate=4 ClusterC` 75 } 76 77 func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { 78 if f.NArg() == 0 { 79 return flag.ErrHelp 80 } 81 82 finder, err := cmd.Finder() 83 if err != nil { 84 return err 85 } 86 87 for _, path := range f.Args() { 88 clusters, err := finder.ClusterComputeResourceList(ctx, path) 89 if err != nil { 90 return err 91 } 92 93 for _, cluster := range clusters { 94 task, err := cluster.Reconfigure(ctx, &cmd.ClusterConfigSpecEx, true) 95 if err != nil { 96 return err 97 } 98 99 _, err = task.WaitForResult(ctx, nil) 100 if err != nil { 101 return err 102 } 103 } 104 } 105 106 return nil 107 }