refactor: support listing unknown versions
This commit is contained in:
parent
c5bb680fed
commit
b34acefa21
|
@ -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()
|
||||||
|
|
|
@ -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{}
|
||||||
|
|
Loading…
Reference in New Issue