github.com/vmware/govmomi@v0.51.0/cli/vm/disk/promote.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 disk
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  
    11  	"github.com/vmware/govmomi/cli"
    12  	"github.com/vmware/govmomi/cli/device"
    13  	"github.com/vmware/govmomi/cli/flags"
    14  	"github.com/vmware/govmomi/vim25/types"
    15  )
    16  
    17  type promote struct {
    18  	*flags.VirtualMachineFlag
    19  
    20  	unlink bool
    21  }
    22  
    23  func init() {
    24  	cli.Register("vm.disk.promote", &promote{})
    25  }
    26  
    27  func (cmd *promote) 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.unlink, "unlink", true, "Unlink")
    32  }
    33  
    34  func (cmd *promote) Usage() string {
    35  	return "DISK..."
    36  }
    37  
    38  func (cmd *promote) Description() string {
    39  	return `Promote VM disk.
    40  
    41  Examples:
    42    govc device.info -vm $name disk-*
    43    govc vm.disk.promote -vm $name disk-1000-0
    44    govc vm.disk.promote -vm $name disk-*`
    45  }
    46  
    47  func (cmd *promote) Run(ctx context.Context, f *flag.FlagSet) error {
    48  	vm, err := cmd.VirtualMachine()
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	if vm == nil {
    54  		return flag.ErrHelp
    55  	}
    56  
    57  	if f.NArg() == 0 {
    58  		return flag.ErrHelp
    59  	}
    60  
    61  	devices, err := vm.Device(ctx)
    62  	if err != nil {
    63  		return err
    64  	}
    65  
    66  	devices = devices.SelectByType((*types.VirtualDisk)(nil))
    67  
    68  	devices, err = device.Match(devices, f.Args())
    69  	if err != nil {
    70  		return err
    71  	}
    72  
    73  	disks := make([]types.VirtualDisk, len(devices))
    74  	for i := range devices {
    75  		disks[i] = *(devices[i].(*types.VirtualDisk))
    76  	}
    77  
    78  	task, err := vm.PromoteDisks(ctx, cmd.unlink, disks)
    79  	if err != nil {
    80  		return err
    81  	}
    82  
    83  	logger := cmd.ProgressLogger("Promoting disks...")
    84  	defer logger.Wait()
    85  
    86  	_, err = task.WaitForResult(ctx, logger)
    87  	return err
    88  }