Commit a47e2ff9 authored by Yu-Ju Hong's avatar Yu-Ju Hong

Fix image inspection and matching

An image string could contain a hostname (e.g., "docker.io") or not. The same applies to the RepoTags returned from an image inspection. To determine whether the image docker pulled matches what the user ask for, we check if the either string is the suffix of the other.
parent 64e682dc
......@@ -166,24 +166,19 @@ func matchImageTagOrSHA(inspected dockertypes.ImageInspect, image string) bool {
// No Tag or SHA specified, so just return what we have
return true
}
if isTagged {
hostname, _ := dockerref.SplitHostname(named)
// Check the RepoTags for an exact match
// Check the RepoTags for a match.
for _, tag := range inspected.RepoTags {
// Deal with image with hostname specified
if len(hostname) > 0 {
if strings.HasSuffix(image, tag) {
return true
}
} else {
if tag == image {
// We found a specific tag that we were looking for
return true
}
// An image name (without the tag/digest) can be [hostname '/'] component ['/' component]*
// Because either the RepoTag or the name *may* contain the
// hostname or not, we only check for the suffix match.
if strings.HasSuffix(image, tag) || strings.HasSuffix(tag, image) {
return true
}
}
}
if isDigested {
algo := digest.Digest().Algorithm().String()
sha := digest.Digest().Hex()
......
......@@ -184,6 +184,11 @@ func TestMatchImageTagOrSHA(t *testing.T) {
Output: true,
},
{
Inspected: dockertypes.ImageInspect{RepoTags: []string{"docker.io/kubernetes/pause:latest"}},
Image: "kubernetes/pause:latest",
Output: true,
},
{
Inspected: dockertypes.ImageInspect{
ID: "sha256:2208f7a29005d226d1ee33a63e33af1f47af6156c740d7d23c7948e8d282d53d",
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment