Merge pull request #30789 from yujuhong/image_match

Automatic merge from submit-queue

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.

/cc @dims @dchen1107 @Random-Liu

This fixes #30710
This commit is contained in:
Kubernetes Submit Queue 2016-08-20 06:18:41 -07:00 committed by GitHub
commit 7b3c08d7d3
2 changed files with 14 additions and 14 deletions

View File

@ -166,24 +166,19 @@ func matchImageTagOrSHA(inspected dockertypes.ImageInspect, image string) bool {
// No Tag or SHA specified, so just return what we have // No Tag or SHA specified, so just return what we have
return true return true
} }
if isTagged {
hostname, _ := dockerref.SplitHostname(named)
// Check the RepoTags for an exact 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 isTagged {
if tag == image { // Check the RepoTags for a match.
// We found a specific tag that we were looking for for _, tag := range inspected.RepoTags {
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 { if isDigested {
algo := digest.Digest().Algorithm().String() algo := digest.Digest().Algorithm().String()
sha := digest.Digest().Hex() sha := digest.Digest().Hex()

View File

@ -183,6 +183,11 @@ func TestMatchImageTagOrSHA(t *testing.T) {
Image: "docker.io/colemickens/hyperkube-amd64:217.9beff63", Image: "docker.io/colemickens/hyperkube-amd64:217.9beff63",
Output: true, Output: true,
}, },
{
Inspected: dockertypes.ImageInspect{RepoTags: []string{"docker.io/kubernetes/pause:latest"}},
Image: "kubernetes/pause:latest",
Output: true,
},
{ {
Inspected: dockertypes.ImageInspect{ Inspected: dockertypes.ImageInspect{
ID: "sha256:2208f7a29005d226d1ee33a63e33af1f47af6156c740d7d23c7948e8d282d53d", ID: "sha256:2208f7a29005d226d1ee33a63e33af1f47af6156c740d7d23c7948e8d282d53d",