github.com/hhsnopek/up@v0.1.1/internal/cli/stack/stack.go (about) 1 package stack 2 3 import ( 4 "fmt" 5 6 "github.com/tj/go-prompt" 7 "github.com/tj/kingpin" 8 9 "github.com/apex/up/internal/cli/root" 10 "github.com/apex/up/internal/stats" 11 ) 12 13 func init() { 14 cmd := root.Command("stack", "Stack resource management.") 15 cmd.Example(`up stack`, "Create or update the configured resources.") 16 delete(cmd) 17 show(cmd) 18 } 19 20 func delete(cmd *kingpin.CmdClause) { 21 c := cmd.Command("delete", "Delete configured resources.") 22 c.Example(`up stack delete`, "Delete stack with confirmation prompt.") 23 c.Example(`up stack delete --force`, "Delete stack without confirmation prompt.") 24 c.Example(`up stack delete --wait`, "Wait for deletion to complete before exiting.") 25 c.Example(`up stack delete -fw`, "Force and wait for deletion.") 26 27 force := c.Flag("force", "Force deletion without prompt.").Short('f').Bool() 28 wait := c.Flag("wait", "Wait for deletion to complete.").Short('w').Bool() 29 30 c.Action(func(_ *kingpin.ParseContext) error { 31 name := root.Config.Name 32 33 stats.Track("Delete Stack", map[string]interface{}{ 34 "force": *force, 35 "wait": *wait, 36 }) 37 38 if !*force && !prompt.Confirm(" Really destroy the stack %q? ", name) { 39 fmt.Println("aborting") 40 return nil 41 } 42 43 // TODO: multi-region 44 return root.Project.DeleteStack(root.Config.Regions[0], *wait) 45 }) 46 } 47 48 // TODO: rename? decide on conventions 49 // TODO: make the default? 50 func show(cmd *kingpin.CmdClause) { 51 c := cmd.Command("show", "Show the status of the stack.").Hidden() 52 53 c.Action(func(_ *kingpin.ParseContext) error { 54 stats.Track("Show Stack", nil) 55 56 // TODO: multi-region 57 return root.Project.ShowStack(root.Config.Regions[0]) 58 }) 59 }