Example #1
0
func (c *UnlockCommand) Run(args []string) int {
	var sessionId string

	c.Consul = new(ConsulFlags)
	cmdFlags := NewFlagSet(c.Consul)
	cmdFlags.StringVar(&sessionId, "session", "", "")
	cmdFlags.Usage = func() { c.UI.Output(c.Help()) }

	if err := cmdFlags.Parse(args); err != nil {
		return 1
	}

	if sessionId == "" {
		c.UI.Error("Session ID must be provided")
		c.UI.Error("")
		c.UI.Error(c.Help())
		return 1
	}

	extra := cmdFlags.Args()
	if len(extra) < 1 {
		c.UI.Error("Key path must be specified")
		c.UI.Error("")
		c.UI.Error(c.Help())
		return 1
	}

	path := extra[0]

	consul, err := NewConsulClient(c.Consul, &c.UI)
	if err != nil {
		c.UI.Error(err.Error())
		return 1
	}
	client := consul.KV()

	kv := new(consulapi.KVPair)
	kv.Key = path
	kv.Session = sessionId
	kv.Flags = LockFlagValue

	success, _, err := client.Release(kv, nil)
	if err != nil {
		c.UI.Error(err.Error())
		return 1
	}

	if !success {
		return 1
	}

	return 0
}