Skip to content

Commit

Permalink
Implemened vm.upgrade operation.
Browse files Browse the repository at this point in the history
  • Loading branch information
vmbobyr committed Nov 14, 2017
1 parent 46c79c9 commit f98ea88
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 0 deletions.
10 changes: 10 additions & 0 deletions govc/test/vm.bats
Original file line number Diff line number Diff line change
Expand Up @@ -649,3 +649,13 @@ load test_helper
run govc vm.console -capture - "$vm"
assert_success
}

@test "vm.upgrade" {
esx_env

vm=$(new_empty_vm)

govc vm.upgrade -vm "$vm"
assert_success

}
70 changes: 70 additions & 0 deletions govc/vm/upgrade.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package vm

import (
"context"
"flag"

"github.com/vmware/govmomi/govc/cli"
"github.com/vmware/govmomi/govc/flags"
"fmt"
)

type upgrade struct {
*flags.VirtualMachineFlag
version int
}

func init() {
cli.Register("vm.upgrade", &upgrade{})
}

func (cmd *upgrade) Register(ctx context.Context, f *flag.FlagSet) {
cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx)
cmd.VirtualMachineFlag.Register(ctx, f)

f.IntVar(&cmd.version, "version", 0 ,"Target vm hardware version, by default -- latest available ")
}

func (cmd *upgrade) Process(ctx context.Context) error {
if err := cmd.VirtualMachineFlag.Process(ctx); err != nil {
return err
}
return nil
}

func (cmd *upgrade) Description() string {
return `Upgrade VMs to latest hardware version
Examples:
govc vm.upgrade -vm $vm_name
govc vm.upgrade -version=$version -vm $vm_name
govc vm.upgrade -version=$version -vm.uuid $vm_uuid`
}

func (cmd *upgrade) Run(ctx context.Context, f *flag.FlagSet) error {
vm, err := cmd.VirtualMachine()
if err != nil {
return err
}

var target_version = ""
if cmd.version != 0 {
target_version = fmt.Sprintf("vmx-%02d", cmd.version)
}

task, err := vm.UpgradeVM(ctx, target_version)
if err != nil {
return err
}
err = task.Wait(ctx)
if err != nil {
if err.Error() == "Virtual machine compatibility is already up-to-date." {
fmt.Println("Virtual machine compatibility is already up-to-date.")
} else {
return err
}

}

return nil
}
14 changes: 14 additions & 0 deletions object/virtual_machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -785,3 +785,17 @@ func (v VirtualMachine) Export(ctx context.Context) (*nfc.Lease, error) {

return nfc.NewLease(v.c, res.Returnval), nil
}

func (v VirtualMachine) UpgradeVM(ctx context.Context, version string) (*Task, error) {
req := types.UpgradeVM_Task{
This: v.Reference(),
Version: version,
}

res, err := methods.UpgradeVM_Task(ctx, v.Client(), &req)
if err != nil {
return nil, err
}

return NewTask(v.c, res.Returnval), nil
}

0 comments on commit f98ea88

Please sign in to comment.