github.com/kjdelisle/consul@v1.4.5/command/leave/leave.go (about)

     1  package leave
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  
     7  	"github.com/hashicorp/consul/command/flags"
     8  	"github.com/mitchellh/cli"
     9  )
    10  
    11  func New(ui cli.Ui) *cmd {
    12  	c := &cmd{UI: ui}
    13  	c.init()
    14  	return c
    15  }
    16  
    17  type cmd struct {
    18  	UI    cli.Ui
    19  	flags *flag.FlagSet
    20  	http  *flags.HTTPFlags
    21  	help  string
    22  }
    23  
    24  func (c *cmd) init() {
    25  	c.flags = flag.NewFlagSet("", flag.ContinueOnError)
    26  	c.http = &flags.HTTPFlags{}
    27  	flags.Merge(c.flags, c.http.ClientFlags())
    28  	c.help = flags.Usage(help, c.flags)
    29  }
    30  
    31  func (c *cmd) Run(args []string) int {
    32  	if err := c.flags.Parse(args); err != nil {
    33  		return 1
    34  	}
    35  	nonFlagArgs := c.flags.Args()
    36  	if len(nonFlagArgs) > 0 {
    37  		c.UI.Error(fmt.Sprintf("Error found unexpected args: %v", nonFlagArgs))
    38  		c.UI.Output(c.Help())
    39  		return 1
    40  	}
    41  
    42  	client, err := c.http.APIClient()
    43  	if err != nil {
    44  		c.UI.Error(fmt.Sprintf("Error connecting to Consul agent: %s", err))
    45  		return 1
    46  	}
    47  
    48  	if err := client.Agent().Leave(); err != nil {
    49  		c.UI.Error(fmt.Sprintf("Error leaving: %s", err))
    50  		return 1
    51  	}
    52  
    53  	c.UI.Output("Graceful leave complete")
    54  	return 0
    55  }
    56  
    57  func (c *cmd) Synopsis() string {
    58  	return synopsis
    59  }
    60  
    61  func (c *cmd) Help() string {
    62  	return c.help
    63  }
    64  
    65  const synopsis = "Gracefully leaves the Consul cluster and shuts down"
    66  const help = `
    67  Usage: consul leave [options]
    68  
    69    Causes the agent to gracefully leave the Consul cluster and shutdown.
    70  `