launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/cmd/juju/resolved.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package main
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"launchpad.net/gnuflag"
    10  
    11  	"launchpad.net/juju-core/cmd"
    12  	"launchpad.net/juju-core/juju"
    13  	"launchpad.net/juju-core/names"
    14  )
    15  
    16  // ResolvedCommand marks a unit in an error state as ready to continue.
    17  type ResolvedCommand struct {
    18  	cmd.EnvCommandBase
    19  	UnitName string
    20  	Retry    bool
    21  }
    22  
    23  func (c *ResolvedCommand) Info() *cmd.Info {
    24  	return &cmd.Info{
    25  		Name:    "resolved",
    26  		Args:    "<unit>",
    27  		Purpose: "marks unit errors resolved",
    28  	}
    29  }
    30  
    31  func (c *ResolvedCommand) SetFlags(f *gnuflag.FlagSet) {
    32  	c.EnvCommandBase.SetFlags(f)
    33  	f.BoolVar(&c.Retry, "r", false, "re-execute failed hooks")
    34  	f.BoolVar(&c.Retry, "retry", false, "")
    35  }
    36  
    37  func (c *ResolvedCommand) Init(args []string) error {
    38  	if len(args) > 0 {
    39  		c.UnitName = args[0]
    40  		if !names.IsUnit(c.UnitName) {
    41  			return fmt.Errorf("invalid unit name %q", c.UnitName)
    42  		}
    43  		args = args[1:]
    44  	} else {
    45  		return fmt.Errorf("no unit specified")
    46  	}
    47  	return cmd.CheckEmpty(args)
    48  }
    49  
    50  func (c *ResolvedCommand) Run(_ *cmd.Context) error {
    51  	client, err := juju.NewAPIClientFromName(c.EnvName)
    52  	if err != nil {
    53  		return err
    54  	}
    55  	defer client.Close()
    56  	return client.Resolved(c.UnitName, c.Retry)
    57  }