github.com/vmware/govmomi@v0.51.0/cli/device/serial/connect.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 serial 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "path" 12 13 "github.com/vmware/govmomi/cli" 14 "github.com/vmware/govmomi/cli/flags" 15 "github.com/vmware/govmomi/vim25/mo" 16 ) 17 18 type connect struct { 19 *flags.VirtualMachineFlag 20 21 proxy string 22 device string 23 client bool 24 } 25 26 func init() { 27 cli.Register("device.serial.connect", &connect{}) 28 } 29 30 func (cmd *connect) Register(ctx context.Context, f *flag.FlagSet) { 31 cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 32 cmd.VirtualMachineFlag.Register(ctx, f) 33 34 f.StringVar(&cmd.proxy, "vspc-proxy", "", "vSPC proxy URI") 35 f.StringVar(&cmd.device, "device", "", "serial port device name") 36 f.BoolVar(&cmd.client, "client", false, "Use client direction") 37 } 38 39 func (cmd *connect) Usage() string { 40 return "URI" 41 } 42 43 func (cmd *connect) Description() string { 44 return `Connect service URI to serial port. 45 46 If "-" is given as URI, connects file backed device with file name of 47 device name + .log suffix in the VM Config.Files.LogDirectory. 48 49 Defaults to the first serial port if no DEVICE is given. 50 51 Examples: 52 govc device.ls | grep serialport- 53 govc device.serial.connect -vm $vm -device serialport-8000 telnet://:33233 54 govc device.info -vm $vm serialport-* 55 govc device.serial.connect -vm $vm "[datastore1] $vm/console.log" 56 govc device.serial.connect -vm $vm - 57 govc datastore.tail -f $vm/serialport-8000.log` 58 } 59 60 func (cmd *connect) Process(ctx context.Context) error { 61 if err := cmd.VirtualMachineFlag.Process(ctx); err != nil { 62 return err 63 } 64 return nil 65 } 66 67 func (cmd *connect) Run(ctx context.Context, f *flag.FlagSet) error { 68 if f.NArg() != 1 { 69 return flag.ErrHelp 70 } 71 72 vm, err := cmd.VirtualMachine() 73 if err != nil { 74 return err 75 } 76 77 if vm == nil { 78 return flag.ErrHelp 79 } 80 81 devices, err := vm.Device(ctx) 82 if err != nil { 83 return err 84 } 85 86 d, err := devices.FindSerialPort(cmd.device) 87 if err != nil { 88 return err 89 } 90 91 uri := f.Arg(0) 92 93 if uri == "-" { 94 var mvm mo.VirtualMachine 95 err = vm.Properties(ctx, vm.Reference(), []string{"config.files.logDirectory"}, &mvm) 96 if err != nil { 97 return err 98 } 99 100 uri = path.Join(mvm.Config.Files.LogDirectory, fmt.Sprintf("%s.log", devices.Name(d))) 101 } 102 103 return vm.EditDevice(ctx, devices.ConnectSerialPort(d, uri, cmd.client, cmd.proxy)) 104 }