github.com/vmware/govmomi@v0.51.0/cli/namespace/registervm.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 namespace 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/object" 15 "github.com/vmware/govmomi/vapi" 16 "github.com/vmware/govmomi/vapi/namespace" 17 ) 18 19 type registervm struct { 20 *flags.VirtualMachineFlag 21 } 22 23 func init() { 24 cli.Register("namespace.registervm", ®istervm{}) 25 } 26 27 func (cmd *registervm) Register(ctx context.Context, f *flag.FlagSet) { 28 cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 29 cmd.VirtualMachineFlag.Register(ctx, f) 30 } 31 32 func (cmd *registervm) Usage() string { 33 return "NAME" 34 } 35 36 func (cmd *registervm) Description() string { 37 return `Register an existing virtual machine as VM Service managed VM. 38 39 Examples: 40 govc namespace.registervm -vm my-vm my-namespace` 41 } 42 43 func (cmd *registervm) Run(ctx context.Context, f *flag.FlagSet) error { 44 vm, err := cmd.VirtualMachine() 45 if err != nil { 46 return err 47 } 48 49 if vm == nil || f.NArg() != 1 { 50 return flag.ErrHelp 51 } 52 53 rc, err := cmd.RestClient() 54 if err != nil { 55 return err 56 } 57 58 spec := namespace.RegisterVMSpec{VM: vm.Reference().Value} 59 60 id, err := namespace.NewManager(rc).RegisterVM(ctx, f.Arg(0), spec) 61 if err != nil { 62 return err 63 } 64 65 task := object.NewTask(vm.Client(), vapi.Task(id)) 66 67 logger := cmd.ProgressLogger(fmt.Sprintf("registervm %s... ", vm.InventoryPath)) 68 _, err = task.WaitForResult(ctx, logger) 69 logger.Wait() 70 71 return err 72 }