github.com/vmware/govmomi@v0.43.0/govc/vm/guest/guest.go (about) 1 /* 2 Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package guest 18 19 import ( 20 "context" 21 "errors" 22 "flag" 23 "net/url" 24 25 "github.com/vmware/govmomi/govc/flags" 26 "github.com/vmware/govmomi/guest" 27 "github.com/vmware/govmomi/guest/toolbox" 28 "github.com/vmware/govmomi/object" 29 ) 30 31 type GuestFlag struct { 32 *flags.ClientFlag 33 *flags.VirtualMachineFlag 34 35 *AuthFlag 36 } 37 38 func newGuestFlag(ctx context.Context) (*GuestFlag, context.Context) { 39 f := &GuestFlag{} 40 f.ClientFlag, ctx = flags.NewClientFlag(ctx) 41 f.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 42 f.AuthFlag, ctx = newAuthFlag(ctx) 43 return f, ctx 44 } 45 46 func newGuestProcessFlag(ctx context.Context) (*GuestFlag, context.Context) { 47 f, gctx := newGuestFlag(ctx) 48 f.proc = true 49 return f, gctx 50 } 51 52 func (flag *GuestFlag) Register(ctx context.Context, f *flag.FlagSet) { 53 flag.ClientFlag.Register(ctx, f) 54 flag.VirtualMachineFlag.Register(ctx, f) 55 flag.AuthFlag.Register(ctx, f) 56 } 57 58 func (flag *GuestFlag) Process(ctx context.Context) error { 59 if err := flag.ClientFlag.Process(ctx); err != nil { 60 return err 61 } 62 if err := flag.VirtualMachineFlag.Process(ctx); err != nil { 63 return err 64 } 65 if err := flag.AuthFlag.Process(ctx); err != nil { 66 return err 67 } 68 return nil 69 } 70 71 func (flag *GuestFlag) Toolbox(ctx context.Context) (*toolbox.Client, error) { 72 vm, err := flag.VirtualMachine() 73 if err != nil { 74 return nil, err 75 } 76 77 c, err := flag.Client() 78 if err != nil { 79 return nil, err 80 } 81 82 return toolbox.NewClient(ctx, c, vm, flag.Auth()) 83 } 84 85 func (flag *GuestFlag) FileManager() (*guest.FileManager, error) { 86 ctx := context.TODO() 87 c, err := flag.Client() 88 if err != nil { 89 return nil, err 90 } 91 92 vm, err := flag.VirtualMachine() 93 if err != nil { 94 return nil, err 95 } 96 97 o := guest.NewOperationsManager(c, vm.Reference()) 98 return o.FileManager(ctx) 99 } 100 101 func (flag *GuestFlag) ProcessManager() (*guest.ProcessManager, error) { 102 ctx := context.TODO() 103 c, err := flag.Client() 104 if err != nil { 105 return nil, err 106 } 107 108 vm, err := flag.VirtualMachine() 109 if err != nil { 110 return nil, err 111 } 112 113 o := guest.NewOperationsManager(c, vm.Reference()) 114 return o.ProcessManager(ctx) 115 } 116 117 func (flag *GuestFlag) ParseURL(urlStr string) (*url.URL, error) { 118 c, err := flag.Client() 119 if err != nil { 120 return nil, err 121 } 122 123 return c.Client.ParseURL(urlStr) 124 } 125 126 func (flag *GuestFlag) VirtualMachine() (*object.VirtualMachine, error) { 127 vm, err := flag.VirtualMachineFlag.VirtualMachine() 128 if err != nil { 129 return nil, err 130 } 131 if vm == nil { 132 return nil, errors.New("no vm specified") 133 } 134 return vm, nil 135 }