Add label support to baremetal power commands

The power commands support interacting with hosts by providing the host
document name as an argument. This change adds support for filtering
hosts using a labels flag (-l or --labels). This change also adds a name
flag to support filtering host documents by name and removes the
argument requirement.

Change-Id: I54d487a35fb36f26fe8e9931f57bbda25375e714
Signed-off-by: Drew Walters <andrew.walters@att.com>
This commit is contained in:
Drew Walters 2020-04-28 16:26:23 +00:00
parent 7ddb858135
commit ddb43694b9
9 changed files with 61 additions and 25 deletions

View File

@ -21,6 +21,14 @@ import (
)
const (
flagLabel = "labels"
flagLabelShort = "l"
flagLabelDescription = "Label(s) to filter desired baremetal host documents"
flagName = "name"
flagNameShort = "n"
flagNameDescription = "Name to filter desired baremetal host document"
flagPhase = "phase"
flagPhaseDescription = "airshipctl phase that contains the desired baremetal host document(s)"
)

View File

@ -26,13 +26,16 @@ import (
// NewPowerOffCommand provides a command to shutdown a remote host.
func NewPowerOffCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command {
var labels string
var name string
var phase string
cmd := &cobra.Command{
Use: "poweroff BAREMETAL_HOST_DOC_NAME",
Use: "poweroff",
Short: "Shutdown a baremetal host",
Args: cobra.ExactArgs(1),
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
m, err := remote.NewManager(rootSettings, phase, remote.ByName(args[0]))
m, err := remote.NewManager(rootSettings, phase, remote.ByLabel(labels), remote.ByName(name))
if err != nil {
return err
}
@ -50,6 +53,8 @@ func NewPowerOffCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Com
}
flags := cmd.Flags()
flags.StringVarP(&labels, flagLabel, flagLabelShort, "", flagLabelDescription)
flags.StringVarP(&name, flagName, flagNameShort, "", flagNameDescription)
flags.StringVar(&phase, flagPhase, config.BootstrapPhase, flagPhaseDescription)
return cmd

View File

@ -26,13 +26,16 @@ import (
// NewPowerOnCommand provides a command with the capability to power on baremetal hosts.
func NewPowerOnCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command {
var labels string
var name string
var phase string
cmd := &cobra.Command{
Use: "poweron BAREMETAL_HOST_DOC_NAME",
Use: "poweron",
Short: "Power on a host",
Args: cobra.ExactArgs(1),
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
m, err := remote.NewManager(rootSettings, phase, remote.ByName(args[0]))
m, err := remote.NewManager(rootSettings, phase, remote.ByLabel(labels), remote.ByName(name))
if err != nil {
return err
}
@ -42,7 +45,7 @@ func NewPowerOnCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Comm
return err
}
fmt.Fprintf(cmd.OutOrStdout(), "Powered on remote host %s\n", args[0])
fmt.Fprintf(cmd.OutOrStdout(), "Powered on remote host %s\n", host.HostName)
}
return nil
@ -50,6 +53,8 @@ func NewPowerOnCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Comm
}
flags := cmd.Flags()
flags.StringVarP(&labels, flagLabel, flagLabelShort, "", flagLabelDescription)
flags.StringVarP(&name, flagName, flagNameShort, "", flagNameDescription)
flags.StringVar(&phase, flagPhase, config.BootstrapPhase, flagPhaseDescription)
return cmd

View File

@ -26,13 +26,16 @@ import (
// NewPowerStatusCommand provides a command to retrieve the power status of a baremetal host.
func NewPowerStatusCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command {
var labels string
var name string
var phase string
cmd := &cobra.Command{
Use: "powerstatus BAREMETAL_HOST_DOC_NAME",
Use: "powerstatus",
Short: "Retrieve the power status of a baremetal host",
Args: cobra.ExactArgs(1),
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
m, err := remote.NewManager(rootSettings, phase, remote.ByName(args[0]))
m, err := remote.NewManager(rootSettings, phase, remote.ByLabel(labels), remote.ByName(name))
if err != nil {
return err
}
@ -52,6 +55,8 @@ func NewPowerStatusCommand(rootSettings *environment.AirshipCTLSettings) *cobra.
}
flags := cmd.Flags()
flags.StringVarP(&labels, flagLabel, flagLabelShort, "", flagLabelDescription)
flags.StringVarP(&name, flagName, flagNameShort, "", flagNameDescription)
flags.StringVar(&phase, flagPhase, config.BootstrapPhase, flagPhaseDescription)
return cmd

View File

@ -26,13 +26,16 @@ import (
// NewRebootCommand provides a command with the capability to reboot baremetal hosts.
func NewRebootCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Command {
var labels string
var name string
var phase string
cmd := &cobra.Command{
Use: "reboot BAREMETAL_HOST_DOC_NAME",
Use: "reboot",
Short: "Reboot a host",
Args: cobra.ExactArgs(1),
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
m, err := remote.NewManager(rootSettings, phase, remote.ByName(args[0]))
m, err := remote.NewManager(rootSettings, phase, remote.ByLabel(labels), remote.ByName(name))
if err != nil {
return err
}
@ -50,6 +53,8 @@ func NewRebootCommand(rootSettings *environment.AirshipCTLSettings) *cobra.Comma
}
flags := cmd.Flags()
flags.StringVarP(&labels, flagLabel, flagLabelShort, "", flagLabelDescription)
flags.StringVarP(&name, flagName, flagNameShort, "", flagNameDescription)
flags.StringVar(&phase, flagPhase, config.BootstrapPhase, flagPhaseDescription)
return cmd

View File

@ -1,8 +1,10 @@
Shutdown a baremetal host
Usage:
poweroff BAREMETAL_HOST_DOC_NAME [flags]
poweroff [flags]
Flags:
-h, --help help for poweroff
--phase string airshipctl phase that contains the desired baremetal host document(s) (default "bootstrap")
-h, --help help for poweroff
-l, --labels string Label(s) to filter desired baremetal host documents
-n, --name string Name to filter desired baremetal host document
--phase string airshipctl phase that contains the desired baremetal host document(s) (default "bootstrap")

View File

@ -1,8 +1,10 @@
Power on a host
Usage:
poweron BAREMETAL_HOST_DOC_NAME [flags]
poweron [flags]
Flags:
-h, --help help for poweron
--phase string airshipctl phase that contains the desired baremetal host document(s) (default "bootstrap")
-h, --help help for poweron
-l, --labels string Label(s) to filter desired baremetal host documents
-n, --name string Name to filter desired baremetal host document
--phase string airshipctl phase that contains the desired baremetal host document(s) (default "bootstrap")

View File

@ -1,8 +1,10 @@
Retrieve the power status of a baremetal host
Usage:
powerstatus BAREMETAL_HOST_DOC_NAME [flags]
powerstatus [flags]
Flags:
-h, --help help for powerstatus
--phase string airshipctl phase that contains the desired baremetal host document(s) (default "bootstrap")
-h, --help help for powerstatus
-l, --labels string Label(s) to filter desired baremetal host documents
-n, --name string Name to filter desired baremetal host document
--phase string airshipctl phase that contains the desired baremetal host document(s) (default "bootstrap")

View File

@ -1,8 +1,10 @@
Reboot a host
Usage:
reboot BAREMETAL_HOST_DOC_NAME [flags]
reboot [flags]
Flags:
-h, --help help for reboot
--phase string airshipctl phase that contains the desired baremetal host document(s) (default "bootstrap")
-h, --help help for reboot
-l, --labels string Label(s) to filter desired baremetal host documents
-n, --name string Name to filter desired baremetal host document
--phase string airshipctl phase that contains the desired baremetal host document(s) (default "bootstrap")