github.com/vmware/govmomi@v0.51.0/cli/device/cdrom/add.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 cdrom
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  	"fmt"
    11  
    12  	"github.com/vmware/govmomi/cli"
    13  	"github.com/vmware/govmomi/cli/flags"
    14  )
    15  
    16  type add struct {
    17  	*flags.VirtualMachineFlag
    18  
    19  	controller string
    20  }
    21  
    22  func init() {
    23  	cli.Register("device.cdrom.add", &add{})
    24  }
    25  
    26  func (cmd *add) Register(ctx context.Context, f *flag.FlagSet) {
    27  	cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx)
    28  	cmd.VirtualMachineFlag.Register(ctx, f)
    29  
    30  	f.StringVar(&cmd.controller, "controller", "", "IDE controller name")
    31  }
    32  
    33  func (cmd *add) Description() string {
    34  	return `Add CD-ROM device to VM.
    35  
    36  Examples:
    37    govc device.cdrom.add -vm $vm
    38    govc device.ls -vm $vm | grep ide-
    39    govc device.cdrom.add -vm $vm -controller ide-200
    40    govc device.info cdrom-*`
    41  }
    42  
    43  func (cmd *add) Process(ctx context.Context) error {
    44  	if err := cmd.VirtualMachineFlag.Process(ctx); err != nil {
    45  		return err
    46  	}
    47  	return nil
    48  }
    49  
    50  func (cmd *add) Run(ctx context.Context, f *flag.FlagSet) error {
    51  	vm, err := cmd.VirtualMachine()
    52  	if err != nil {
    53  		return err
    54  	}
    55  
    56  	if vm == nil {
    57  		return flag.ErrHelp
    58  	}
    59  
    60  	devices, err := vm.Device(ctx)
    61  	if err != nil {
    62  		return err
    63  	}
    64  
    65  	c, err := devices.FindIDEController(cmd.controller)
    66  	if err != nil {
    67  		return err
    68  	}
    69  
    70  	d, err := devices.CreateCdrom(c)
    71  	if err != nil {
    72  		return err
    73  	}
    74  
    75  	err = vm.AddDevice(ctx, d)
    76  	if err != nil {
    77  		return err
    78  	}
    79  
    80  	// output name of device we just created
    81  	devices, err = vm.Device(ctx)
    82  	if err != nil {
    83  		return err
    84  	}
    85  
    86  	devices = devices.SelectByType(d)
    87  
    88  	name := devices.Name(devices[len(devices)-1])
    89  
    90  	fmt.Println(name)
    91  
    92  	return nil
    93  }