github.com/vmware/govmomi@v0.51.0/cli/cluster/rule/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 rule
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  
    11  	"github.com/vmware/govmomi/cli"
    12  	"github.com/vmware/govmomi/vim25/types"
    13  )
    14  
    15  type change struct {
    16  	*SpecFlag
    17  	*InfoFlag
    18  }
    19  
    20  func init() {
    21  	cli.Register("cluster.rule.change", &change{})
    22  }
    23  
    24  func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) {
    25  	cmd.SpecFlag = new(SpecFlag)
    26  	cmd.SpecFlag.Register(ctx, f)
    27  
    28  	cmd.InfoFlag, ctx = NewInfoFlag(ctx)
    29  	cmd.InfoFlag.Register(ctx, f)
    30  }
    31  
    32  func (cmd *change) Process(ctx context.Context) error {
    33  	if cmd.name == "" {
    34  		return flag.ErrHelp
    35  	}
    36  	return cmd.InfoFlag.Process(ctx)
    37  }
    38  
    39  func (cmd *change) Usage() string {
    40  	return `NAME...`
    41  }
    42  
    43  func (cmd *change) Description() string {
    44  	return `Change cluster rule.
    45  
    46  Examples:
    47    govc cluster.rule.change -cluster my_cluster -name my_rule -enable=false`
    48  }
    49  
    50  func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error {
    51  	update := types.ArrayUpdateSpec{Operation: types.ArrayUpdateOperationEdit}
    52  	rule, err := cmd.Rule(ctx)
    53  	if err != nil {
    54  		return err
    55  	}
    56  
    57  	var vms *[]types.ManagedObjectReference
    58  
    59  	switch r := rule.info.(type) {
    60  	case *types.ClusterAffinityRuleSpec:
    61  		vms = &r.Vm
    62  	case *types.ClusterAntiAffinityRuleSpec:
    63  		vms = &r.Vm
    64  	}
    65  
    66  	if vms != nil && f.NArg() != 0 {
    67  		refs, err := cmd.ObjectList(ctx, rule.kind, f.Args())
    68  		if err != nil {
    69  			return err
    70  		}
    71  
    72  		*vms = refs
    73  	}
    74  
    75  	info := rule.info.GetClusterRuleInfo()
    76  	info.Name = cmd.name
    77  	info.Enabled = cmd.Enabled
    78  	info.Mandatory = cmd.Mandatory
    79  
    80  	return cmd.Apply(ctx, update, rule.info)
    81  }