github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/cmd/charm-admin/deletecharm.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 "github.com/juju/charm" 10 "github.com/juju/charmstore" 11 "github.com/juju/cmd" 12 "launchpad.net/gnuflag" 13 ) 14 15 type DeleteCharmCommand struct { 16 ConfigCommand 17 Url string 18 } 19 20 func (c *DeleteCharmCommand) Info() *cmd.Info { 21 return &cmd.Info{ 22 Name: "delete-charm", 23 Purpose: "delete a published charm from the charm store", 24 } 25 } 26 27 func (c *DeleteCharmCommand) SetFlags(f *gnuflag.FlagSet) { 28 c.ConfigCommand.SetFlags(f) 29 f.StringVar(&c.Url, "url", "", "charm URL") 30 } 31 32 func (c *DeleteCharmCommand) Init(args []string) error { 33 // Check flags 34 err := c.ConfigCommand.Init(args) 35 if err != nil { 36 return err 37 } 38 if c.Url == "" { 39 return fmt.Errorf("--url is required") 40 } 41 return nil 42 } 43 44 func (c *DeleteCharmCommand) Run(ctx *cmd.Context) error { 45 // Read config 46 err := c.ConfigCommand.ReadConfig(ctx) 47 if err != nil { 48 return err 49 } 50 51 // Parse the charm URL 52 charmUrl, err := charm.ParseURL(c.Url) 53 if err != nil { 54 return err 55 } 56 57 // Open the charm store storage 58 s, err := charmstore.Open(c.Config.MongoURL) 59 if err != nil { 60 return err 61 } 62 defer s.Close() 63 64 // Delete the charm by URL 65 _, err = s.DeleteCharm(charmUrl) 66 if err != nil { 67 return err 68 } 69 fmt.Fprintln(ctx.Stdout, "Charm", charmUrl, "deleted.") 70 return nil 71 } 72 73 func (c *DeleteCharmCommand) AllowInterspersedFlags() bool { 74 return true 75 }