github.com/vmware/govmomi@v0.51.0/cli/volume/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 volume 6 7 import ( 8 "context" 9 "errors" 10 "flag" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/cns" 15 "github.com/vmware/govmomi/cns/types" 16 ) 17 18 type rm struct { 19 *flags.ClientFlag 20 21 keep bool 22 } 23 24 func init() { 25 cli.Register("volume.rm", &rm{}) 26 } 27 28 func (cmd *rm) Register(ctx context.Context, f *flag.FlagSet) { 29 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 30 cmd.ClientFlag.Register(ctx, f) 31 32 f.BoolVar(&cmd.keep, "keep", false, "Keep backing disk") 33 } 34 35 func (cmd *rm) Usage() string { 36 return "ID" 37 } 38 39 func (cmd *rm) Description() string { 40 return `Remove CNS volume. 41 42 Note: if volume.rm returns not found errors, 43 consider using 'govc disk.ls -R' to reconcile the datastore inventory. 44 45 Examples: 46 govc volume.rm f75989dc-95b9-4db7-af96-8583f24bc59d` 47 } 48 49 func (cmd *rm) Run(ctx context.Context, f *flag.FlagSet) error { 50 // Despite the method signature, CnsDeleteVolume can only delete 1 at a time. 51 if f.NArg() != 1 { 52 return flag.ErrHelp 53 } 54 55 c, err := cmd.CnsClient() 56 if err != nil { 57 return err 58 } 59 60 ids := []types.CnsVolumeId{{Id: f.Arg(0)}} 61 62 task, err := c.DeleteVolume(ctx, ids, !cmd.keep) 63 if err != nil { 64 return err 65 } 66 67 info, err := cns.GetTaskInfo(ctx, task) 68 if err != nil { 69 return err 70 } 71 72 res, err := cns.GetTaskResult(ctx, info) 73 if err != nil { 74 return err 75 } 76 77 fault := res.GetCnsVolumeOperationResult().Fault 78 if fault != nil { 79 return errors.New(fault.LocalizedMessage) 80 } 81 82 return nil 83 }