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 }