github.com/vmware/govmomi@v0.51.0/cli/flags/env.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  
    11  	"github.com/vmware/govmomi/object"
    12  	"github.com/vmware/govmomi/vim25/mo"
    13  )
    14  
    15  type EnvBrowser struct {
    16  	*ClusterFlag
    17  	*HostSystemFlag
    18  	*VirtualMachineFlag
    19  }
    20  
    21  func (cmd *EnvBrowser) Register(ctx context.Context, f *flag.FlagSet) {
    22  	cmd.ClusterFlag, ctx = NewClusterFlag(ctx)
    23  	cmd.ClusterFlag.Register(ctx, f)
    24  
    25  	cmd.HostSystemFlag, ctx = NewHostSystemFlag(ctx)
    26  	cmd.HostSystemFlag.Register(ctx, f)
    27  
    28  	cmd.VirtualMachineFlag, ctx = NewVirtualMachineFlag(ctx)
    29  	cmd.VirtualMachineFlag.Register(ctx, f)
    30  }
    31  
    32  func (cmd *EnvBrowser) Process(ctx context.Context) error {
    33  	if err := cmd.ClusterFlag.Process(ctx); err != nil {
    34  		return err
    35  	}
    36  	if err := cmd.HostSystemFlag.Process(ctx); err != nil {
    37  		return err
    38  	}
    39  	return cmd.VirtualMachineFlag.Process(ctx)
    40  }
    41  
    42  func (cmd *EnvBrowser) Browser(ctx context.Context) (*object.EnvironmentBrowser, error) {
    43  	c, err := cmd.VirtualMachineFlag.Client()
    44  	if err != nil {
    45  		return nil, err
    46  	}
    47  
    48  	vm, err := cmd.VirtualMachine()
    49  	if err != nil {
    50  		return nil, err
    51  	}
    52  	if vm != nil {
    53  		return vm.EnvironmentBrowser(ctx)
    54  	}
    55  
    56  	host, err := cmd.HostSystemIfSpecified()
    57  	if err != nil {
    58  		return nil, err
    59  	}
    60  
    61  	if host != nil {
    62  		var h mo.HostSystem
    63  		err = host.Properties(ctx, host.Reference(), []string{"parent"}, &h)
    64  		if err != nil {
    65  			return nil, err
    66  		}
    67  
    68  		return object.NewComputeResource(c, *h.Parent).EnvironmentBrowser(ctx)
    69  	}
    70  
    71  	finder, ferr := cmd.ClusterFlag.Finder()
    72  	if ferr != nil {
    73  		return nil, ferr
    74  	}
    75  
    76  	cr, ferr := finder.ComputeResourceOrDefault(ctx, cmd.ClusterFlag.Name)
    77  	if ferr != nil {
    78  		return nil, ferr
    79  	}
    80  
    81  	return cr.EnvironmentBrowser(ctx)
    82  }