github.com/vmware/govmomi@v0.51.0/cli/namespace/flag.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 namespace
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  
    11  	"github.com/vmware/govmomi/cli/flags"
    12  	"github.com/vmware/govmomi/vapi/namespace"
    13  )
    14  
    15  type namespaceFlag struct {
    16  	*flags.StorageProfileFlag
    17  
    18  	library flags.StringList
    19  	vmclass flags.StringList
    20  	storage []string
    21  }
    22  
    23  func (ns *namespaceFlag) Register(ctx context.Context, f *flag.FlagSet) {
    24  	ns.StorageProfileFlag, ctx = flags.NewStorageProfileFlag(ctx, "storage")
    25  	ns.StorageProfileFlag.Register(ctx, f)
    26  
    27  	f.Var(&ns.library, "library", "Content library IDs to associate with the vSphere Namespace.")
    28  	f.Var(&ns.vmclass, "vmclass", "Virtual machine class IDs to associate with the vSphere Namespace.")
    29  }
    30  
    31  func (ns *namespaceFlag) Process(ctx context.Context) error {
    32  	if err := ns.StorageProfileFlag.Process(ctx); err != nil {
    33  		return err
    34  	}
    35  
    36  	rc, err := ns.RestClient()
    37  	if err != nil {
    38  		return err
    39  	}
    40  
    41  	for i, name := range ns.library {
    42  		l, err := flags.ContentLibrary(ctx, rc, name)
    43  		if err == nil {
    44  			ns.library[i] = l.ID
    45  		}
    46  	}
    47  
    48  	ns.storage, err = ns.StorageProfileList(ctx)
    49  
    50  	return err
    51  }
    52  
    53  func (ns *namespaceFlag) storageSpec() []namespace.StorageSpec {
    54  	s := make([]namespace.StorageSpec, len(ns.storage))
    55  	for i := range ns.storage {
    56  		s[i].Policy = ns.storage[i]
    57  	}
    58  	return s
    59  }
    60  
    61  func (ns *namespaceFlag) vmServiceSpec() namespace.VmServiceSpec {
    62  	return namespace.VmServiceSpec{
    63  		ContentLibraries: ns.library,
    64  		VmClasses:        ns.vmclass,
    65  	}
    66  }