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  }