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 }