github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/cmd/juju/space/remove.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package space 5 6 import ( 7 "strings" 8 9 "github.com/juju/cmd" 10 "github.com/juju/errors" 11 "github.com/juju/names" 12 13 "github.com/juju/juju/cmd/modelcmd" 14 ) 15 16 // NewRemoveCommand returns a command used to remove a space. 17 func NewRemoveCommand() cmd.Command { 18 return modelcmd.Wrap(&removeCommand{}) 19 } 20 21 // removeCommand calls the API to remove an existing network space. 22 type removeCommand struct { 23 SpaceCommandBase 24 name string 25 } 26 27 const removeCommandDoc = ` 28 Removes an existing Juju network space with the given name. Any subnets 29 associated with the space will be transfered to the default space. 30 ` 31 32 // Info is defined on the cmd.Command interface. 33 func (c *removeCommand) Info() *cmd.Info { 34 return &cmd.Info{ 35 Name: "remove-space", 36 Args: "<name>", 37 Purpose: "Remove a network space", 38 Doc: strings.TrimSpace(removeCommandDoc), 39 } 40 } 41 42 // Init is defined on the cmd.Command interface. It checks the 43 // arguments for sanity and sets up the command to run. 44 func (c *removeCommand) Init(args []string) (err error) { 45 defer errors.DeferredAnnotatef(&err, "invalid arguments specified") 46 47 // Validate given name. 48 if len(args) == 0 { 49 return errors.New("space name is required") 50 } 51 givenName := args[0] 52 if !names.IsValidSpace(givenName) { 53 return errors.Errorf("%q is not a valid space name", givenName) 54 } 55 c.name = givenName 56 57 return cmd.CheckEmpty(args[1:]) 58 } 59 60 // Run implements Command.Run. 61 func (c *removeCommand) Run(ctx *cmd.Context) error { 62 return c.RunWithAPI(ctx, func(api SpaceAPI, ctx *cmd.Context) error { 63 // Remove the space. 64 err := api.RemoveSpace(c.name) 65 if err != nil { 66 return errors.Annotatef(err, "cannot remove space %q", c.name) 67 } 68 ctx.Infof("removed space %q", c.name) 69 return nil 70 }) 71 }