github.com/jmitchell/nomad@v0.1.3-0.20151007230021-7ab84c2862d8/command/node_drain.go (about) 1 package command 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 type NodeDrainCommand struct { 9 Meta 10 } 11 12 func (c *NodeDrainCommand) Help() string { 13 helpText := ` 14 Usage: nomad node-drain [options] <node> 15 16 Toggles node draining on a specified node. It is required 17 that either -enable or -disable is specified, but not both. 18 19 General Options: 20 21 ` + generalOptionsUsage() + ` 22 23 Node Drain Options: 24 25 -disable 26 Disable draining for the specified node. 27 28 -enable 29 Enable draining for the specified node. 30 ` 31 return strings.TrimSpace(helpText) 32 } 33 34 func (c *NodeDrainCommand) Synopsis() string { 35 return "Toggle drain mode on a given node" 36 } 37 38 func (c *NodeDrainCommand) Run(args []string) int { 39 var enable, disable bool 40 41 flags := c.Meta.FlagSet("node-drain", FlagSetClient) 42 flags.Usage = func() { c.Ui.Output(c.Help()) } 43 flags.BoolVar(&enable, "enable", false, "Enable drain mode") 44 flags.BoolVar(&disable, "disable", false, "Disable drain mode") 45 46 if err := flags.Parse(args); err != nil { 47 return 1 48 } 49 50 // Check that we got either enable or disable, but not both. 51 if (enable && disable) || (!enable && !disable) { 52 c.Ui.Error(c.Help()) 53 return 1 54 } 55 56 // Check that we got a node ID 57 args = flags.Args() 58 if len(args) != 1 { 59 c.Ui.Error(c.Help()) 60 return 1 61 } 62 nodeID := args[0] 63 64 // Get the HTTP client 65 client, err := c.Meta.Client() 66 if err != nil { 67 c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err)) 68 return 1 69 } 70 71 // Toggle node draining 72 if _, err := client.Nodes().ToggleDrain(nodeID, enable, nil); err != nil { 73 c.Ui.Error(fmt.Sprintf("Error toggling drain mode: %s", err)) 74 return 1 75 } 76 return 0 77 }