github.com/vmware/govmomi@v0.51.0/cli/device/cdrom/insert.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  
    11  	"github.com/vmware/govmomi/cli"
    12  	"github.com/vmware/govmomi/cli/flags"
    13  )
    14  
    15  type insert struct {
    16  	*flags.DatastoreFlag
    17  	*flags.VirtualMachineFlag
    18  
    19  	device string
    20  }
    21  
    22  func init() {
    23  	cli.Register("device.cdrom.insert", &insert{})
    24  }
    25  
    26  func (cmd *insert) Register(ctx context.Context, f *flag.FlagSet) {
    27  	cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx)
    28  	cmd.DatastoreFlag.Register(ctx, f)
    29  	cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx)
    30  	cmd.VirtualMachineFlag.Register(ctx, f)
    31  
    32  	f.StringVar(&cmd.device, "device", "", "CD-ROM device name")
    33  }
    34  
    35  func (cmd *insert) Process(ctx context.Context) error {
    36  	if err := cmd.DatastoreFlag.Process(ctx); err != nil {
    37  		return err
    38  	}
    39  	if err := cmd.VirtualMachineFlag.Process(ctx); err != nil {
    40  		return err
    41  	}
    42  	return nil
    43  }
    44  
    45  func (cmd *insert) Usage() string {
    46  	return "ISO"
    47  }
    48  
    49  func (cmd *insert) Description() string {
    50  	return `Insert media on datastore into CD-ROM device.
    51  
    52  If device is not specified, the first CD-ROM device is used.
    53  
    54  Examples:
    55    govc device.cdrom.insert -vm vm-1 -device cdrom-3000 images/boot.iso
    56    govc device.cdrom.insert -vm vm-1 library:/boot/linux/ubuntu.iso # Content Library ISO`
    57  }
    58  
    59  func (cmd *insert) Run(ctx context.Context, f *flag.FlagSet) error {
    60  	vm, err := cmd.VirtualMachine()
    61  	if err != nil {
    62  		return err
    63  	}
    64  
    65  	if vm == nil || f.NArg() != 1 {
    66  		return flag.ErrHelp
    67  	}
    68  
    69  	devices, err := vm.Device(ctx)
    70  	if err != nil {
    71  		return err
    72  	}
    73  
    74  	c, err := devices.FindCdrom(cmd.device)
    75  	if err != nil {
    76  		return err
    77  	}
    78  
    79  	iso, err := cmd.FileBacking(ctx, f.Arg(0), false)
    80  	if err != nil {
    81  		return err
    82  	}
    83  
    84  	return vm.EditDevice(ctx, devices.InsertIso(c, iso))
    85  }