github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/cmd/juju/cachedimages/remove.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for infos.
     3  
     4  package cachedimages
     5  
     6  import (
     7  	"github.com/juju/cmd"
     8  	"github.com/juju/errors"
     9  	"github.com/juju/gnuflag"
    10  
    11  	"github.com/juju/juju/cmd/modelcmd"
    12  )
    13  
    14  const removeCommandDoc = `
    15  Remove cached os images in the Juju model.
    16  
    17  Images are identified by:
    18    Kind         eg "lxd"
    19    Series       eg "xenial"
    20    Architecture eg "amd64"
    21  
    22  Examples:
    23    # Remove cached lxd image for xenial amd64.
    24    juju remove-cached-images --kind lxd --series xenial --arch amd64
    25  `
    26  
    27  // NewRemoveCommand returns a command used to remove cached images.
    28  func NewRemoveCommand() cmd.Command {
    29  	return modelcmd.Wrap(&removeCommand{})
    30  }
    31  
    32  // removeCommand shows the images in the Juju server.
    33  type removeCommand struct {
    34  	CachedImagesCommandBase
    35  	Kind, Series, Arch string
    36  }
    37  
    38  // Info implements Command.Info.
    39  func (c *removeCommand) Info() *cmd.Info {
    40  	return &cmd.Info{
    41  		Name:    "remove-cached-images",
    42  		Purpose: "Remove cached OS images.",
    43  		Doc:     removeCommandDoc,
    44  	}
    45  }
    46  
    47  // SetFlags implements Command.SetFlags.
    48  func (c *removeCommand) SetFlags(f *gnuflag.FlagSet) {
    49  	c.CachedImagesCommandBase.SetFlags(f)
    50  	f.StringVar(&c.Kind, "kind", "", "The image kind to remove eg lxd")
    51  	f.StringVar(&c.Series, "series", "", "The series of the image to remove eg xenial")
    52  	f.StringVar(&c.Arch, "arch", "", "The architecture of the image to remove eg amd64")
    53  }
    54  
    55  // Init implements Command.Init.
    56  func (c *removeCommand) Init(args []string) (err error) {
    57  	if c.Kind == "" {
    58  		return errors.New("image kind must be specified")
    59  	}
    60  	if c.Series == "" {
    61  		return errors.New("image series must be specified")
    62  	}
    63  	if c.Arch == "" {
    64  		return errors.New("image architecture must be specified")
    65  	}
    66  	return cmd.CheckEmpty(args)
    67  }
    68  
    69  // RemoveImageAPI defines the imagemanager API methods that the remove command uses.
    70  type RemoveImageAPI interface {
    71  	DeleteImage(kind, series, arch string) error
    72  	Close() error
    73  }
    74  
    75  var getRemoveImageAPI = func(p *CachedImagesCommandBase) (RemoveImageAPI, error) {
    76  	return p.NewImagesManagerClient()
    77  }
    78  
    79  // Run implements Command.Run.
    80  func (c *removeCommand) Run(ctx *cmd.Context) (err error) {
    81  	client, err := getRemoveImageAPI(&c.CachedImagesCommandBase)
    82  	if err != nil {
    83  		return err
    84  	}
    85  	defer client.Close()
    86  
    87  	return client.DeleteImage(c.Kind, c.Series, c.Arch)
    88  }