github.com/vmware/govmomi@v0.51.0/cli/host/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 host 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/vim25/methods" 16 "github.com/vmware/govmomi/vim25/types" 17 ) 18 19 type add struct { 20 *flags.FolderFlag 21 *flags.HostConnectFlag 22 23 connect bool 24 } 25 26 func init() { 27 cli.Register("host.add", &add{}) 28 } 29 30 func (cmd *add) Register(ctx context.Context, f *flag.FlagSet) { 31 cmd.FolderFlag, ctx = flags.NewFolderFlag(ctx) 32 cmd.FolderFlag.Register(ctx, f) 33 34 cmd.HostConnectFlag, ctx = flags.NewHostConnectFlag(ctx) 35 cmd.HostConnectFlag.Register(ctx, f) 36 37 f.BoolVar(&cmd.connect, "connect", true, "Immediately connect to host") 38 } 39 40 func (cmd *add) Process(ctx context.Context) error { 41 if err := cmd.FolderFlag.Process(ctx); err != nil { 42 return err 43 } 44 if err := cmd.HostConnectFlag.Process(ctx); err != nil { 45 return err 46 } 47 if cmd.HostName == "" { 48 return flag.ErrHelp 49 } 50 if cmd.UserName == "" { 51 return flag.ErrHelp 52 } 53 if cmd.Password == "" { 54 return flag.ErrHelp 55 } 56 return nil 57 } 58 59 func (cmd *add) Description() string { 60 return `Add host to datacenter. 61 62 The host is added to the folder specified by the 'folder' flag. If not given, 63 this defaults to the host folder in the specified or default datacenter. 64 65 Examples: 66 thumbprint=$(govc about.cert -k -u host.example.com -thumbprint | awk '{print $2}') 67 govc host.add -hostname host.example.com -username root -password pass -thumbprint $thumbprint 68 govc host.add -hostname 10.0.6.1 -username root -password pass -noverify` 69 } 70 71 func (cmd *add) Add(ctx context.Context, parent *object.Folder) error { 72 spec := cmd.Spec(parent.Client()) 73 74 req := types.AddStandaloneHost_Task{ 75 This: parent.Reference(), 76 Spec: spec, 77 AddConnected: cmd.connect, 78 } 79 80 res, err := methods.AddStandaloneHost_Task(ctx, parent.Client(), &req) 81 if err != nil { 82 return err 83 } 84 85 logger := cmd.ProgressLogger(fmt.Sprintf("adding %s to folder %s... ", spec.HostName, parent.InventoryPath)) 86 defer logger.Wait() 87 88 task := object.NewTask(parent.Client(), res.Returnval) 89 _, err = task.WaitForResult(ctx, logger) 90 return err 91 } 92 93 func (cmd *add) Run(ctx context.Context, f *flag.FlagSet) error { 94 if f.NArg() != 0 { 95 return flag.ErrHelp 96 } 97 98 folder, err := cmd.FolderOrDefault("host") 99 if err != nil { 100 return err 101 } 102 103 return cmd.Fault(cmd.Add(ctx, folder)) 104 }