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