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 }