Catalogue package had to be merged into the recipe package due to too many circular import errors. Also, use https url for cloning, assume folks don't have ssh setup by default (the whole reason for the refactor).
97 lines
2.4 KiB
Go
97 lines
2.4 KiB
Go
package app
|
|
|
|
import (
|
|
"strings"
|
|
|
|
abraFormatter "coopcloud.tech/abra/cli/formatter"
|
|
"coopcloud.tech/abra/cli/internal"
|
|
"coopcloud.tech/abra/pkg/autocomplete"
|
|
"coopcloud.tech/abra/pkg/client"
|
|
"coopcloud.tech/abra/pkg/recipe"
|
|
"coopcloud.tech/abra/pkg/upstream/stack"
|
|
"github.com/docker/distribution/reference"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
// getImagePath returns the image name
|
|
func getImagePath(image string) (string, error) {
|
|
img, err := reference.ParseNormalizedNamed(image)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
path := reference.Path(img)
|
|
if strings.Contains(path, "library") {
|
|
path = strings.Split(path, "/")[1]
|
|
}
|
|
|
|
logrus.Debugf("parsed %s from %s", path, image)
|
|
|
|
return path, nil
|
|
}
|
|
|
|
var appVersionCommand = &cli.Command{
|
|
Name: "version",
|
|
Aliases: []string{"v"},
|
|
Usage: "Show app versions",
|
|
Description: `
|
|
This command shows all information about versioning related to a deployed app.
|
|
This includes the individual image names, tags and digests. But also the Co-op
|
|
Cloud recipe version.
|
|
`,
|
|
Action: func(c *cli.Context) error {
|
|
app := internal.ValidateApp(c)
|
|
stackName := app.StackName()
|
|
|
|
cl, err := client.New(app.Server)
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
|
|
logrus.Debugf("checking whether %s is already deployed", stackName)
|
|
|
|
isDeployed, deployedVersion, err := stack.IsDeployed(c.Context, cl, stackName)
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
|
|
if deployedVersion == "" {
|
|
logrus.Fatalf("failed to determine version of deployed %s", app.Name)
|
|
}
|
|
|
|
if !isDeployed {
|
|
logrus.Fatalf("%s is not deployed?", app.Name)
|
|
}
|
|
|
|
recipeMeta, err := recipe.GetRecipeMeta(app.Type)
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
|
|
versionsMeta := make(map[string]recipe.ServiceMeta)
|
|
for _, recipeVersion := range recipeMeta.Versions {
|
|
if currentVersion, exists := recipeVersion[deployedVersion]; exists {
|
|
versionsMeta = currentVersion
|
|
}
|
|
}
|
|
|
|
if len(versionsMeta) == 0 {
|
|
logrus.Fatalf("could not retrieve deployed version (%s) from recipe catalogue?", deployedVersion)
|
|
}
|
|
|
|
tableCol := []string{"version", "service", "image", "digest"}
|
|
table := abraFormatter.CreateTable(tableCol)
|
|
table.SetAutoMergeCellsByColumnIndex([]int{0})
|
|
|
|
for serviceName, versionMeta := range versionsMeta {
|
|
table.Append([]string{deployedVersion, serviceName, versionMeta.Image, versionMeta.Digest})
|
|
}
|
|
|
|
table.Render()
|
|
|
|
return nil
|
|
},
|
|
BashComplete: autocomplete.AppNameComplete,
|
|
}
|