github.com/vmware/govmomi@v0.51.0/cli/host/maintenance/enter.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 maintenance 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 enter struct { 18 *flags.HostSystemFlag 19 20 timeout int32 21 evacuate bool 22 } 23 24 func init() { 25 cli.Register("host.maintenance.enter", &enter{}) 26 } 27 28 func (cmd *enter) Register(ctx context.Context, f *flag.FlagSet) { 29 cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx) 30 cmd.HostSystemFlag.Register(ctx, f) 31 32 f.Var(flags.NewInt32(&cmd.timeout), "timeout", "Timeout") 33 f.BoolVar(&cmd.evacuate, "evacuate", false, "Evacuate powered off VMs") 34 } 35 36 func (cmd *enter) Process(ctx context.Context) error { 37 if err := cmd.HostSystemFlag.Process(ctx); err != nil { 38 return err 39 } 40 return nil 41 } 42 43 func (cmd *enter) Usage() string { 44 return "HOST..." 45 } 46 47 func (cmd *enter) Description() string { 48 return `Put HOST in maintenance mode. 49 50 While this task is running and when the host is in maintenance mode, 51 no VMs can be powered on and no provisioning operations can be performed on the host.` 52 } 53 54 func (cmd *enter) EnterMaintenanceMode(ctx context.Context, host *object.HostSystem) error { 55 task, err := host.EnterMaintenanceMode(ctx, cmd.timeout, cmd.evacuate, nil) // TODO: spec param 56 if err != nil { 57 return err 58 } 59 60 logger := cmd.ProgressLogger(fmt.Sprintf("%s entering maintenance mode... ", host.InventoryPath)) 61 defer logger.Wait() 62 63 _, err = task.WaitForResult(ctx, logger) 64 return err 65 } 66 67 func (cmd *enter) Run(ctx context.Context, f *flag.FlagSet) error { 68 hosts, err := cmd.HostSystems(f.Args()) 69 if err != nil { 70 return err 71 } 72 73 for _, host := range hosts { 74 err = cmd.EnterMaintenanceMode(ctx, host) 75 if err != nil { 76 return err 77 } 78 } 79 80 return nil 81 }