open-nomad/command/scaling_policy.go

83 lines
1.9 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package command
import (
"fmt"
"strings"
"github.com/mitchellh/cli"
)
// Ensure ScalingPolicyCommand satisfies the cli.Command interface.
var _ cli.Command = &ScalingPolicyCommand{}
// ScalingPolicyCommand implements cli.Command.
type ScalingPolicyCommand struct {
Meta
}
// Help satisfies the cli.Command Help function.
func (s *ScalingPolicyCommand) Help() string {
helpText := `
Usage: nomad scaling policy <subcommand> [options]
This command groups subcommands for interacting with scaling policies. Scaling
policies can be used by an external autoscaler to perform scaling actions on
Nomad targets.
List policies:
$ nomad scaling policy list
Detail an individual scaling policy:
$ nomad scaling policy info <policy_id>
Please see the individual subcommand help for detailed usage information.
`
return strings.TrimSpace(helpText)
}
// Synopsis satisfies the cli.Command Synopsis function.
func (s *ScalingPolicyCommand) Synopsis() string {
return "Interact with Nomad scaling policies"
}
// Name returns the name of this command.
func (s *ScalingPolicyCommand) Name() string { return "scaling policy" }
// Run satisfies the cli.Command Run function.
func (s *ScalingPolicyCommand) Run(_ []string) int { return cli.RunResultHelp }
// formatScalingPolicyTarget is a command helper that correctly formats a
// scaling policy target map into a command string output.
func formatScalingPolicyTarget(t map[string]string) string {
var ns, j, g string
var other []string
for k, v := range t {
s := fmt.Sprintf("%s:%s", k, v)
switch strings.ToLower(k) {
case "namespace":
ns = s
case "job":
j = s
case "group":
g = s
default:
other = append(other, s)
}
}
out := []string{ns, j, g}
if len(other) > 0 {
out = append(out, other...)
}
return strings.Trim(strings.Join(out, ","), ",")
}