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  }