github.com/vmware/govmomi@v0.51.0/cli/vsan/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 vsan 6 7 import ( 8 "context" 9 "flag" 10 11 "github.com/vmware/govmomi/cli" 12 "github.com/vmware/govmomi/cli/flags" 13 "github.com/vmware/govmomi/vsan" 14 "github.com/vmware/govmomi/vsan/types" 15 ) 16 17 type change struct { 18 *flags.DatacenterFlag 19 20 unmap *bool 21 fs *bool 22 } 23 24 func init() { 25 cli.Register("vsan.change", &change{}) 26 } 27 28 func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { 29 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 30 cmd.DatacenterFlag.Register(ctx, f) 31 32 f.Var(flags.NewOptionalBool(&cmd.unmap), "unmap-enabled", "Enable Unmap") 33 f.Var(flags.NewOptionalBool(&cmd.fs), "file-service-enabled", "Enable FileService") 34 } 35 36 func (cmd *change) Usage() string { 37 return "CLUSTER" 38 } 39 40 func (cmd *change) Description() string { 41 return `Change vSAN configuration. 42 43 Examples: 44 govc vsan.change -unmap-enabled ClusterA # enable unmap 45 govc vsan.change -unmap-enabled=false ClusterA # disable unmap` 46 } 47 48 func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { 49 vc, err := cmd.Client() 50 if err != nil { 51 return err 52 } 53 54 finder, err := cmd.Finder() 55 if err != nil { 56 return err 57 } 58 59 cluster, err := finder.ClusterComputeResourceOrDefault(ctx, f.Arg(0)) 60 if err != nil { 61 return err 62 } 63 64 c, err := vsan.NewClient(ctx, vc) 65 if err != nil { 66 return err 67 } 68 69 c.RoundTripper = cmd.RoundTripper(c.Client) 70 71 var spec types.VimVsanReconfigSpec 72 73 if cmd.unmap == nil && cmd.fs == nil { 74 return flag.ErrHelp 75 } 76 if cmd.unmap != nil { 77 spec.UnmapConfig = &types.VsanUnmapConfig{Enable: *cmd.unmap} 78 } 79 if cmd.fs != nil { 80 spec.FileServiceConfig = &types.VsanFileServiceConfig{Enabled: *cmd.fs} 81 } 82 83 task, err := c.VsanClusterReconfig(ctx, cluster.Reference(), spec) 84 if err != nil { 85 return err 86 } 87 88 logger := cmd.ProgressLogger("Updating vSAN...") 89 defer logger.Wait() 90 91 _, err = task.WaitForResult(ctx, logger) 92 return err 93 }