forked from toolshed/abra
.chglog
.gitea
cli
app
app.go
backup.go
check.go
config.go
cp.go
deploy.go
list.go
logs.go
new.go
ps.go
remove.go
restore.go
rollback.go
run.go
secret.go
undeploy.go
version.go
volume.go
catalogue
formatter
internal
recipe
server
cli.go
upgrade.go
version.go
cmd
pkg
scripts
tests
.drone.yml
.envrc.sample
.gitignore
.goreleaser.yml
Makefile
README.md
go.mod
go.sum
102 lines
2.3 KiB
Go
102 lines
2.3 KiB
Go
package app
|
|
|
|
import (
|
|
"sort"
|
|
|
|
abraFormatter "coopcloud.tech/abra/cli/formatter"
|
|
"coopcloud.tech/abra/pkg/config"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
var status bool
|
|
var statusFlag = &cli.BoolFlag{
|
|
Name: "status",
|
|
Aliases: []string{"S"},
|
|
Value: false,
|
|
Usage: "Show app deployment status",
|
|
Destination: &status,
|
|
}
|
|
|
|
var appType string
|
|
var typeFlag = &cli.StringFlag{
|
|
Name: "type",
|
|
Aliases: []string{"t"},
|
|
Value: "",
|
|
Usage: "Show apps of a specific type",
|
|
Destination: &appType,
|
|
}
|
|
|
|
var listAppServer string
|
|
var listAppServerFlag = &cli.StringFlag{
|
|
Name: "server",
|
|
Aliases: []string{"s"},
|
|
Value: "",
|
|
Usage: "Show apps of a specific server",
|
|
Destination: &listAppServer,
|
|
}
|
|
|
|
var appListCommand = &cli.Command{
|
|
Name: "list",
|
|
Usage: "List all managed apps",
|
|
Description: `
|
|
This command looks at your local file system listing of apps and servers (e.g.
|
|
in ~/.abra/) to generate a report of all your apps.
|
|
|
|
By passing the "--status/-S" flag, you can query all your servers for the
|
|
actual live deployment status. Depending on how many servers you manage, this
|
|
can take some time.
|
|
`,
|
|
Aliases: []string{"ls"},
|
|
Flags: []cli.Flag{
|
|
statusFlag,
|
|
listAppServerFlag,
|
|
typeFlag,
|
|
},
|
|
Action: func(c *cli.Context) error {
|
|
appFiles, err := config.LoadAppFiles(listAppServer)
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
|
|
apps, err := config.GetApps(appFiles)
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
sort.Sort(config.ByServerAndType(apps))
|
|
|
|
statuses := map[string]string{}
|
|
tableCol := []string{"Server", "Type", "Domain"}
|
|
if status {
|
|
tableCol = append(tableCol, "Status")
|
|
statuses, err = config.GetAppStatuses(appFiles)
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
}
|
|
|
|
table := abraFormatter.CreateTable(tableCol)
|
|
table.SetAutoMergeCellsByColumnIndex([]int{0})
|
|
|
|
for _, app := range apps {
|
|
var tableRow []string
|
|
if app.Type == appType || appType == "" {
|
|
// If type flag is set, check for it, if not, Type == ""
|
|
tableRow = []string{app.Server, app.Type, app.Domain}
|
|
if status {
|
|
if status, ok := statuses[app.StackName()]; ok {
|
|
tableRow = append(tableRow, status)
|
|
} else {
|
|
tableRow = append(tableRow, "unknown")
|
|
}
|
|
}
|
|
}
|
|
table.Append(tableRow)
|
|
}
|
|
|
|
table.Render()
|
|
|
|
return nil
|
|
},
|
|
}
|