mirror of
https://github.com/foomo/squadron.git
synced 2025-10-16 12:35:42 +00:00
feat: add simple status command
This commit is contained in:
parent
ec5c42fc0f
commit
e5525f8047
@ -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
52
cmd/actions/status.go
Normal 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)
|
||||
}
|
||||
44
squadron.go
44
squadron.go
@ -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())
|
||||
|
||||
Loading…
Reference in New Issue
Block a user