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  }