refactor: support listing unknown versions

This commit is contained in:
decentral1se 2021-08-25 14:06:42 +02:00
parent c5bb680fed
commit b34acefa21
No known key found for this signature in database
GPG Key ID: 5E2EF5A63E3718CC
2 changed files with 35 additions and 13 deletions

View File

@ -14,6 +14,19 @@ import (
"github.com/urfave/cli/v2" "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(image, "library") {
image = strings.Split(image, "/")[1]
}
return path, nil
}
// parseVersionLabel parses a $STACK_NAME_$SERVICE_NAME service label // parseVersionLabel parses a $STACK_NAME_$SERVICE_NAME service label
func parseServiceName(label string) string { func parseServiceName(label string) string {
idx := strings.LastIndex(label, "_") idx := strings.LastIndex(label, "_")
@ -63,22 +76,33 @@ var appVersionCommand = &cli.Command{
tableCol := []string{"Name", "Image", "Version", "Digest"} tableCol := []string{"Name", "Image", "Version", "Digest"}
table := abraFormatter.CreateTable(tableCol) table := abraFormatter.CreateTable(tableCol)
statuses := make(map[string]stack.StackStatus)
for range compose.Services { for range compose.Services {
status := <-ch status := <-ch
for _, service := range status.Services { if len(status.Services) > 0 {
serviceName := parseServiceName(service.Spec.Name) serviceName := parseServiceName(status.Services[0].Spec.Name)
label := fmt.Sprintf("coop-cloud.%s.%s.version", appEnv.StackName(), serviceName) statuses[serviceName] = status
version, digest := parseVersionLabel(service.Spec.Labels[label]) }
img, err := reference.ParseNormalizedNamed(service.Spec.Labels["com.docker.stack.image"]) }
for _, service := range compose.Services {
if status, ok := statuses[service.Name]; ok {
statusService := status.Services[0]
label := fmt.Sprintf("coop-cloud.%s.%s.version", appEnv.StackName(), service.Name)
version, digest := parseVersionLabel(statusService.Spec.Labels[label])
image, err := getImagePath(statusService.Spec.Labels["com.docker.stack.image"])
if err != nil { if err != nil {
logrus.Fatal(err) logrus.Fatal(err)
} }
image := reference.Path(img) table.Append([]string{service.Name, image, version, digest})
if strings.Contains(image, "library") { continue
image = strings.Split(image, "/")[1]
}
table.Append([]string{serviceName, image, version, digest})
} }
image, err := getImagePath(service.Image)
if err != nil {
logrus.Fatal(err)
}
table.Append([]string{service.Name, image, "?", "?"})
} }
table.Render() table.Render()

View File

@ -209,9 +209,7 @@ func GetAppStatuses(appFiles AppFiles) (map[string]string, error) {
servers := appFiles.GetServers() servers := appFiles.GetServers()
ch := make(chan stack.StackStatus, len(servers)) ch := make(chan stack.StackStatus, len(servers))
for _, server := range servers { for _, server := range servers {
go func(s string) { go func(s string) { ch <- stack.GetAllDeployedServices(s) }(server)
ch <- stack.GetAllDeployedServices(s)
}(server)
} }
statuses := map[string]string{} statuses := map[string]string{}