github.com/vmware/govmomi@v0.51.0/cli/datastore/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/object" 15 "github.com/vmware/govmomi/vim25/types" 16 ) 17 18 func DrsBehaviorUsage() string { 19 drsModes := types.StorageDrsPodConfigInfoBehavior("").Strings() 20 21 return "Storage DRS behavior: " + strings.Join(drsModes, ", ") 22 } 23 24 type change struct { 25 *flags.DatacenterFlag 26 27 types.StorageDrsConfigSpec 28 } 29 30 func init() { 31 cli.Register("datastore.cluster.change", &change{}) 32 } 33 34 func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { 35 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 36 cmd.DatacenterFlag.Register(ctx, f) 37 38 cmd.PodConfigSpec = new(types.StorageDrsPodConfigSpec) 39 40 f.Var(flags.NewOptionalBool(&cmd.PodConfigSpec.Enabled), "drs-enabled", "Enable Storage DRS") 41 42 f.StringVar((*string)(&cmd.PodConfigSpec.DefaultVmBehavior), "drs-mode", "", DrsBehaviorUsage()) 43 } 44 45 func (cmd *change) Usage() string { 46 return "CLUSTER..." 47 } 48 49 func (cmd *change) Description() string { 50 return `Change configuration of the given datastore clusters. 51 52 Examples: 53 govc datastore.cluster.change -drs-enabled ClusterA 54 govc datastore.cluster.change -drs-enabled=false ClusterB` 55 } 56 57 func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { 58 client, err := cmd.Client() 59 if err != nil { 60 return err 61 } 62 finder, err := cmd.Finder() 63 if err != nil { 64 return err 65 } 66 67 m := object.NewStorageResourceManager(client) 68 69 for _, path := range f.Args() { 70 clusters, err := finder.DatastoreClusterList(ctx, path) 71 if err != nil { 72 return err 73 } 74 75 for _, cluster := range clusters { 76 task, err := m.ConfigureStorageDrsForPod(ctx, cluster, cmd.StorageDrsConfigSpec, true) 77 if err != nil { 78 return err 79 } 80 81 _, err = task.WaitForResult(ctx, nil) 82 if err != nil { 83 return err 84 } 85 } 86 } 87 88 return nil 89 }