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  }