forked from toolshed/abra
		
	refactor: don't reinvent the wheel
This commit is contained in:
		| @ -2,19 +2,19 @@ package deploy | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"regexp" | ||||
| 	"sort" | ||||
| 	"strings" | ||||
|  | ||||
| 	appPkg "coopcloud.tech/abra/pkg/app" | ||||
| 	"coopcloud.tech/abra/pkg/client" | ||||
| 	"coopcloud.tech/abra/pkg/envfile" | ||||
| 	"coopcloud.tech/abra/pkg/formatter" | ||||
| 	"coopcloud.tech/abra/pkg/log" | ||||
| 	"coopcloud.tech/abra/pkg/recipe" | ||||
| 	"coopcloud.tech/abra/pkg/secret" | ||||
|  | ||||
| 	"github.com/distribution/reference" | ||||
| 	composetypes "github.com/docker/cli/cli/compose/types" | ||||
| 	"github.com/docker/docker/api/types/swarm" | ||||
| 	dockerClient "github.com/docker/docker/client" | ||||
| @ -82,19 +82,6 @@ func GetConfigsForStack(cl *dockerClient.Client, app appPkg.App) (map[string]str | ||||
| 	return configs, nil | ||||
| } | ||||
|  | ||||
| func GetImageNameAndTag(imageName string) (string, string, error) { | ||||
| 	imageParts := regexp.MustCompile("^([^:]*):([^@]*)@?").FindSubmatch([]byte(imageName)) | ||||
|  | ||||
| 	if len(imageParts) == 0 { | ||||
| 		return "", "", errors.New("can't determine image version for image '%s'") | ||||
| 	} | ||||
|  | ||||
| 	imageBaseName := string(imageParts[1]) | ||||
| 	imageTag := string(imageParts[2]) | ||||
|  | ||||
| 	return imageBaseName, imageTag, nil | ||||
| } | ||||
|  | ||||
| // GetImagesForStack retrieves all Docker images for services in a given stack. | ||||
| func GetImagesForStack(cl *dockerClient.Client, app appPkg.App) (map[string]string, error) { | ||||
| 	filters, err := app.Filters(false, false) | ||||
| @ -116,12 +103,15 @@ func GetImagesForStack(cl *dockerClient.Client, app appPkg.App) (map[string]stri | ||||
| 		if service.Spec.TaskTemplate.ContainerSpec != nil { | ||||
| 			imageName := service.Spec.TaskTemplate.ContainerSpec.Image | ||||
|  | ||||
| 			imageBaseName, imageTag, err := GetImageNameAndTag(imageName) | ||||
| 			imageParsed, err := reference.ParseNormalizedNamed(imageName) | ||||
| 			if err != nil { | ||||
| 				log.Warn(err) | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			imageBaseName := reference.Path(imageParsed) | ||||
| 			imageTag := imageParsed.(reference.NamedTagged).Tag() | ||||
|  | ||||
| 			existingImageVersion, ok := images[imageBaseName] | ||||
| 			if !ok { | ||||
| 				// First time seeing this, add to map | ||||
| @ -210,7 +200,10 @@ func GatherImagesForDeploy(cl *dockerClient.Client, app appPkg.App, compose *com | ||||
| 	newImages := make(map[string]string) | ||||
|  | ||||
| 	for _, service := range compose.Services { | ||||
| 		imageBaseName, imageTag, err := GetImageNameAndTag(service.Image) | ||||
| 		imageParsed, err := reference.ParseNormalizedNamed(service.Image) | ||||
| 		imageBaseName := reference.Path(imageParsed) | ||||
| 		imageTag := imageParsed.(reference.NamedTagged).Tag() | ||||
|  | ||||
| 		if err != nil { | ||||
| 			log.Warn(err) | ||||
| 			continue | ||||
| @ -233,13 +226,13 @@ func GatherImagesForDeploy(cl *dockerClient.Client, app appPkg.App, compose *com | ||||
| 		if currentVersion, exists := currentImages[newImageName]; exists { | ||||
| 			if currentVersion == newImageVersion { | ||||
| 				if showUnchanged { | ||||
| 					imageInfo = append(imageInfo, fmt.Sprintf("%s: %s (unchanged)", newImageName, newImageVersion)) | ||||
| 					imageInfo = append(imageInfo, fmt.Sprintf("%s: %s (unchanged)", formatter.StripTagMeta(newImageName), newImageVersion)) | ||||
| 				} | ||||
| 			} else { | ||||
| 				imageInfo = append(imageInfo, fmt.Sprintf("%s: %s → %s", newImageName, currentVersion, newImageVersion)) | ||||
| 				imageInfo = append(imageInfo, fmt.Sprintf("%s: %s → %s", formatter.StripTagMeta(newImageName), currentVersion, newImageVersion)) | ||||
| 			} | ||||
| 		} else { | ||||
| 			imageInfo = append(imageInfo, fmt.Sprintf("%s: %s (new)", newImageName, newImageVersion)) | ||||
| 			imageInfo = append(imageInfo, fmt.Sprintf("%s: %s (new)", formatter.StripTagMeta(newImageName), newImageVersion)) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user