github.com/vmware/govmomi@v0.51.0/cli/vm/network/change.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 network 6 7 import ( 8 "context" 9 "errors" 10 "flag" 11 "fmt" 12 13 "github.com/vmware/govmomi/cli" 14 "github.com/vmware/govmomi/cli/flags" 15 ) 16 17 type change struct { 18 *flags.VirtualMachineFlag 19 *flags.NetworkFlag 20 } 21 22 func init() { 23 cli.Register("vm.network.change", &change{}) 24 } 25 26 func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { 27 cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 28 cmd.VirtualMachineFlag.Register(ctx, f) 29 cmd.NetworkFlag, ctx = flags.NewNetworkFlag(ctx) 30 cmd.NetworkFlag.Register(ctx, f) 31 } 32 33 func (cmd *change) Process(ctx context.Context) error { 34 if err := cmd.VirtualMachineFlag.Process(ctx); err != nil { 35 return err 36 } 37 if err := cmd.NetworkFlag.Process(ctx); err != nil { 38 return err 39 } 40 return nil 41 } 42 43 func (cmd *change) Usage() string { 44 return "DEVICE" 45 } 46 47 func (cmd *change) Description() string { 48 return `Change network DEVICE configuration. 49 50 Note that '-net' is currently required with '-net.address', even when not changing the VM network. 51 52 Examples: 53 govc vm.network.change -vm $vm -net PG2 ethernet-0 54 govc vm.network.change -vm $vm -net PG2 -net.address 00:00:0f:2e:5d:69 ethernet-0 # set to manual MAC address 55 govc vm.network.change -vm $vm -net PG2 -net.address - ethernet-0 # set to generated MAC address 56 govc device.info -vm $vm ethernet-*` 57 } 58 59 func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { 60 vm, err := cmd.VirtualMachineFlag.VirtualMachine() 61 if err != nil { 62 return err 63 } 64 65 if vm == nil { 66 return errors.New("please specify a vm") 67 } 68 69 name := f.Arg(0) 70 71 if name == "" { 72 return errors.New("please specify a device name") 73 } 74 75 // Set network if specified as extra argument. 76 if f.NArg() > 1 { 77 err = cmd.NetworkFlag.Set(f.Arg(1)) 78 if err != nil { 79 return fmt.Errorf("couldn't set specified network %v", 80 err) 81 } 82 } 83 84 devices, err := vm.Device(ctx) 85 if err != nil { 86 return err 87 } 88 89 net := devices.Find(name) 90 91 if net == nil { 92 return fmt.Errorf("device '%s' not found", name) 93 } 94 95 dev, err := cmd.NetworkFlag.Device() 96 if err != nil { 97 return err 98 } 99 100 cmd.NetworkFlag.Change(net, dev) 101 102 return vm.EditDevice(ctx, net) 103 }