github.com/vmware/govmomi@v0.51.0/cli/device/usb/add.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 usb 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "strings" 12 13 "github.com/vmware/govmomi/cli" 14 "github.com/vmware/govmomi/cli/flags" 15 "github.com/vmware/govmomi/vim25/types" 16 ) 17 18 type add struct { 19 *flags.VirtualMachineFlag 20 21 controller string 22 autoConnect bool 23 ehciEnabled bool 24 } 25 26 func init() { 27 cli.Register("device.usb.add", &add{}) 28 } 29 30 func (cmd *add) Register(ctx context.Context, f *flag.FlagSet) { 31 cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 32 cmd.VirtualMachineFlag.Register(ctx, f) 33 34 ctypes := []string{"usb", "xhci"} 35 f.StringVar(&cmd.controller, "type", ctypes[0], 36 fmt.Sprintf("USB controller type (%s)", strings.Join(ctypes, "|"))) 37 38 f.BoolVar(&cmd.autoConnect, "auto", true, "Enable ability to hot plug devices") 39 f.BoolVar(&cmd.ehciEnabled, "ehci", true, "Enable enhanced host controller interface (USB 2.0)") 40 } 41 42 func (cmd *add) Description() string { 43 return `Add USB device to VM. 44 45 Examples: 46 govc device.usb.add -vm $vm 47 govc device.usb.add -type xhci -vm $vm 48 govc device.info usb*` 49 } 50 51 func (cmd *add) Process(ctx context.Context) error { 52 if err := cmd.VirtualMachineFlag.Process(ctx); err != nil { 53 return err 54 } 55 return nil 56 } 57 58 func (cmd *add) Run(ctx context.Context, f *flag.FlagSet) error { 59 vm, err := cmd.VirtualMachine() 60 if err != nil { 61 return err 62 } 63 64 if vm == nil { 65 return flag.ErrHelp 66 } 67 68 var d types.BaseVirtualDevice 69 70 switch cmd.controller { 71 case "usb": 72 c := new(types.VirtualUSBController) 73 c.AutoConnectDevices = &cmd.autoConnect 74 c.EhciEnabled = &cmd.ehciEnabled 75 d = c 76 case "xhci": 77 c := new(types.VirtualUSBXHCIController) 78 c.AutoConnectDevices = &cmd.autoConnect 79 d = c 80 default: 81 return flag.ErrHelp 82 } 83 84 err = vm.AddDevice(ctx, d) 85 if err != nil { 86 return err 87 } 88 89 // output name of device we just created 90 devices, err := vm.Device(ctx) 91 if err != nil { 92 return err 93 } 94 95 devices = devices.SelectByType(d) 96 97 name := devices.Name(devices[len(devices)-1]) 98 99 fmt.Println(name) 100 101 return nil 102 }