github.com/vmware/govmomi@v0.51.0/cli/vm/snapshot/remove.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 remove struct { 17 *flags.VirtualMachineFlag 18 19 recursive bool 20 consolidate bool 21 } 22 23 func init() { 24 cli.Register("snapshot.remove", &remove{}) 25 } 26 27 func (cmd *remove) Register(ctx context.Context, f *flag.FlagSet) { 28 cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 29 cmd.VirtualMachineFlag.Register(ctx, f) 30 31 f.BoolVar(&cmd.recursive, "r", false, "Remove snapshot children") 32 f.BoolVar(&cmd.consolidate, "c", true, "Consolidate disks") 33 } 34 35 func (cmd *remove) Usage() string { 36 return "NAME" 37 } 38 39 func (cmd *remove) Description() string { 40 return `Remove snapshot of VM with given NAME. 41 42 NAME can be the snapshot name, tree path, moid or '*' to remove all snapshots. 43 44 Examples: 45 govc snapshot.remove -vm my-vm happy-vm-state` 46 } 47 48 func (cmd *remove) Process(ctx context.Context) error { 49 if err := cmd.VirtualMachineFlag.Process(ctx); err != nil { 50 return err 51 } 52 return nil 53 } 54 55 func (cmd *remove) Run(ctx context.Context, f *flag.FlagSet) error { 56 if f.NArg() != 1 { 57 return flag.ErrHelp 58 } 59 60 vm, err := cmd.VirtualMachine() 61 if err != nil { 62 return err 63 } 64 65 if vm == nil { 66 return flag.ErrHelp 67 } 68 69 var task *object.Task 70 71 if f.Arg(0) == "*" { 72 task, err = vm.RemoveAllSnapshot(ctx, &cmd.consolidate) 73 } else { 74 task, err = vm.RemoveSnapshot(ctx, f.Arg(0), cmd.recursive, &cmd.consolidate) 75 } 76 77 if err != nil { 78 return err 79 } 80 81 return task.Wait(ctx) 82 }