github.com/vmware/govmomi@v0.51.0/cli/vm/register.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 vm
     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 register struct {
    16  	*flags.DatastoreFlag
    17  	*flags.ResourcePoolFlag
    18  	*flags.HostSystemFlag
    19  	*flags.FolderFlag
    20  
    21  	name     string
    22  	template bool
    23  }
    24  
    25  func init() {
    26  	cli.Register("vm.register", &register{})
    27  }
    28  
    29  func (cmd *register) Register(ctx context.Context, f *flag.FlagSet) {
    30  	cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx)
    31  	cmd.DatastoreFlag.Register(ctx, f)
    32  
    33  	cmd.ResourcePoolFlag, ctx = flags.NewResourcePoolFlag(ctx)
    34  	cmd.ResourcePoolFlag.Register(ctx, f)
    35  
    36  	cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx)
    37  	cmd.HostSystemFlag.Register(ctx, f)
    38  
    39  	cmd.FolderFlag, ctx = flags.NewFolderFlag(ctx)
    40  	cmd.FolderFlag.Register(ctx, f)
    41  
    42  	f.StringVar(&cmd.name, "name", "", "Name of the VM")
    43  	f.BoolVar(&cmd.template, "template", false, "Mark VM as template")
    44  }
    45  
    46  func (cmd *register) Process(ctx context.Context) error {
    47  	if err := cmd.DatastoreFlag.Process(ctx); err != nil {
    48  		return err
    49  	}
    50  	if err := cmd.ResourcePoolFlag.Process(ctx); err != nil {
    51  		return err
    52  	}
    53  	if err := cmd.HostSystemFlag.Process(ctx); err != nil {
    54  		return err
    55  	}
    56  	if err := cmd.FolderFlag.Process(ctx); err != nil {
    57  		return err
    58  	}
    59  
    60  	return nil
    61  }
    62  
    63  func (cmd *register) Usage() string {
    64  	return "VMX"
    65  }
    66  
    67  func (cmd *register) Description() string {
    68  	return `Add an existing VM to the inventory.
    69  
    70  VMX is a path to the vm config file, relative to DATASTORE.
    71  
    72  Examples:
    73    govc vm.register path/name.vmx
    74    govc vm.register -template -host $host path/name.vmx`
    75  }
    76  
    77  func (cmd *register) Run(ctx context.Context, f *flag.FlagSet) error {
    78  	if len(f.Args()) != 1 {
    79  		return flag.ErrHelp
    80  	}
    81  
    82  	pool, err := cmd.ResourcePoolIfSpecified()
    83  	if err != nil {
    84  		return err
    85  	}
    86  
    87  	host, err := cmd.HostSystemFlag.HostSystemIfSpecified()
    88  	if err != nil {
    89  		return err
    90  	}
    91  
    92  	if cmd.template {
    93  		if pool != nil || host == nil {
    94  			return flag.ErrHelp
    95  		}
    96  	} else if pool == nil {
    97  		if host != nil {
    98  			pool, err = host.ResourcePool(ctx)
    99  			if err != nil {
   100  				return err
   101  			}
   102  		} else {
   103  			// neither -host nor -pool were specified, so use the default pool (ESX)
   104  			pool, err = cmd.ResourcePool()
   105  			if err != nil {
   106  				return err
   107  			}
   108  		}
   109  	}
   110  
   111  	folder, err := cmd.FolderFlag.Folder()
   112  	if err != nil {
   113  		return err
   114  	}
   115  
   116  	path, err := cmd.DatastorePath(f.Arg(0))
   117  	if err != nil {
   118  		return err
   119  	}
   120  
   121  	task, err := folder.RegisterVM(ctx, path, cmd.name, cmd.template, pool, host)
   122  	if err != nil {
   123  		return err
   124  	}
   125  
   126  	return task.Wait(ctx)
   127  }