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  }