github.com/vmware/govmomi@v0.51.0/cli/cluster/override/remove.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 override 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/vim25/types" 14 ) 15 16 type remove struct { 17 *flags.ClusterFlag 18 *flags.VirtualMachineFlag 19 } 20 21 func init() { 22 cli.Register("cluster.override.remove", &remove{}) 23 } 24 25 func (cmd *remove) Register(ctx context.Context, f *flag.FlagSet) { 26 cmd.ClusterFlag, ctx = flags.NewClusterFlag(ctx) 27 cmd.ClusterFlag.Register(ctx, f) 28 cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 29 cmd.VirtualMachineFlag.Register(ctx, f) 30 } 31 32 func (cmd *remove) Description() string { 33 return `Remove cluster VM overrides. 34 35 Examples: 36 govc cluster.override.remove -cluster cluster_1 -vm vm_1` 37 } 38 39 func (cmd *remove) Process(ctx context.Context) error { 40 if err := cmd.ClusterFlag.Process(ctx); err != nil { 41 return err 42 } 43 return cmd.VirtualMachineFlag.Process(ctx) 44 } 45 46 func (cmd *remove) Run(ctx context.Context, f *flag.FlagSet) error { 47 vm, err := cmd.VirtualMachine() 48 if err != nil { 49 return err 50 } 51 52 if vm == nil { 53 return flag.ErrHelp 54 } 55 56 cluster, err := cmd.Cluster() 57 if err != nil { 58 return err 59 } 60 61 config, err := cluster.Configuration(ctx) 62 if err != nil { 63 return err 64 } 65 66 spec := &types.ClusterConfigSpecEx{} 67 ref := vm.Reference() 68 69 for _, c := range config.DrsVmConfig { 70 if c.Key == ref { 71 spec.DrsVmConfigSpec = []types.ClusterDrsVmConfigSpec{ 72 { 73 ArrayUpdateSpec: types.ArrayUpdateSpec{ 74 Operation: types.ArrayUpdateOperationRemove, 75 RemoveKey: ref, 76 }, 77 }, 78 } 79 break 80 } 81 } 82 83 for _, c := range config.DasVmConfig { 84 if c.Key == ref { 85 spec.DasVmConfigSpec = []types.ClusterDasVmConfigSpec{ 86 { 87 ArrayUpdateSpec: types.ArrayUpdateSpec{ 88 Operation: types.ArrayUpdateOperationRemove, 89 RemoveKey: ref, 90 }, 91 }, 92 } 93 break 94 } 95 } 96 97 for _, c := range config.VmOrchestration { 98 if c.Vm == ref { 99 spec.VmOrchestrationSpec = []types.ClusterVmOrchestrationSpec{ 100 { 101 ArrayUpdateSpec: types.ArrayUpdateSpec{ 102 Operation: types.ArrayUpdateOperationRemove, 103 RemoveKey: ref, 104 }, 105 }, 106 } 107 break 108 } 109 } 110 111 return cmd.Reconfigure(ctx, spec) 112 }