github.com/vmware/govmomi@v0.51.0/cli/datastore/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 datastore 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/object" 14 "github.com/vmware/govmomi/vim25/types" 15 ) 16 17 type rm struct { 18 *flags.DatastoreFlag 19 20 kind bool 21 force bool 22 isNamespace bool 23 } 24 25 func init() { 26 cli.Register("datastore.rm", &rm{}) 27 cli.Alias("datastore.rm", "datastore.delete") 28 } 29 30 func (cmd *rm) Register(ctx context.Context, f *flag.FlagSet) { 31 cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx) 32 cmd.DatastoreFlag.Register(ctx, f) 33 34 f.BoolVar(&cmd.kind, "t", true, "Use file type to choose disk or file manager") 35 f.BoolVar(&cmd.force, "f", false, "Force; ignore nonexistent files and arguments") 36 f.BoolVar(&cmd.isNamespace, "namespace", false, "Path is uuid of namespace on vsan datastore") 37 } 38 39 func (cmd *rm) Process(ctx context.Context) error { 40 if err := cmd.DatastoreFlag.Process(ctx); err != nil { 41 return err 42 } 43 return nil 44 } 45 46 func (cmd *rm) Usage() string { 47 return "FILE" 48 } 49 50 func (cmd *rm) Description() string { 51 return `Remove FILE from DATASTORE. 52 53 Examples: 54 govc datastore.rm vm/vmware.log 55 govc datastore.rm vm 56 govc datastore.rm -f images/base.vmdk` 57 } 58 59 func (cmd *rm) Run(ctx context.Context, f *flag.FlagSet) error { 60 args := f.Args() 61 if len(args) == 0 { 62 return flag.ErrHelp 63 } 64 65 c, err := cmd.Client() 66 if err != nil { 67 return err 68 } 69 70 var dc *object.Datacenter 71 dc, err = cmd.Datacenter() 72 if err != nil { 73 return err 74 } 75 76 ds, err := cmd.Datastore() 77 if err != nil { 78 return err 79 } 80 81 if cmd.isNamespace { 82 path := args[0] 83 84 nm := object.NewDatastoreNamespaceManager(c) 85 err = nm.DeleteDirectory(ctx, dc, path) 86 } else { 87 fm := ds.NewFileManager(dc, cmd.force) 88 89 remove := fm.DeleteFile // File delete 90 if cmd.kind { 91 remove = fm.Delete // VirtualDisk or File delete 92 } 93 94 err = remove(ctx, args[0]) 95 } 96 97 if err != nil { 98 if types.IsFileNotFound(err) && cmd.force { 99 // Ignore error 100 return nil 101 } 102 } 103 104 return err 105 }