github.com/vmware/govmomi@v0.51.0/cli/vm/upgrade.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 vm 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/fault" 15 "github.com/vmware/govmomi/vim25/types" 16 ) 17 18 type upgrade struct { 19 *flags.VirtualMachineFlag 20 version int 21 } 22 23 func init() { 24 cli.Register("vm.upgrade", &upgrade{}) 25 } 26 27 func (cmd *upgrade) Register(ctx context.Context, f *flag.FlagSet) { 28 cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 29 cmd.VirtualMachineFlag.Register(ctx, f) 30 31 f.IntVar(&cmd.version, "version", 0, "Target vm hardware version, by default -- latest available") 32 } 33 34 func (cmd *upgrade) Process(ctx context.Context) error { 35 if err := cmd.VirtualMachineFlag.Process(ctx); err != nil { 36 return err 37 } 38 return nil 39 } 40 41 func (cmd *upgrade) Description() string { 42 return `Upgrade VMs to latest hardware version 43 44 Examples: 45 govc vm.upgrade -vm $vm_name 46 govc vm.upgrade -version=$version -vm $vm_name 47 govc vm.upgrade -version=$version -vm.uuid $vm_uuid` 48 } 49 50 func (cmd *upgrade) Run(ctx context.Context, f *flag.FlagSet) error { 51 vm, err := cmd.VirtualMachine() 52 if err != nil { 53 return err 54 } 55 56 var version = "" 57 if cmd.version != 0 { 58 version = fmt.Sprintf("vmx-%02d", cmd.version) 59 } 60 61 task, err := vm.UpgradeVM(ctx, version) 62 if err != nil { 63 return err 64 } 65 err = task.Wait(ctx) 66 if err != nil { 67 if fault.Is(err, &types.AlreadyUpgraded{}) { 68 fmt.Println(err.Error()) 69 } else { 70 return err 71 } 72 } 73 74 return nil 75 }