github.com/vmware/govmomi@v0.51.0/cli/datastore/mkdir.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 "errors" 10 "flag" 11 "fmt" 12 13 "github.com/vmware/govmomi/cli" 14 "github.com/vmware/govmomi/cli/flags" 15 "github.com/vmware/govmomi/fault" 16 "github.com/vmware/govmomi/object" 17 "github.com/vmware/govmomi/vim25/types" 18 ) 19 20 type mkdir struct { 21 *flags.DatastoreFlag 22 23 createParents bool 24 isNamespace bool 25 } 26 27 func init() { 28 cli.Register("datastore.mkdir", &mkdir{}) 29 } 30 31 func (cmd *mkdir) Register(ctx context.Context, f *flag.FlagSet) { 32 cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx) 33 cmd.DatastoreFlag.Register(ctx, f) 34 35 f.BoolVar(&cmd.createParents, "p", false, "Create intermediate directories as needed") 36 f.BoolVar(&cmd.isNamespace, "namespace", false, "Return uuid of namespace created on vsan datastore") 37 } 38 39 func (cmd *mkdir) 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 *mkdir) Usage() string { 47 return "DIRECTORY" 48 } 49 50 func (cmd *mkdir) Run(ctx context.Context, f *flag.FlagSet) error { 51 args := f.Args() 52 if len(args) == 0 { 53 return errors.New("missing operand") 54 } 55 56 c, err := cmd.Client() 57 if err != nil { 58 return err 59 } 60 61 if cmd.isNamespace { 62 var uuid string 63 var ds *object.Datastore 64 65 if ds, err = cmd.Datastore(); err != nil { 66 return err 67 } 68 69 path := args[0] 70 71 nm := object.NewDatastoreNamespaceManager(c) 72 if uuid, err = nm.CreateDirectory(ctx, ds, path, ""); err != nil { 73 return err 74 } 75 76 fmt.Println(uuid) 77 } else { 78 var dc *object.Datacenter 79 var path string 80 81 dc, err = cmd.Datacenter() 82 if err != nil { 83 return err 84 } 85 86 path, err = cmd.DatastorePath(args[0]) 87 if err != nil { 88 return err 89 } 90 91 m := object.NewFileManager(c) 92 err = m.MakeDirectory(ctx, path, dc, cmd.createParents) 93 94 // ignore EEXIST if -p flag is given 95 if err != nil && cmd.createParents { 96 if fault.Is(err, &types.FileAlreadyExists{}) { 97 return nil 98 } 99 } 100 } 101 102 return err 103 }