github.com/huiliang/nomad@v0.2.1-0.20151124023127-7a8b664699ff/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  }