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  }