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 }