github.com/vmware/govmomi@v0.51.0/cli/datastore/vsan/rm.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 vsan
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  	"fmt"
    11  	"os"
    12  
    13  	"github.com/vmware/govmomi/cli"
    14  	"github.com/vmware/govmomi/cli/flags"
    15  )
    16  
    17  type rm struct {
    18  	*flags.DatastoreFlag
    19  
    20  	force   bool
    21  	verbose bool
    22  }
    23  
    24  func init() {
    25  	cli.Register("datastore.vsan.dom.rm", &rm{})
    26  }
    27  
    28  func (cmd *rm) Register(ctx context.Context, f *flag.FlagSet) {
    29  	cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx)
    30  	cmd.DatastoreFlag.Register(ctx, f)
    31  
    32  	f.BoolVar(&cmd.force, "f", false, "Force delete")
    33  	f.BoolVar(&cmd.verbose, "v", false, "Print deleted UUIDs to stdout, failed to stderr")
    34  }
    35  
    36  func (cmd *rm) Process(ctx context.Context) error {
    37  	if err := cmd.DatastoreFlag.Process(ctx); err != nil {
    38  		return err
    39  	}
    40  	return nil
    41  }
    42  
    43  func (cmd *rm) Usage() string {
    44  	return "UUID..."
    45  }
    46  
    47  func (cmd *rm) Description() string {
    48  	return `Remove vSAN DOM objects in DS.
    49  
    50  Examples:
    51    govc datastore.vsan.dom.rm d85aa758-63f5-500a-3150-0200308e589c
    52    govc datastore.vsan.dom.rm -f d85aa758-63f5-500a-3150-0200308e589c
    53    govc datastore.vsan.dom.ls -o | xargs govc datastore.vsan.dom.rm`
    54  }
    55  
    56  func (cmd *rm) Run(ctx context.Context, f *flag.FlagSet) error {
    57  	if f.NArg() == 0 {
    58  		return flag.ErrHelp
    59  	}
    60  
    61  	ds, err := cmd.Datastore()
    62  	if err != nil {
    63  		return err
    64  	}
    65  
    66  	hosts, err := ds.AttachedHosts(ctx)
    67  	if err != nil {
    68  		return err
    69  	}
    70  
    71  	if len(hosts) == 0 {
    72  		return flag.ErrHelp
    73  	}
    74  
    75  	m, err := hosts[0].ConfigManager().VsanInternalSystem(ctx)
    76  	if err != nil {
    77  		return err
    78  	}
    79  
    80  	res, err := m.DeleteVsanObjects(ctx, f.Args(), &cmd.force)
    81  	if err != nil {
    82  		return err
    83  	}
    84  
    85  	if cmd.verbose {
    86  		for _, r := range res {
    87  			if r.Success {
    88  				fmt.Fprintln(cmd.Out, r.Uuid)
    89  			} else {
    90  				fmt.Fprintf(os.Stderr, "%s %s\n", r.Uuid, r.FailureReason[0].Message)
    91  			}
    92  		}
    93  	}
    94  
    95  	return nil
    96  }