Skip to content

Commit

Permalink
govc: add vm.migrate -net flag
Browse files Browse the repository at this point in the history
  • Loading branch information
dougm committed Jul 5, 2024
1 parent 13cef8e commit 08a690b
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 1 deletion.
9 changes: 9 additions & 0 deletions govc/test/vm.bats
Original file line number Diff line number Diff line change
Expand Up @@ -959,6 +959,15 @@ load test_helper

run govc object.collect -s "vm/new-folder/$vm" parent
assert_success

run govc vm.info -r "$vm"
assert_matches "Network: +DC0_DVPG0"

run govc vm.migrate -host "$host0" -net "VM Network" "$vm"
assert_success

run govc vm.info -r "$vm"
assert_matches "Network: +VM Network"
}

@test "object name with slash" {
Expand Down
34 changes: 33 additions & 1 deletion govc/vm/migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ type migrate struct {
*flags.ResourcePoolFlag
*flags.HostSystemFlag
*flags.DatastoreFlag
*flags.NetworkFlag
*flags.VirtualMachineFlag

priority types.VirtualMachineMovePriority
Expand All @@ -58,6 +59,9 @@ func (cmd *migrate) Register(ctx context.Context, f *flag.FlagSet) {
cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx)
cmd.DatastoreFlag.Register(ctx, f)

cmd.NetworkFlag, ctx = flags.NewNetworkFlag(ctx)
cmd.NetworkFlag.Register(ctx, f)

f.StringVar((*string)(&cmd.priority), "priority", string(types.VirtualMachineMovePriorityDefaultPriority), "The task priority")
}

Expand All @@ -77,6 +81,9 @@ func (cmd *migrate) Process(ctx context.Context) error {
if err := cmd.DatastoreFlag.Process(ctx); err != nil {
return err
}
if err := cmd.NetworkFlag.Process(ctx); err != nil {
return err
}

return nil
}
Expand All @@ -95,7 +102,32 @@ Examples:
}

func (cmd *migrate) relocate(ctx context.Context, vm *object.VirtualMachine) error {
task, err := vm.Relocate(ctx, cmd.spec, cmd.priority)
spec := cmd.spec

if cmd.NetworkFlag.IsSet() {
dev, err := cmd.NetworkFlag.Device()
if err != nil {
return err
}

devices, err := vm.Device(ctx)
if err != nil {
return err
}

net := devices.SelectByType((*types.VirtualEthernetCard)(nil))
if len(net) != 1 {
return fmt.Errorf("-net specified, but %s has %d nics", vm.Name(), len(net))
}
cmd.NetworkFlag.Change(net[0], dev)

spec.DeviceChange = append(spec.DeviceChange, &types.VirtualDeviceConfigSpec{
Device: net[0],
Operation: types.VirtualDeviceConfigSpecOperationEdit,
})
}

task, err := vm.Relocate(ctx, spec, cmd.priority)
if err != nil {
return err
}
Expand Down
5 changes: 5 additions & 0 deletions simulator/virtual_machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -2345,6 +2345,11 @@ func (vm *VirtualMachine) RelocateVMTask(ctx *Context, req *types.RelocateVM_Tas
})
}

cspec := &types.VirtualMachineConfigSpec{DeviceChange: req.Spec.DeviceChange}
if err := vm.configureDevices(ctx, cspec); err != nil {
return nil, err
}

ctx.postEvent(&types.VmMigratedEvent{
VmEvent: vm.event(),
SourceHost: *ctx.Map.Get(*vm.Runtime.Host).(*HostSystem).eventArgument(),
Expand Down

0 comments on commit 08a690b

Please sign in to comment.