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 }, }