github.com/vmware/govmomi@v0.51.0/cli/flags/resource_pool.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 flags 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "os" 12 13 "github.com/vmware/govmomi/find" 14 "github.com/vmware/govmomi/object" 15 ) 16 17 type ResourcePoolFlag struct { 18 common 19 20 *DatacenterFlag 21 22 name string 23 pool *object.ResourcePool 24 } 25 26 var resourcePoolFlagKey = flagKey("resourcePool") 27 28 func NewResourcePoolFlag(ctx context.Context) (*ResourcePoolFlag, context.Context) { 29 if v := ctx.Value(resourcePoolFlagKey); v != nil { 30 return v.(*ResourcePoolFlag), ctx 31 } 32 33 v := &ResourcePoolFlag{} 34 v.DatacenterFlag, ctx = NewDatacenterFlag(ctx) 35 ctx = context.WithValue(ctx, resourcePoolFlagKey, v) 36 return v, ctx 37 } 38 39 func (flag *ResourcePoolFlag) Register(ctx context.Context, f *flag.FlagSet) { 40 flag.RegisterOnce(func() { 41 flag.DatacenterFlag.Register(ctx, f) 42 43 env := "GOVC_RESOURCE_POOL" 44 value := os.Getenv(env) 45 usage := fmt.Sprintf("Resource pool [%s]", env) 46 f.StringVar(&flag.name, "pool", value, usage) 47 }) 48 } 49 50 func (flag *ResourcePoolFlag) Process(ctx context.Context) error { 51 return flag.ProcessOnce(func() error { 52 if err := flag.DatacenterFlag.Process(ctx); err != nil { 53 return err 54 } 55 return nil 56 }) 57 } 58 59 func (flag *ResourcePoolFlag) IsSet() bool { 60 return flag.name != "" 61 } 62 63 func (flag *ResourcePoolFlag) ResourcePool() (*object.ResourcePool, error) { 64 if flag.pool != nil { 65 return flag.pool, nil 66 } 67 68 finder, err := flag.Finder() 69 if err != nil { 70 return nil, err 71 } 72 73 flag.pool, err = finder.ResourcePoolOrDefault(context.TODO(), flag.name) 74 if err != nil { 75 if _, ok := err.(*find.NotFoundError); ok { 76 vapp, verr := finder.VirtualApp(context.TODO(), flag.name) 77 if verr != nil { 78 return nil, err 79 } 80 flag.pool = vapp.ResourcePool 81 } else { 82 return nil, err 83 } 84 } 85 86 return flag.pool, nil 87 } 88 89 func (flag *ResourcePoolFlag) ResourcePoolIfSpecified() (*object.ResourcePool, error) { 90 if flag.name == "" { 91 return nil, nil 92 } 93 return flag.ResourcePool() 94 }