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", ®ister{}) 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 }