Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions pkg/image/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"time"

"github.com/argoproj-labs/argocd-image-updater/pkg/tag"
"github.com/distribution/distribution/v3/reference"
)

type ContainerImage struct {
Expand All @@ -22,6 +23,36 @@ type ContainerImageList []*ContainerImage

// NewFromIdentifier parses an image identifier and returns a populated ContainerImage
func NewFromIdentifier(identifier string) *ContainerImage {
imgRef := identifier
alias := ""
if strings.Contains(identifier, "=") {
n := strings.SplitN(identifier, "=", 2)
imgRef = n[1]
alias = n[0]
}
if parsed, err := reference.ParseNormalizedNamed(imgRef); err == nil {
img := ContainerImage{}
img.RegistryURL = reference.Domain(parsed)
// remove default registry for backwards-compatibility
if img.RegistryURL == "docker.io" {
img.RegistryURL = ""
}
img.ImageAlias = alias
img.ImageName = reference.Path(parsed)
if digested, ok := parsed.(reference.Digested); ok {
img.ImageTag = &tag.ImageTag{
TagDigest: string(digested.Digest()),
}
} else if tagged, ok := parsed.(reference.Tagged); ok {
img.ImageTag = &tag.ImageTag{
TagName: tagged.Tag(),
}
}
img.original = identifier
return &img
}

// if distribution couldn't parse it, fall back to the legacy parsing logic
img := ContainerImage{}
img.RegistryURL = getRegistryFromIdentifier(identifier)
img.ImageAlias, img.ImageName, img.ImageTag = getImageTagFromIdentifier(identifier)
Expand Down
7 changes: 7 additions & 0 deletions pkg/image/image_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,13 @@ func Test_ParseImageTags(t *testing.T) {
assert.Equal(t, "jannfis/test-image", image.ImageName)
assert.Nil(t, image.ImageTag)
})
t.Run("#273 classic-web=registry:5000/classic-web", func(t *testing.T) {
image := NewFromIdentifier("classic-web=registry:5000/classic-web")
assert.Equal(t, "registry:5000", image.RegistryURL)
assert.Equal(t, "classic-web", image.ImageAlias)
assert.Equal(t, "classic-web", image.ImageName)
assert.Nil(t, image.ImageTag)
})
}

func Test_ImageToString(t *testing.T) {
Expand Down