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  }