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 }