github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/uniter/runner/jujuc/leader-set.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package jujuc 5 6 import ( 7 "github.com/juju/cmd" 8 "github.com/juju/errors" 9 "github.com/juju/utils/keyvalues" 10 11 jujucmd "github.com/juju/juju/cmd" 12 ) 13 14 // leaderSetCommand implements the leader-set command. 15 type leaderSetCommand struct { 16 cmd.CommandBase 17 ctx Context 18 settings map[string]string 19 } 20 21 // NewLeaderSetCommand returns a new leaderSetCommand with the given context. 22 func NewLeaderSetCommand(ctx Context) (cmd.Command, error) { 23 return &leaderSetCommand{ctx: ctx}, nil 24 } 25 26 // Info is part of the cmd.Command interface. 27 func (c *leaderSetCommand) Info() *cmd.Info { 28 doc := ` 29 leader-set immediate writes the supplied key/value pairs to the controller, 30 which will then inform non-leader units of the change. It will fail if called 31 without arguments, or if called by a unit that is not currently application leader. 32 ` 33 return jujucmd.Info(&cmd.Info{ 34 Name: "leader-set", 35 Args: "<key>=<value> [...]", 36 Purpose: "write application leadership settings", 37 Doc: doc, 38 }) 39 } 40 41 // Init is part of the cmd.Command interface. 42 func (c *leaderSetCommand) Init(args []string) (err error) { 43 c.settings, err = keyvalues.Parse(args, true) 44 return 45 } 46 47 // Run is part of the cmd.Command interface. 48 func (c *leaderSetCommand) Run(_ *cmd.Context) error { 49 err := c.ctx.WriteLeaderSettings(c.settings) 50 return errors.Annotatef(err, "cannot write leadership settings") 51 }