github.com/vmware/govmomi@v0.51.0/cli/vcsa/shutdown/poweroff.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 shutdown
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  
    11  	"github.com/vmware/govmomi/cli"
    12  	"github.com/vmware/govmomi/cli/flags"
    13  	"github.com/vmware/govmomi/vapi/appliance/shutdown"
    14  )
    15  
    16  type powerOff struct {
    17  	*flags.ClientFlag
    18  
    19  	reason string
    20  	delay  int // in minutes
    21  }
    22  
    23  func init() {
    24  	cli.Register("vcsa.shutdown.poweroff", &powerOff{})
    25  }
    26  
    27  func (cmd *powerOff) Register(ctx context.Context, f *flag.FlagSet) {
    28  	cmd.ClientFlag, ctx = flags.NewClientFlag(ctx)
    29  	cmd.ClientFlag.Register(ctx, f)
    30  
    31  	f.IntVar(&cmd.delay,
    32  		"delay",
    33  		0,
    34  		"Minutes after which poweroff should start.")
    35  }
    36  
    37  func (cmd *powerOff) Usage() string {
    38  	return "REASON"
    39  }
    40  
    41  func (cmd *powerOff) Description() string {
    42  	return `Power off the appliance.
    43  
    44  Note: This command requires vCenter 7.0.2 or higher.
    45  
    46  Examples:
    47  govc vcsa.shutdown.poweroff -delay 10 "powering off for maintenance"`
    48  }
    49  
    50  func (cmd *powerOff) Run(ctx context.Context, f *flag.FlagSet) error {
    51  	if f.NArg() != 1 {
    52  		return flag.ErrHelp
    53  	}
    54  
    55  	c, err := cmd.RestClient()
    56  	if err != nil {
    57  		return err
    58  	}
    59  
    60  	m := shutdown.NewManager(c)
    61  
    62  	if err = m.PowerOff(ctx, f.Arg(0), cmd.delay); err != nil {
    63  		return err
    64  	}
    65  
    66  	return nil
    67  }