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  }