github.com/vmware/govmomi@v0.51.0/cli/vm/guest/guest.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 guest 6 7 import ( 8 "context" 9 "errors" 10 "flag" 11 "net/url" 12 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/guest" 15 "github.com/vmware/govmomi/guest/toolbox" 16 "github.com/vmware/govmomi/object" 17 ) 18 19 type GuestFlag struct { 20 *flags.ClientFlag 21 *flags.VirtualMachineFlag 22 23 *AuthFlag 24 } 25 26 func newGuestFlag(ctx context.Context) (*GuestFlag, context.Context) { 27 f := &GuestFlag{} 28 f.ClientFlag, ctx = flags.NewClientFlag(ctx) 29 f.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 30 f.AuthFlag, ctx = newAuthFlag(ctx) 31 return f, ctx 32 } 33 34 func newGuestProcessFlag(ctx context.Context) (*GuestFlag, context.Context) { 35 f, gctx := newGuestFlag(ctx) 36 f.proc = true 37 return f, gctx 38 } 39 40 func (flag *GuestFlag) Register(ctx context.Context, f *flag.FlagSet) { 41 flag.ClientFlag.Register(ctx, f) 42 flag.VirtualMachineFlag.Register(ctx, f) 43 flag.AuthFlag.Register(ctx, f) 44 } 45 46 func (flag *GuestFlag) Process(ctx context.Context) error { 47 if err := flag.ClientFlag.Process(ctx); err != nil { 48 return err 49 } 50 if err := flag.VirtualMachineFlag.Process(ctx); err != nil { 51 return err 52 } 53 if err := flag.AuthFlag.Process(ctx); err != nil { 54 return err 55 } 56 return nil 57 } 58 59 func (flag *GuestFlag) Toolbox(ctx context.Context) (*toolbox.Client, error) { 60 vm, err := flag.VirtualMachine() 61 if err != nil { 62 return nil, err 63 } 64 65 c, err := flag.Client() 66 if err != nil { 67 return nil, err 68 } 69 70 return toolbox.NewClient(ctx, c, vm, flag.Auth()) 71 } 72 73 func (flag *GuestFlag) FileManager() (*guest.FileManager, error) { 74 ctx := context.TODO() 75 c, err := flag.Client() 76 if err != nil { 77 return nil, err 78 } 79 80 vm, err := flag.VirtualMachine() 81 if err != nil { 82 return nil, err 83 } 84 85 o := guest.NewOperationsManager(c, vm.Reference()) 86 return o.FileManager(ctx) 87 } 88 89 func (flag *GuestFlag) ProcessManager() (*guest.ProcessManager, error) { 90 ctx := context.TODO() 91 c, err := flag.Client() 92 if err != nil { 93 return nil, err 94 } 95 96 vm, err := flag.VirtualMachine() 97 if err != nil { 98 return nil, err 99 } 100 101 o := guest.NewOperationsManager(c, vm.Reference()) 102 return o.ProcessManager(ctx) 103 } 104 105 func (flag *GuestFlag) ParseURL(urlStr string) (*url.URL, error) { 106 c, err := flag.Client() 107 if err != nil { 108 return nil, err 109 } 110 111 return c.Client.ParseURL(urlStr) 112 } 113 114 func (flag *GuestFlag) VirtualMachine() (*object.VirtualMachine, error) { 115 vm, err := flag.VirtualMachineFlag.VirtualMachine() 116 if err != nil { 117 return nil, err 118 } 119 if vm == nil { 120 return nil, errors.New("no vm specified") 121 } 122 return vm, nil 123 }