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  }