github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/plugins/juju-metadata/deleteimage.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package main
     5  
     6  import (
     7  	"github.com/juju/cmd"
     8  	"github.com/juju/errors"
     9  	"github.com/juju/gnuflag"
    10  
    11  	jujucmd "github.com/juju/juju/cmd"
    12  	"github.com/juju/juju/cmd/modelcmd"
    13  )
    14  
    15  func newDeleteImageMetadataCommand() cmd.Command {
    16  	deleteCmd := &deleteImageMetadataCommand{}
    17  	deleteCmd.newAPIFunc = func() (MetadataDeleteAPI, error) {
    18  		return deleteCmd.NewImageMetadataAPI()
    19  	}
    20  	return modelcmd.Wrap(deleteCmd)
    21  }
    22  
    23  const deleteImageCommandDoc = `
    24  Delete image metadata from Juju environment.
    25  
    26  This command takes only one positional argument - an image id.
    27  
    28  arguments:
    29  image-id
    30     image identifier
    31  `
    32  
    33  // deleteImageMetadataCommand deletes image metadata from Juju environment.
    34  type deleteImageMetadataCommand struct {
    35  	cloudImageMetadataCommandBase
    36  
    37  	newAPIFunc func() (MetadataDeleteAPI, error)
    38  
    39  	ImageId string
    40  }
    41  
    42  // Init implements Command.Init.
    43  func (c *deleteImageMetadataCommand) Init(args []string) (err error) {
    44  	if len(args) == 0 {
    45  		return errors.New("image ID must be supplied when deleting image metadata")
    46  	}
    47  	if len(args) != 1 {
    48  		return errors.New("only one image ID can be supplied as an argument to this command")
    49  	}
    50  	c.ImageId = args[0]
    51  	return nil
    52  }
    53  
    54  // Info implements Command.Info.
    55  func (c *deleteImageMetadataCommand) Info() *cmd.Info {
    56  	return jujucmd.Info(&cmd.Info{
    57  		Name:    "delete-image",
    58  		Purpose: "deletes image metadata from environment",
    59  		Doc:     deleteImageCommandDoc,
    60  	})
    61  }
    62  
    63  // SetFlags implements Command.SetFlags.
    64  func (c *deleteImageMetadataCommand) SetFlags(f *gnuflag.FlagSet) {
    65  	c.cloudImageMetadataCommandBase.SetFlags(f)
    66  }
    67  
    68  // Run implements Command.Run.
    69  func (c *deleteImageMetadataCommand) Run(ctx *cmd.Context) (err error) {
    70  	api, err := c.newAPIFunc()
    71  	if err != nil {
    72  		return err
    73  	}
    74  	defer api.Close()
    75  
    76  	err = api.Delete(c.ImageId)
    77  	if err != nil {
    78  		return err
    79  	}
    80  	return nil
    81  }
    82  
    83  // MetadataDeleteAPI defines the API methods that delete image metadata command uses.
    84  type MetadataDeleteAPI interface {
    85  	Close() error
    86  	Delete(imageId string) error
    87  }