open-nomad/command/node_config.go

125 lines
2.9 KiB
Go
Raw Normal View History

package command
import (
"fmt"
"strings"
2017-08-18 15:09:52 +00:00
"github.com/posener/complete"
)
2018-03-21 00:37:28 +00:00
type NodeConfigCommand struct {
Meta
}
2018-03-21 00:37:28 +00:00
func (c *NodeConfigCommand) Help() string {
helpText := `
2018-03-21 00:37:28 +00:00
Usage: nomad node config [options]
2018-03-21 00:37:28 +00:00
View or modify a client node's configuration details. This command only works
on client nodes, and can be used to update the running client configurations
it supports.
2018-03-21 00:37:28 +00:00
The arguments behave differently depending on the flags given. See each
flag's description for its specific requirements.
General Options:
` + generalOptionsUsage() + `
Client Config Options:
-servers
List the known server addresses of the client node. Client
nodes do not participate in the gossip pool, and instead
register with these servers periodically over the network.
-update-servers
Updates the client's server list using the provided
arguments. Multiple server addresses may be passed using
multiple arguments. IMPORTANT: When updating the servers
list, you must specify ALL of the server nodes you wish
to configure. The set is updated atomically.
Example:
2018-03-21 00:37:28 +00:00
$ nomad node config -update-servers foo:4647 bar:4647
`
return strings.TrimSpace(helpText)
}
2018-03-21 00:37:28 +00:00
func (c *NodeConfigCommand) Synopsis() string {
return "View or modify client configuration details"
}
2018-03-21 00:37:28 +00:00
func (c *NodeConfigCommand) Run(args []string) int {
var listServers, updateServers bool
2018-03-21 00:37:28 +00:00
flags := c.Meta.FlagSet("node config", FlagSetClient)
flags.Usage = func() { c.Ui.Output(c.Help()) }
flags.BoolVar(&listServers, "servers", false, "")
flags.BoolVar(&updateServers, "update-servers", false, "")
if err := flags.Parse(args); err != nil {
return 1
}
args = flags.Args()
// Check the flags for misuse
if !listServers && !updateServers {
c.Ui.Error(c.Help())
return 1
}
// Get the HTTP client
client, err := c.Meta.Client()
if err != nil {
c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err))
return 1
}
if updateServers {
// Get the server addresses
if len(args) == 0 {
c.Ui.Error(c.Help())
return 1
}
// Set the servers list
if err := client.Agent().SetServers(args); err != nil {
c.Ui.Error(fmt.Sprintf("Error updating server list: %s", err))
return 1
}
c.Ui.Output(fmt.Sprint("Updated server list"))
return 0
}
if listServers {
// Query the current server list
servers, err := client.Agent().Servers()
if err != nil {
c.Ui.Error(fmt.Sprintf("Error querying server list: %s", err))
return 1
}
// Print the results
for _, server := range servers {
c.Ui.Output(server)
}
return 0
}
// Should not make it this far
return 1
}
2017-08-18 15:09:52 +00:00
2018-03-21 00:37:28 +00:00
func (c *NodeConfigCommand) AutocompleteFlags() complete.Flags {
2017-08-23 21:56:21 +00:00
return mergeAutocompleteFlags(c.Meta.AutocompleteFlags(FlagSetClient),
complete.Flags{
"-servers": complete.PredictNothing,
2017-08-23 22:52:31 +00:00
"-update-servers": complete.PredictAnything,
2017-08-23 21:56:21 +00:00
})
2017-08-18 15:09:52 +00:00
}
2018-03-21 00:37:28 +00:00
func (c *NodeConfigCommand) AutocompleteArgs() complete.Predictor {
2017-08-18 15:09:52 +00:00
return complete.PredictNothing
}