github.com/vmware/govmomi@v0.51.0/cli/host/reconnect.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/types"
    16  )
    17  
    18  type reconnect struct {
    19  	*flags.HostSystemFlag
    20  	*flags.HostConnectFlag
    21  
    22  	types.HostSystemReconnectSpec
    23  }
    24  
    25  func init() {
    26  	cli.Register("host.reconnect", &reconnect{})
    27  }
    28  
    29  func (cmd *reconnect) Register(ctx context.Context, f *flag.FlagSet) {
    30  	cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx)
    31  	cmd.HostSystemFlag.Register(ctx, f)
    32  
    33  	cmd.HostConnectFlag, ctx = flags.NewHostConnectFlag(ctx)
    34  	cmd.HostConnectFlag.Register(ctx, f)
    35  
    36  	cmd.HostSystemReconnectSpec.SyncState = types.NewBool(false)
    37  	f.BoolVar(cmd.HostSystemReconnectSpec.SyncState, "sync-state", false, "Sync state")
    38  }
    39  
    40  func (cmd *reconnect) Process(ctx context.Context) error {
    41  	if err := cmd.HostSystemFlag.Process(ctx); err != nil {
    42  		return err
    43  	}
    44  	if err := cmd.HostConnectFlag.Process(ctx); err != nil {
    45  		return err
    46  	}
    47  	return nil
    48  }
    49  
    50  func (cmd *reconnect) Description() string {
    51  	return `Reconnect HOST to vCenter.
    52  
    53  This command can also be used to change connection properties (hostname, fingerprint, username, password),
    54  without disconnecting the host.`
    55  }
    56  
    57  func (cmd *reconnect) Reconnect(ctx context.Context, host *object.HostSystem) error {
    58  	task, err := host.Reconnect(ctx, &cmd.HostConnectSpec, &cmd.HostSystemReconnectSpec)
    59  	if err != nil {
    60  		return err
    61  	}
    62  
    63  	logger := cmd.ProgressLogger(fmt.Sprintf("%s reconnecting... ", host.InventoryPath))
    64  	defer logger.Wait()
    65  
    66  	_, err = task.WaitForResult(ctx, logger)
    67  	return err
    68  }
    69  
    70  func (cmd *reconnect) Run(ctx context.Context, f *flag.FlagSet) error {
    71  	hosts, err := cmd.HostSystems(f.Args())
    72  	if err != nil {
    73  		return err
    74  	}
    75  
    76  	for _, host := range hosts {
    77  		err = cmd.Reconnect(ctx, host)
    78  		if err != nil {
    79  			return err
    80  		}
    81  	}
    82  
    83  	return nil
    84  }