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

View File

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