1package leave
2
3import (
4	"flag"
5	"fmt"
6
7	"github.com/hashicorp/consul/command/flags"
8	"github.com/mitchellh/cli"
9)
10
11func New(ui cli.Ui) *cmd {
12	c := &cmd{UI: ui}
13	c.init()
14	return c
15}
16
17type cmd struct {
18	UI    cli.Ui
19	flags *flag.FlagSet
20	http  *flags.HTTPFlags
21	help  string
22}
23
24func (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
31func (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
57func (c *cmd) Synopsis() string {
58	return synopsis
59}
60
61func (c *cmd) Help() string {
62	return c.help
63}
64
65const synopsis = "Gracefully leaves the Consul cluster and shuts down"
66const help = `
67Usage: consul leave [options]
68
69  Causes the agent to gracefully leave the Consul cluster and shutdown.
70`
71