github.com/vmware/govmomi@v0.51.0/cli/vm/snapshot/revert.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 snapshot
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  
    11  	"github.com/vmware/govmomi/cli"
    12  	"github.com/vmware/govmomi/cli/flags"
    13  	"github.com/vmware/govmomi/object"
    14  )
    15  
    16  type revert struct {
    17  	*flags.VirtualMachineFlag
    18  
    19  	suppressPowerOn bool
    20  }
    21  
    22  func init() {
    23  	cli.Register("snapshot.revert", &revert{})
    24  }
    25  
    26  func (cmd *revert) Register(ctx context.Context, f *flag.FlagSet) {
    27  	cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx)
    28  	cmd.VirtualMachineFlag.Register(ctx, f)
    29  
    30  	f.BoolVar(&cmd.suppressPowerOn, "s", false, "Suppress power on")
    31  }
    32  
    33  func (cmd *revert) Usage() string {
    34  	return "[NAME]"
    35  }
    36  
    37  func (cmd *revert) Description() string {
    38  	return `Revert to snapshot of VM with given NAME.
    39  
    40  If NAME is not provided, revert to the current snapshot.
    41  Otherwise, NAME can be the snapshot name, tree path or moid.
    42  
    43  Examples:
    44    govc snapshot.revert -vm my-vm happy-vm-state`
    45  }
    46  
    47  func (cmd *revert) Process(ctx context.Context) error {
    48  	if err := cmd.VirtualMachineFlag.Process(ctx); err != nil {
    49  		return err
    50  	}
    51  	return nil
    52  }
    53  
    54  func (cmd *revert) Run(ctx context.Context, f *flag.FlagSet) error {
    55  	if f.NArg() > 1 {
    56  		return flag.ErrHelp
    57  	}
    58  
    59  	vm, err := cmd.VirtualMachine()
    60  	if err != nil {
    61  		return err
    62  	}
    63  
    64  	if vm == nil {
    65  		return flag.ErrHelp
    66  	}
    67  
    68  	var task *object.Task
    69  
    70  	if f.NArg() == 1 {
    71  		task, err = vm.RevertToSnapshot(ctx, f.Arg(0), cmd.suppressPowerOn)
    72  	} else {
    73  		task, err = vm.RevertToCurrentSnapshot(ctx, cmd.suppressPowerOn)
    74  	}
    75  
    76  	if err != nil {
    77  		return err
    78  	}
    79  
    80  	return task.Wait(ctx)
    81  }