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 }