github.com/vmware/govmomi@v0.51.0/cli/pool/create.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 pool 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "path" 12 13 "github.com/vmware/govmomi/cli" 14 "github.com/vmware/govmomi/cli/flags" 15 "github.com/vmware/govmomi/find" 16 ) 17 18 type create struct { 19 *flags.DatacenterFlag 20 *ResourceConfigSpecFlag 21 } 22 23 func init() { 24 cli.Register("pool.create", &create{}) 25 } 26 27 func (cmd *create) Register(ctx context.Context, f *flag.FlagSet) { 28 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 29 cmd.DatacenterFlag.Register(ctx, f) 30 31 cmd.ResourceConfigSpecFlag = NewResourceConfigSpecFlag() 32 cmd.ResourceConfigSpecFlag.Register(ctx, f) 33 } 34 35 func (cmd *create) Process(ctx context.Context) error { 36 if err := cmd.DatacenterFlag.Process(ctx); err != nil { 37 return err 38 } 39 if err := cmd.ResourceConfigSpecFlag.Process(ctx); err != nil { 40 return err 41 } 42 return nil 43 } 44 45 func (cmd *create) Usage() string { 46 return "POOL..." 47 } 48 49 func (cmd *create) Description() string { 50 return "Create one or more resource POOLs.\n" + poolCreateHelp 51 } 52 53 func (cmd *create) Run(ctx context.Context, f *flag.FlagSet) error { 54 if f.NArg() == 0 { 55 return flag.ErrHelp 56 } 57 58 finder, err := cmd.Finder() 59 if err != nil { 60 return err 61 } 62 63 for _, arg := range f.Args() { 64 dir := path.Dir(arg) 65 base := path.Base(arg) 66 parents, err := finder.ResourcePoolList(ctx, dir) 67 if err != nil { 68 if _, ok := err.(*find.NotFoundError); ok { 69 return fmt.Errorf("cannot create resource pool '%s': parent not found", base) 70 } 71 return err 72 } 73 74 for _, parent := range parents { 75 _, err = parent.Create(ctx, base, cmd.ResourceConfigSpec) 76 if err != nil { 77 return err 78 } 79 } 80 } 81 82 return nil 83 }