github.com/vmware/govmomi@v0.51.0/cli/flags/storage_pod.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/object" 14 ) 15 16 type StoragePodFlag struct { 17 common 18 19 *DatacenterFlag 20 21 Name string 22 23 sp *object.StoragePod 24 } 25 26 var storagePodFlagKey = flagKey("storagePod") 27 28 func NewStoragePodFlag(ctx context.Context) (*StoragePodFlag, context.Context) { 29 if v := ctx.Value(storagePodFlagKey); v != nil { 30 return v.(*StoragePodFlag), ctx 31 } 32 33 v := &StoragePodFlag{} 34 v.DatacenterFlag, ctx = NewDatacenterFlag(ctx) 35 ctx = context.WithValue(ctx, storagePodFlagKey, v) 36 return v, ctx 37 } 38 39 func (f *StoragePodFlag) Register(ctx context.Context, fs *flag.FlagSet) { 40 f.RegisterOnce(func() { 41 f.DatacenterFlag.Register(ctx, fs) 42 43 env := "GOVC_DATASTORE_CLUSTER" 44 value := os.Getenv(env) 45 usage := fmt.Sprintf("Datastore cluster [%s]", env) 46 fs.StringVar(&f.Name, "datastore-cluster", value, usage) 47 }) 48 } 49 50 func (f *StoragePodFlag) Process(ctx context.Context) error { 51 return f.DatacenterFlag.Process(ctx) 52 } 53 54 func (f *StoragePodFlag) Isset() bool { 55 return f.Name != "" 56 } 57 58 func (f *StoragePodFlag) StoragePod() (*object.StoragePod, error) { 59 ctx := context.TODO() 60 if f.sp != nil { 61 return f.sp, nil 62 } 63 64 finder, err := f.Finder() 65 if err != nil { 66 return nil, err 67 } 68 69 if f.Isset() { 70 f.sp, err = finder.DatastoreCluster(ctx, f.Name) 71 if err != nil { 72 return nil, err 73 } 74 } else { 75 f.sp, err = finder.DefaultDatastoreCluster(ctx) 76 if err != nil { 77 return nil, err 78 } 79 } 80 81 return f.sp, nil 82 }