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  }