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 }