feat: add simple status command

This commit is contained in:
franklin 2021-08-05 13:00:03 +02:00
parent ec5c42fc0f
commit e5525f8047
3 changed files with 96 additions and 2 deletions

View File

@ -41,7 +41,7 @@ func init() {
rootCmd.PersistentFlags().BoolVarP(&flagVerbose, "verbose", "v", false, "show more output")
rootCmd.PersistentFlags().StringSliceVarP(&flagFiles, "file", "f", []string{"squadron.yaml"}, "specify alternative squadron files")
rootCmd.AddCommand(upCmd, downCmd, buildCmd, pushCmd, listCmd, generateCmd, configCmd, versionCmd, completionCmd, templateCmd)
rootCmd.AddCommand(upCmd, downCmd, buildCmd, pushCmd, listCmd, generateCmd, statusCmd, configCmd, versionCmd, completionCmd, templateCmd)
}
func Execute() {

52
cmd/actions/status.go Normal file
View File

@ -0,0 +1,52 @@
package actions
import (
"github.com/spf13/cobra"
"github.com/foomo/squadron"
)
func init() {
statusCmd.Flags().StringVarP(&flagNamespace, "namespace", "n", "default", "specifies the namespace")
}
var statusCmd = &cobra.Command{
Use: "status [UNIT...]",
Short: "installs the squadron or given units",
Example: " squadron status frontend backend --namespace demo --build --push -- --dry-run",
RunE: func(cmd *cobra.Command, args []string) error {
return status(args, cwd, flagNamespace, flagFiles)
},
}
func status(args []string, cwd, namespace string, files []string) error {
sq := squadron.New(cwd, namespace, files)
if err := sq.MergeConfigFiles(); err != nil {
return err
}
args, helmArgs := parseExtraArgs(args)
unitsNames, err := parseUnitNames(args, sq.GetConfig().Units)
if err != nil {
return err
}
if unitsNames != nil {
if err := sq.FilterConfig(unitsNames); err != nil {
return err
}
}
if err := sq.RenderConfig(); err != nil {
return err
}
units, err := parseUnitArgs(args, sq.GetConfig().Units)
if err != nil {
return err
}
return sq.Status(units, helmArgs)
}

View File

@ -171,9 +171,9 @@ func (sq *Squadron) Package() error {
}
func (sq *Squadron) Down(units map[string]Unit, helmArgs []string) error {
stdErr := bytes.NewBuffer([]byte{})
if sq.c.Unite {
logrus.Infof("running helm uninstall for: %s", sq.chartPath())
stdErr := bytes.NewBuffer([]byte{})
if _, err := util.NewHelmCommand().Args("uninstall", sq.name).
Stderr(stdErr).
Stdout(os.Stdout).
@ -188,6 +188,7 @@ func (sq *Squadron) Down(units map[string]Unit, helmArgs []string) error {
// todo use release prefix on install: squadron name or --name
rName := fmt.Sprintf("%s-%s", sq.name, uName)
logrus.Infof("running helm uninstall for: %s", uName)
stdErr := bytes.NewBuffer([]byte{})
if _, err := util.NewHelmCommand().Args("uninstall", rName).
Stderr(stdErr).
Stdout(os.Stdout).
@ -241,6 +242,47 @@ func (sq *Squadron) Diff(units map[string]Unit, helmArgs []string) (string, erro
return "", nil
}
func (sq *Squadron) Status(units map[string]Unit, helmArgs []string) error {
stdOut := bytes.NewBuffer([]byte{})
if sq.c.Unite {
stdOut.WriteString("==== " + sq.name + strings.Repeat("=", 20-len(sq.name)) + "\n")
logrus.Infof("running helm status for chart: %s", sq.chartPath())
stdErr := bytes.NewBuffer([]byte{})
if _, err := util.NewHelmCommand().Args("status", sq.name).
Stderr(stdErr).
Stdout(stdOut).
Args("--namespace", sq.namespace).
Args(helmArgs...).
Run(); err != nil &&
string(bytes.TrimSpace(stdErr.Bytes())) == "Error: release: not found" {
stdOut.WriteString("NAME: " + sq.name + "\n")
stdOut.WriteString("STATUS: not installed\n")
} else if err != nil {
return err
}
}
for uName := range units {
stdOut.WriteString("==== " + uName + " " + strings.Repeat("=", 60-len(uName)) + "\n")
// todo use release prefix on install: squadron name or --name
rName := fmt.Sprintf("%s-%s", sq.name, uName)
logrus.Infof("running helm status for %s", uName)
stdErr := bytes.NewBuffer([]byte{})
if _, err := util.NewHelmCommand().Args("status", rName).
Stderr(stdErr).
Stdout(stdOut).
Args("--namespace", sq.namespace).
Args(helmArgs...).Run(); err != nil &&
string(bytes.TrimSpace(stdErr.Bytes())) == "Error: release: not found" {
stdOut.WriteString("NAME: " + rName + "\n")
stdOut.WriteString("STATUS: not installed\n")
} else if err != nil {
return err
}
}
fmt.Println(strings.ReplaceAll(stdOut.String(), "\\n", "\n"))
return nil
}
func (sq *Squadron) Up(units map[string]Unit, helmArgs []string) error {
if sq.c.Unite {
logrus.Infof("running helm upgrade for chart: %s", sq.chartPath())