mirror of https://github.com/docker/docs.git
Merge pull request #878 from chanwit/private-reg-tag
fix matching image name with private repo
This commit is contained in:
commit
0e32d052cf
|
@ -13,6 +13,35 @@ type Image struct {
|
|||
Engine *Engine
|
||||
}
|
||||
|
||||
func toImageName(repo string, name string, tag string) string {
|
||||
fullname := name
|
||||
if tag != "" {
|
||||
fullname = name + ":" + tag
|
||||
}
|
||||
if repo != "" {
|
||||
fullname = repo + "/" + fullname
|
||||
}
|
||||
return fullname
|
||||
}
|
||||
|
||||
func parseImageName(fullname string) (repo string, name string, tag string) {
|
||||
parts := strings.SplitN(fullname, "/", 2)
|
||||
|
||||
nameAndTag := parts[0]
|
||||
if len(parts) == 2 {
|
||||
repo = parts[0]
|
||||
nameAndTag = parts[1]
|
||||
}
|
||||
|
||||
parts = strings.SplitN(nameAndTag, ":", 2)
|
||||
name = parts[0]
|
||||
if len(parts) == 2 {
|
||||
tag = parts[1]
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Match is exported
|
||||
func (image *Image) Match(IDOrName string, matchTag bool) bool {
|
||||
size := len(IDOrName)
|
||||
|
@ -21,20 +50,22 @@ func (image *Image) Match(IDOrName string, matchTag bool) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
name := IDOrName
|
||||
imageName := IDOrName
|
||||
repo, name, tag := parseImageName(imageName)
|
||||
if matchTag {
|
||||
if len(strings.SplitN(IDOrName, ":", 2)) == 1 {
|
||||
name = IDOrName + ":latest"
|
||||
if tag == "" {
|
||||
imageName = toImageName(repo, name, "latest")
|
||||
}
|
||||
} else {
|
||||
name = strings.SplitN(IDOrName, ":", 2)[0]
|
||||
imageName = toImageName(repo, name, "")
|
||||
}
|
||||
|
||||
for _, repoTag := range image.RepoTags {
|
||||
if matchTag == false {
|
||||
repoTag = strings.SplitN(repoTag, ":", 2)[0]
|
||||
r, n, _ := parseImageName(repoTag)
|
||||
repoTag = toImageName(r, n, "")
|
||||
}
|
||||
if repoTag == name {
|
||||
if repoTag == imageName {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,3 +32,48 @@ func TestMatch(t *testing.T) {
|
|||
assert.False(t, img.Match("nam", false))
|
||||
assert.False(t, img.Match("na", false))
|
||||
}
|
||||
|
||||
func TestParseImage(t *testing.T) {
|
||||
repo, name, tag := parseImageName("private.registry.com:5000/name:latest")
|
||||
assert.Equal(t, repo, "private.registry.com:5000")
|
||||
assert.Equal(t, name, "name")
|
||||
assert.Equal(t, tag, "latest")
|
||||
|
||||
repo, name, tag = parseImageName("name:latest")
|
||||
assert.Equal(t, repo, "")
|
||||
assert.Equal(t, name, "name")
|
||||
assert.Equal(t, tag, "latest")
|
||||
|
||||
repo, name, tag = parseImageName("name")
|
||||
assert.Equal(t, repo, "")
|
||||
assert.Equal(t, name, "name")
|
||||
assert.Equal(t, tag, "")
|
||||
|
||||
repo, name, tag = parseImageName("")
|
||||
assert.Equal(t, repo, "")
|
||||
assert.Equal(t, name, "")
|
||||
assert.Equal(t, tag, "")
|
||||
}
|
||||
|
||||
func TestToImage(t *testing.T) {
|
||||
assert.Equal(t, toImageName("", "name", ""), "name")
|
||||
assert.Equal(t, toImageName("", "name", "latest"), "name:latest")
|
||||
assert.Equal(t, toImageName("a", "name", ""), "a/name")
|
||||
assert.Equal(t, toImageName("private.registry.com:5000", "name", "latest"), "private.registry.com:5000/name:latest")
|
||||
}
|
||||
|
||||
func TestMatchPrivateRepo(t *testing.T) {
|
||||
img := Image{}
|
||||
|
||||
img.Id = "378954456789"
|
||||
img.RepoTags = []string{"private.registry.com:5000/name:latest"}
|
||||
|
||||
assert.True(t, img.Match("private.registry.com:5000/name:latest", true))
|
||||
assert.True(t, img.Match("private.registry.com:5000/name", true))
|
||||
assert.False(t, img.Match("private.registry.com:5000/nam", true))
|
||||
assert.False(t, img.Match("private.registry.com:5000/na", true))
|
||||
|
||||
assert.True(t, img.Match("private.registry.com:5000/name", false))
|
||||
assert.False(t, img.Match("private.registry.com:5000/nam", false))
|
||||
assert.False(t, img.Match("private.registry.com:5000/na", false))
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue