Skip to content

Commit

Permalink
Remove simulated pull by id generator
Browse files Browse the repository at this point in the history
  • Loading branch information
Andy Goldstein committed Apr 17, 2015
1 parent f6e8590 commit 78fb343
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 153 deletions.
57 changes: 4 additions & 53 deletions pkg/image/api/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package api
import (
"encoding/json"
"fmt"
"os"
"strings"

"github.com/docker/distribution/digest"
Expand Down Expand Up @@ -91,31 +90,8 @@ func (r DockerImageReference) Minimal() DockerImageReference {
return r
}

var dockerPullSpecGenerator pullSpecGenerator

// String converts a DockerImageReference to a Docker pull spec.
func (r DockerImageReference) String() string {
if dockerPullSpecGenerator == nil {
if len(os.Getenv("OPENSHIFT_REAL_PULL_BY_ID")) > 0 {
dockerPullSpecGenerator = &realByIdPullSpecGenerator{}
} else {
dockerPullSpecGenerator = &simulatedByIdPullSpecGenerator{}
}
}
return dockerPullSpecGenerator.pullSpec(r)
}

// pullSpecGenerator converts a DockerImageReference to a Docker pull spec.
type pullSpecGenerator interface {
pullSpec(ref DockerImageReference) string
}

// simulatedByIdPullSpecGenerator simulates pull by ID against a v2 registry
// by generating a pull spec where the "tag" is the hex portion of the
// DockerImageReference's ID.
type simulatedByIdPullSpecGenerator struct{}

func (f *simulatedByIdPullSpecGenerator) pullSpec(r DockerImageReference) string {
registry := r.Registry
if len(registry) > 0 {
registry += "/"
Expand All @@ -130,43 +106,18 @@ func (f *simulatedByIdPullSpecGenerator) pullSpec(r DockerImageReference) string
if len(r.Tag) > 0 {
ref = ":" + r.Tag
} else if len(r.ID) > 0 {
if d, err := digest.ParseDigest(r.ID); err == nil {
// if it parses as a digest, treat it like a by-id tag without the algorithm
ref = ":" + d.Hex()
if _, err := digest.ParseDigest(r.ID); err == nil {
// if it parses as a digest, it's v2 pull by id
ref = "@" + r.ID
} else {
// if it doesn't parse, it's presumably a v1 registry by-id tag
// if it doesn't parse as a digest, it's presumably a v1 registry by-id tag
ref = ":" + r.ID
}
}

return fmt.Sprintf("%s%s%s%s", registry, r.Namespace, r.Name, ref)
}

// realByIdPullSpecGenerator generates real pull by ID pull specs against
// a v2 registry using the <stream>@<algo:digest> format.
type realByIdPullSpecGenerator struct{}

func (*realByIdPullSpecGenerator) pullSpec(r DockerImageReference) string {
registry := r.Registry
if len(registry) > 0 {
registry += "/"
}

if len(r.Namespace) == 0 {
r.Namespace = DockerDefaultNamespace
}
r.Namespace += "/"

var ref string
if len(r.Tag) > 0 {
ref = ":" + r.Tag
} else if len(r.ID) > 0 {
ref = "@" + r.ID
}

return fmt.Sprintf("%s%s%s%s", registry, r.Namespace, r.Name, ref)
}

// ImageWithMetadata returns a copy of image with the DockerImageMetadata filled in
// from the raw DockerImageManifest data stored in the image.
func ImageWithMetadata(image Image) (*Image, error) {
Expand Down
98 changes: 3 additions & 95 deletions pkg/image/api/helper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package api

import (
"fmt"
"os"
"reflect"
"testing"
"time"
Expand Down Expand Up @@ -143,103 +142,12 @@ func TestDockerImageReferenceString(t *testing.T) {
{
Name: "foo",
ID: "sha256:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
Expected: "library/foo:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
},
{
Namespace: "bar",
Name: "foo",
Expected: "bar/foo",
},
{
Namespace: "bar",
Name: "foo",
Tag: "tag",
Expected: "bar/foo:tag",
},
{
Namespace: "bar",
Name: "foo",
ID: "sha256:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
Expected: "bar/foo:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
},
{
Registry: "bar",
Namespace: "foo",
Name: "baz",
Expected: "bar/foo/baz",
},
{
Registry: "bar",
Namespace: "foo",
Name: "baz",
Tag: "tag",
Expected: "bar/foo/baz:tag",
},
{
Registry: "bar",
Namespace: "foo",
Name: "baz",
ID: "sha256:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
Expected: "bar/foo/baz:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
},
{
Registry: "bar:5000",
Namespace: "foo",
Name: "baz",
Expected: "bar:5000/foo/baz",
},
{
Registry: "bar:5000",
Namespace: "foo",
Name: "baz",
Tag: "tag",
Expected: "bar:5000/foo/baz:tag",
},
{
Registry: "bar:5000",
Namespace: "foo",
Name: "baz",
ID: "sha256:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
Expected: "bar:5000/foo/baz:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
},
}

for i, testCase := range testCases {
ref := DockerImageReference{
Registry: testCase.Registry,
Namespace: testCase.Namespace,
Name: testCase.Name,
Tag: testCase.Tag,
ID: testCase.ID,
}
actual := ref.String()
if e, a := testCase.Expected, actual; e != a {
t.Errorf("%d: expected %q, got %q", i, e, a)
}
}
}

func TestDockerImageReferenceStringWithRealPullByID(t *testing.T) {
os.Setenv("OPENSHIFT_REAL_PULL_BY_ID", "1")
dockerPullSpecGenerator = nil

testCases := []struct {
Registry, Namespace, Name, Tag, ID string
Expected string
}{
{
Name: "foo",
Expected: "library/foo",
},
{
Name: "foo",
Tag: "tag",
Expected: "library/foo:tag",
Expected: "library/foo@sha256:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
},
{
Name: "foo",
ID: "sha256:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
Expected: "library/foo@sha256:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
ID: "3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
Expected: "library/foo:3c87c572822935df60f0f5d3665bd376841a7fcfeb806b5f212de6a00e9a7b25",
},
{
Namespace: "bar",
Expand Down
6 changes: 1 addition & 5 deletions pkg/image/registry/imagestream/strategy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -356,8 +356,6 @@ func TestTagsChanged(t *testing.T) {
}},
"t2": {Items: []api.TagEvent{
{
//TODO use the line below when we're on Docker 1.6 with true pull by digest
//DockerImageReference: "registry:5000/ns/stream@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
DockerImageReference: "registry:5000/ns/stream@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
},
}},
Expand Down Expand Up @@ -510,9 +508,7 @@ func TestTagsChanged(t *testing.T) {
"t1": {
Items: []api.TagEvent{
{
//TODO use the line below when we're on Docker 1.6 with true pull by digest
//DockerImageReference: "registry:5000/ns/stream@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
DockerImageReference: "registry:5000/ns/stream:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
DockerImageReference: "registry:5000/ns/stream@sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
Image: "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
},
},
Expand Down

0 comments on commit 78fb343

Please sign in to comment.