diff --git a/hack/import-restrictions.json b/hack/import-restrictions.json index 7bfe496727a4..c5acbaf6deff 100644 --- a/hack/import-restrictions.json +++ b/hack/import-restrictions.json @@ -158,6 +158,7 @@ "allowedImportPackageRoots": [ "vendor/k8s.io/apimachinery", "github.com/openshift/origin/pkg/image/apis/image/internal", + "github.com/openshift/origin/pkg/image/apis/image/reference", "vendor/k8s.io/api", "vendor/github.com/openshift/api", "github.com/openshift/origin/pkg/api/apihelpers" diff --git a/pkg/apps/apis/apps/zz_generated.deepcopy.go b/pkg/apps/apis/apps/zz_generated.deepcopy.go index a028f932a3c9..f5ff0b2c9b44 100644 --- a/pkg/apps/apis/apps/zz_generated.deepcopy.go +++ b/pkg/apps/apis/apps/zz_generated.deepcopy.go @@ -5,7 +5,6 @@ package apps import ( - image "github.com/openshift/origin/pkg/image/apis/image" runtime "k8s.io/apimachinery/pkg/runtime" core "k8s.io/kubernetes/pkg/apis/core" ) @@ -754,8 +753,7 @@ func (in *TemplateImage) DeepCopyInto(out *TemplateImage) { if *in == nil { *out = nil } else { - *out = new(image.DockerImageReference) - **out = **in + *out = (*in).DeepCopy() } } if in.From != nil { diff --git a/pkg/build/builder/common.go b/pkg/build/builder/common.go index 47cca20cc1d6..d4aec577d0a0 100644 --- a/pkg/build/builder/common.go +++ b/pkg/build/builder/common.go @@ -34,7 +34,7 @@ import ( "github.com/openshift/origin/pkg/build/builder/util/dockerfile" buildutil "github.com/openshift/origin/pkg/build/util" "github.com/openshift/origin/pkg/git" - imageapi "github.com/openshift/origin/pkg/image/apis/image" + imagereference "github.com/openshift/origin/pkg/image/apis/image/reference" utilglog "github.com/openshift/origin/pkg/util/glog" ) @@ -363,7 +363,7 @@ func addBuildParameters(dir string, build *buildapiv1.Build, sourceInfo *git.Sou if build.Spec.Strategy.DockerStrategy != nil && build.Spec.Strategy.DockerStrategy.From != nil && build.Spec.Strategy.DockerStrategy.From.Kind == "DockerImage" { // Reduce the name to a minimal canonical form for the daemon name := build.Spec.Strategy.DockerStrategy.From.Name - if ref, err := imageapi.ParseDockerImageReference(name); err == nil { + if ref, err := imagereference.Parse(name); err == nil { name = ref.DaemonMinimal().Exact() } err := replaceLastFrom(node, name) diff --git a/pkg/build/builder/dockerutil.go b/pkg/build/builder/dockerutil.go index f42b2292a302..2c7808ee738e 100644 --- a/pkg/build/builder/dockerutil.go +++ b/pkg/build/builder/dockerutil.go @@ -27,7 +27,7 @@ import ( "github.com/openshift/source-to-image/pkg/tar" s2iutil "github.com/openshift/source-to-image/pkg/util" - imageapi "github.com/openshift/origin/pkg/image/apis/image" + "github.com/openshift/origin/pkg/image/apis/image/reference" ) var ( @@ -114,13 +114,13 @@ func pullImage(client DockerClient, name string, authConfig docker.AuthConfigura glog.V(0).Infof("%s", s) } - ref, err := imageapi.ParseDockerImageReference(name) + ref, err := reference.Parse(name) if err != nil { return err } tag := ref.ID if len(ref.ID) == 0 { - tag = imageapi.DefaultImageTag + tag = "latest" if len(ref.Tag) != 0 { tag = ref.Tag } diff --git a/pkg/build/controller/strategy/util.go b/pkg/build/controller/strategy/util.go index 759610a94c1b..a705d87015e0 100644 --- a/pkg/build/controller/strategy/util.go +++ b/pkg/build/controller/strategy/util.go @@ -17,7 +17,7 @@ import ( buildapiv1 "github.com/openshift/api/build/v1" "github.com/openshift/origin/pkg/api/apihelpers" buildapi "github.com/openshift/origin/pkg/build/apis/build" - imageapi "github.com/openshift/origin/pkg/image/apis/image" + "github.com/openshift/origin/pkg/image/apis/image/reference" ) const ( @@ -242,7 +242,7 @@ func addOutputEnvVars(buildOutput *kapi.ObjectReference, output *[]v1.EnvVar) er if buildOutput.Kind != "DockerImage" { return fmt.Errorf("invalid build output kind %s, must be DockerImage", buildOutput.Kind) } - ref, err := imageapi.ParseDockerImageReference(buildOutput.Name) + ref, err := reference.Parse(buildOutput.Name) if err != nil { return err } diff --git a/pkg/image/apis/image/helper.go b/pkg/image/apis/image/helper.go index 4f8fa9da74c0..fd80b1106e34 100644 --- a/pkg/image/apis/image/helper.go +++ b/pkg/image/apis/image/helper.go @@ -4,7 +4,6 @@ import ( "bytes" "errors" "fmt" - "net" "net/url" "regexp" "sort" @@ -18,6 +17,7 @@ import ( "github.com/golang/glog" "github.com/openshift/origin/pkg/image/apis/image/internal/digest" + "github.com/openshift/origin/pkg/image/apis/image/reference" ) const ( @@ -145,191 +145,16 @@ func ParseImageStreamTagName(istag string) (name string, tag string, err error) return } -// IsRegistryDockerHub returns true if the given registry name belongs to -// Docker hub. -func IsRegistryDockerHub(registry string) bool { - switch registry { - case DockerDefaultRegistry, DockerDefaultV1Registry, DockerDefaultV2Registry: - return true - default: - return false - } -} - // ParseDockerImageReference parses a Docker pull spec string into a // DockerImageReference. -func ParseDockerImageReference(spec string) (DockerImageReference, error) { - var ref DockerImageReference - - namedRef, err := parseNamedDockerImageReference(spec) +func ParseDockerImageReference(spec string) (reference.DockerImageReference, error) { + ref, err := reference.Parse(spec) if err != nil { return ref, err } - - ref.Registry = namedRef.Registry - ref.Namespace = namedRef.Namespace - ref.Name = namedRef.Name - ref.Tag = namedRef.Tag - ref.ID = namedRef.ID - return ref, nil } -// Equal returns true if the other DockerImageReference is equivalent to the -// reference r. The comparison applies defaults to the Docker image reference, -// so that e.g., "foobar" equals "docker.io/library/foobar:latest". -func (r DockerImageReference) Equal(other DockerImageReference) bool { - defaultedRef := r.DockerClientDefaults() - otherDefaultedRef := other.DockerClientDefaults() - return defaultedRef == otherDefaultedRef -} - -// DockerClientDefaults sets the default values used by the Docker client. -func (r DockerImageReference) DockerClientDefaults() DockerImageReference { - if len(r.Registry) == 0 { - r.Registry = DockerDefaultRegistry - } - if len(r.Namespace) == 0 && IsRegistryDockerHub(r.Registry) { - r.Namespace = DockerDefaultNamespace - } - if len(r.Tag) == 0 { - r.Tag = DefaultImageTag - } - return r -} - -// Minimal reduces a DockerImageReference to its minimalist form. -func (r DockerImageReference) Minimal() DockerImageReference { - if r.Tag == DefaultImageTag { - r.Tag = "" - } - return r -} - -// AsRepository returns the reference without tags or IDs. -func (r DockerImageReference) AsRepository() DockerImageReference { - r.Tag = "" - r.ID = "" - return r -} - -// RepositoryName returns the registry relative name -func (r DockerImageReference) RepositoryName() string { - r.Tag = "" - r.ID = "" - r.Registry = "" - return r.Exact() -} - -// RegistryHostPort returns the registry hostname and the port. -// If the port is not specified in the registry hostname we default to 443. -// This will also default to Docker client defaults if the registry hostname is empty. -func (r DockerImageReference) RegistryHostPort(insecure bool) (string, string) { - registryHost := r.AsV2().DockerClientDefaults().Registry - if strings.Contains(registryHost, ":") { - hostname, port, _ := net.SplitHostPort(registryHost) - return hostname, port - } - if insecure { - return registryHost, "80" - } - return registryHost, "443" -} - -// RepositoryName returns the registry relative name -func (r DockerImageReference) RegistryURL() *url.URL { - return &url.URL{ - Scheme: "https", - Host: r.AsV2().Registry, - } -} - -// DaemonMinimal clears defaults that Docker assumes. -func (r DockerImageReference) DaemonMinimal() DockerImageReference { - switch r.Registry { - case DockerDefaultV1Registry, DockerDefaultV2Registry: - r.Registry = DockerDefaultRegistry - } - if IsRegistryDockerHub(r.Registry) && r.Namespace == DockerDefaultNamespace { - r.Namespace = "" - } - return r.Minimal() -} - -func (r DockerImageReference) AsV2() DockerImageReference { - switch r.Registry { - case DockerDefaultV1Registry, DockerDefaultRegistry: - r.Registry = DockerDefaultV2Registry - } - return r -} - -// MostSpecific returns the most specific image reference that can be constructed from the -// current ref, preferring an ID over a Tag. Allows client code dealing with both tags and IDs -// to get the most specific reference easily. -func (r DockerImageReference) MostSpecific() DockerImageReference { - if len(r.ID) == 0 { - return r - } - if _, err := digest.ParseDigest(r.ID); err == nil { - r.Tag = "" - return r - } - if len(r.Tag) == 0 { - r.Tag, r.ID = r.ID, "" - return r - } - return r -} - -// NameString returns the name of the reference with its tag or ID. -func (r DockerImageReference) NameString() string { - switch { - case len(r.Name) == 0: - return "" - case len(r.Tag) > 0: - return r.Name + ":" + r.Tag - case len(r.ID) > 0: - var ref string - if _, err := digest.ParseDigest(r.ID); err == nil { - // if it parses as a digest, its v2 pull by id - ref = "@" + r.ID - } else { - // if it doesn't parse as a digest, it's presumably a v1 registry by-id tag - ref = ":" + r.ID - } - return r.Name + ref - default: - return r.Name - } -} - -// Exact returns a string representation of the set fields on the DockerImageReference -func (r DockerImageReference) Exact() string { - name := r.NameString() - if len(name) == 0 { - return name - } - s := r.Registry - if len(s) > 0 { - s += "/" - } - - if len(r.Namespace) != 0 { - s += r.Namespace + "/" - } - return s + name -} - -// String converts a DockerImageReference to a Docker pull spec (which implies a default namespace -// according to V1 Docker registry rules). Use Exact() if you want no defaulting. -func (r DockerImageReference) String() string { - if len(r.Namespace) == 0 && IsRegistryDockerHub(r.Registry) { - r.Namespace = DockerDefaultNamespace - } - return r.Exact() -} - // SplitImageStreamTag turns the name of an ImageStreamTag into Name and Tag. // It returns false if the tag was not properly specified in the name. func SplitImageStreamTag(nameAndTag string) (name string, tag string, ok bool) { @@ -790,7 +615,7 @@ func ResolveImageID(stream *ImageStream, imageID string) (*TagEvent, error) { // MostAccuratePullSpec returns a docker image reference that uses the current ID if possible, the current tag otherwise, and // returns false if the reference if the spec could not be parsed. The returned spec has all client defaults applied. func MostAccuratePullSpec(pullSpec string, id, tag string) (string, bool) { - ref, err := ParseDockerImageReference(pullSpec) + ref, err := reference.Parse(pullSpec) if err != nil { return pullSpec, false } diff --git a/pkg/image/apis/image/reference.go b/pkg/image/apis/image/reference.go deleted file mode 100644 index fa895891c2e9..000000000000 --- a/pkg/image/apis/image/reference.go +++ /dev/null @@ -1,51 +0,0 @@ -package image - -import ( - "strings" - - "github.com/openshift/origin/pkg/image/apis/image/internal/reference" -) - -// NamedDockerImageReference points to a Docker image. -type namedDockerImageReference struct { - Registry string - Namespace string - Name string - Tag string - ID string -} - -// parseNamedDockerImageReference parses a Docker pull spec string into a -// NamedDockerImageReference. -func parseNamedDockerImageReference(spec string) (namedDockerImageReference, error) { - var ref namedDockerImageReference - - namedRef, err := reference.ParseNamed(spec) - if err != nil { - return ref, err - } - - name := namedRef.Name() - i := strings.IndexRune(name, '/') - if i == -1 || (!strings.ContainsAny(name[:i], ":.") && name[:i] != "localhost") { - ref.Name = name - } else { - ref.Registry, ref.Name = name[:i], name[i+1:] - } - - if named, ok := namedRef.(reference.NamedTagged); ok { - ref.Tag = named.Tag() - } - - if named, ok := namedRef.(reference.Canonical); ok { - ref.ID = named.Digest().String() - } - - // It's not enough just to use the reference.ParseNamed(). We have to fill - // ref.Namespace from ref.Name - if i := strings.IndexRune(ref.Name, '/'); i != -1 { - ref.Namespace, ref.Name = ref.Name[:i], ref.Name[i+1:] - } - - return ref, nil -} diff --git a/pkg/image/apis/image/reference/reference.go b/pkg/image/apis/image/reference/reference.go new file mode 100644 index 000000000000..1f929d9da696 --- /dev/null +++ b/pkg/image/apis/image/reference/reference.go @@ -0,0 +1,245 @@ +package reference + +import ( + "net" + "net/url" + "strings" + + "github.com/openshift/origin/pkg/image/apis/image/internal/digest" + "github.com/openshift/origin/pkg/image/apis/image/internal/reference" +) + +// DockerImageReference points to a Docker image. +type DockerImageReference struct { + Registry string + Namespace string + Name string + Tag string + ID string +} + +const ( + // DockerDefaultRegistry is the value for the registry when none was provided. + DockerDefaultRegistry = "docker.io" + // DockerDefaultV1Registry is the host name of the default v1 registry + DockerDefaultV1Registry = "index." + DockerDefaultRegistry + // DockerDefaultV2Registry is the host name of the default v2 registry + DockerDefaultV2Registry = "registry-1." + DockerDefaultRegistry +) + +// Parse parses a Docker pull spec string into a +// DockerImageReference. +func Parse(spec string) (DockerImageReference, error) { + var ref DockerImageReference + + namedRef, err := reference.ParseNamed(spec) + if err != nil { + return ref, err + } + + name := namedRef.Name() + i := strings.IndexRune(name, '/') + if i == -1 || (!strings.ContainsAny(name[:i], ":.") && name[:i] != "localhost") { + ref.Name = name + } else { + ref.Registry, ref.Name = name[:i], name[i+1:] + } + + if named, ok := namedRef.(reference.NamedTagged); ok { + ref.Tag = named.Tag() + } + + if named, ok := namedRef.(reference.Canonical); ok { + ref.ID = named.Digest().String() + } + + // It's not enough just to use the reference.ParseNamed(). We have to fill + // ref.Namespace from ref.Name + if i := strings.IndexRune(ref.Name, '/'); i != -1 { + ref.Namespace, ref.Name = ref.Name[:i], ref.Name[i+1:] + } + + return ref, nil +} + +// Equal returns true if the other DockerImageReference is equivalent to the +// reference r. The comparison applies defaults to the Docker image reference, +// so that e.g., "foobar" equals "docker.io/library/foobar:latest". +func (r DockerImageReference) Equal(other DockerImageReference) bool { + defaultedRef := r.DockerClientDefaults() + otherDefaultedRef := other.DockerClientDefaults() + return defaultedRef == otherDefaultedRef +} + +// DockerClientDefaults sets the default values used by the Docker client. +func (r DockerImageReference) DockerClientDefaults() DockerImageReference { + if len(r.Registry) == 0 { + r.Registry = DockerDefaultRegistry + } + if len(r.Namespace) == 0 && IsRegistryDockerHub(r.Registry) { + r.Namespace = "library" + } + if len(r.Tag) == 0 { + r.Tag = "latest" + } + return r +} + +// Minimal reduces a DockerImageReference to its minimalist form. +func (r DockerImageReference) Minimal() DockerImageReference { + if r.Tag == "latest" { + r.Tag = "" + } + return r +} + +// AsRepository returns the reference without tags or IDs. +func (r DockerImageReference) AsRepository() DockerImageReference { + r.Tag = "" + r.ID = "" + return r +} + +// RepositoryName returns the registry relative name +func (r DockerImageReference) RepositoryName() string { + r.Tag = "" + r.ID = "" + r.Registry = "" + return r.Exact() +} + +// RegistryHostPort returns the registry hostname and the port. +// If the port is not specified in the registry hostname we default to 443. +// This will also default to Docker client defaults if the registry hostname is empty. +func (r DockerImageReference) RegistryHostPort(insecure bool) (string, string) { + registryHost := r.AsV2().DockerClientDefaults().Registry + if strings.Contains(registryHost, ":") { + hostname, port, _ := net.SplitHostPort(registryHost) + return hostname, port + } + if insecure { + return registryHost, "80" + } + return registryHost, "443" +} + +// RepositoryName returns the registry relative name +func (r DockerImageReference) RegistryURL() *url.URL { + return &url.URL{ + Scheme: "https", + Host: r.AsV2().Registry, + } +} + +// DaemonMinimal clears defaults that Docker assumes. +func (r DockerImageReference) DaemonMinimal() DockerImageReference { + switch r.Registry { + case DockerDefaultV1Registry, DockerDefaultV2Registry: + r.Registry = DockerDefaultRegistry + } + if IsRegistryDockerHub(r.Registry) && r.Namespace == "library" { + r.Namespace = "" + } + return r.Minimal() +} + +func (r DockerImageReference) AsV2() DockerImageReference { + switch r.Registry { + case DockerDefaultV1Registry, DockerDefaultRegistry: + r.Registry = DockerDefaultV2Registry + } + return r +} + +// MostSpecific returns the most specific image reference that can be constructed from the +// current ref, preferring an ID over a Tag. Allows client code dealing with both tags and IDs +// to get the most specific reference easily. +func (r DockerImageReference) MostSpecific() DockerImageReference { + if len(r.ID) == 0 { + return r + } + if _, err := digest.ParseDigest(r.ID); err == nil { + r.Tag = "" + return r + } + if len(r.Tag) == 0 { + r.Tag, r.ID = r.ID, "" + return r + } + return r +} + +// NameString returns the name of the reference with its tag or ID. +func (r DockerImageReference) NameString() string { + switch { + case len(r.Name) == 0: + return "" + case len(r.Tag) > 0: + return r.Name + ":" + r.Tag + case len(r.ID) > 0: + var ref string + if _, err := digest.ParseDigest(r.ID); err == nil { + // if it parses as a digest, its v2 pull by id + ref = "@" + r.ID + } else { + // if it doesn't parse as a digest, it's presumably a v1 registry by-id tag + ref = ":" + r.ID + } + return r.Name + ref + default: + return r.Name + } +} + +// Exact returns a string representation of the set fields on the DockerImageReference +func (r DockerImageReference) Exact() string { + name := r.NameString() + if len(name) == 0 { + return name + } + s := r.Registry + if len(s) > 0 { + s += "/" + } + + if len(r.Namespace) != 0 { + s += r.Namespace + "/" + } + return s + name +} + +// String converts a DockerImageReference to a Docker pull spec (which implies a default namespace +// according to V1 Docker registry rules). Use Exact() if you want no defaulting. +func (r DockerImageReference) String() string { + if len(r.Namespace) == 0 && IsRegistryDockerHub(r.Registry) { + r.Namespace = "library" + } + return r.Exact() +} + +// IsRegistryDockerHub returns true if the given registry name belongs to +// Docker hub. +func IsRegistryDockerHub(registry string) bool { + switch registry { + case DockerDefaultRegistry, DockerDefaultV1Registry, DockerDefaultV2Registry: + return true + default: + return false + } +} + +// DeepCopyInto writing into out. in must be non-nil. +func (in *DockerImageReference) DeepCopyInto(out *DockerImageReference) { + *out = *in + return +} + +// DeepCopy copies the receiver, creating a new DockerImageReference. +func (in *DockerImageReference) DeepCopy() *DockerImageReference { + if in == nil { + return nil + } + out := new(DockerImageReference) + in.DeepCopyInto(out) + return out +} diff --git a/pkg/image/apis/image/reference_test.go b/pkg/image/apis/image/reference/reference_test.go similarity index 97% rename from pkg/image/apis/image/reference_test.go rename to pkg/image/apis/image/reference/reference_test.go index cb823d2f36e5..b217b2aa6db6 100644 --- a/pkg/image/apis/image/reference_test.go +++ b/pkg/image/apis/image/reference/reference_test.go @@ -1,4 +1,4 @@ -package image +package reference import ( "fmt" @@ -6,7 +6,7 @@ import ( "testing" ) -func TestParseNamedDockerImageReference(t *testing.T) { +func TestParse(t *testing.T) { testCases := []struct { From string Registry, Namespace, Name, Tag, ID string @@ -232,7 +232,7 @@ func TestParseNamedDockerImageReference(t *testing.T) { } for _, testCase := range testCases { - ref, err := parseNamedDockerImageReference(testCase.From) + ref, err := Parse(testCase.From) switch { case err != nil && !testCase.Err: t.Errorf("%s: unexpected error: %v", testCase.From, err) diff --git a/pkg/image/apis/image/types.go b/pkg/image/apis/image/types.go index bea2e4ccceb8..881831576062 100644 --- a/pkg/image/apis/image/types.go +++ b/pkg/image/apis/image/types.go @@ -3,6 +3,8 @@ package image import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kapi "k8s.io/kubernetes/pkg/apis/core" + + "github.com/openshift/origin/pkg/image/apis/image/reference" ) // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -465,13 +467,7 @@ type ImageStreamImage struct { } // DockerImageReference points to a Docker image. -type DockerImageReference struct { - Registry string - Namespace string - Name string - Tag string - ID string -} +type DockerImageReference = reference.DockerImageReference // +genclient // +genclient:onlyVerbs=create diff --git a/pkg/image/apis/image/v1/zz_generated.conversion.go b/pkg/image/apis/image/v1/zz_generated.conversion.go index c56f15186f1e..55d53f661974 100644 --- a/pkg/image/apis/image/v1/zz_generated.conversion.go +++ b/pkg/image/apis/image/v1/zz_generated.conversion.go @@ -25,8 +25,6 @@ func init() { // Public to allow building arbitrary schemes. func RegisterConversions(scheme *runtime.Scheme) error { return scheme.AddGeneratedConversionFuncs( - Convert_v1_DockerImageReference_To_image_DockerImageReference, - Convert_image_DockerImageReference_To_v1_DockerImageReference, Convert_v1_Image_To_image_Image, Convert_image_Image_To_v1_Image, Convert_v1_ImageImportSpec_To_image_ImageImportSpec, @@ -88,34 +86,6 @@ func RegisterConversions(scheme *runtime.Scheme) error { ) } -func autoConvert_v1_DockerImageReference_To_image_DockerImageReference(in *v1.DockerImageReference, out *image.DockerImageReference, s conversion.Scope) error { - out.Registry = in.Registry - out.Namespace = in.Namespace - out.Name = in.Name - out.Tag = in.Tag - out.ID = in.ID - return nil -} - -// Convert_v1_DockerImageReference_To_image_DockerImageReference is an autogenerated conversion function. -func Convert_v1_DockerImageReference_To_image_DockerImageReference(in *v1.DockerImageReference, out *image.DockerImageReference, s conversion.Scope) error { - return autoConvert_v1_DockerImageReference_To_image_DockerImageReference(in, out, s) -} - -func autoConvert_image_DockerImageReference_To_v1_DockerImageReference(in *image.DockerImageReference, out *v1.DockerImageReference, s conversion.Scope) error { - out.Registry = in.Registry - out.Namespace = in.Namespace - out.Name = in.Name - out.Tag = in.Tag - out.ID = in.ID - return nil -} - -// Convert_image_DockerImageReference_To_v1_DockerImageReference is an autogenerated conversion function. -func Convert_image_DockerImageReference_To_v1_DockerImageReference(in *image.DockerImageReference, out *v1.DockerImageReference, s conversion.Scope) error { - return autoConvert_image_DockerImageReference_To_v1_DockerImageReference(in, out, s) -} - func autoConvert_v1_Image_To_image_Image(in *v1.Image, out *image.Image, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta out.DockerImageReference = in.DockerImageReference diff --git a/pkg/image/apis/image/zz_generated.deepcopy.go b/pkg/image/apis/image/zz_generated.deepcopy.go index 76943e6b6eae..0f6a00114cdc 100644 --- a/pkg/image/apis/image/zz_generated.deepcopy.go +++ b/pkg/image/apis/image/zz_generated.deepcopy.go @@ -283,22 +283,6 @@ func (in *DockerImageManifest) DeepCopy() *DockerImageManifest { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DockerImageReference) DeepCopyInto(out *DockerImageReference) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DockerImageReference. -func (in *DockerImageReference) DeepCopy() *DockerImageReference { - if in == nil { - return nil - } - out := new(DockerImageReference) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DockerV1CompatibilityImage) DeepCopyInto(out *DockerV1CompatibilityImage) { *out = *in diff --git a/pkg/image/importer/dockerv1client/client.go b/pkg/image/importer/dockerv1client/client.go index 156d0272f0b1..035b0cef964e 100644 --- a/pkg/image/importer/dockerv1client/client.go +++ b/pkg/image/importer/dockerv1client/client.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api/legacyscheme" imageapi "github.com/openshift/origin/pkg/image/apis/image" + "github.com/openshift/origin/pkg/image/apis/image/reference" ) // this is the only entrypoint which deals in github.com/fsouza/go-dockerclient.Image and expects to use our conversion capability to coerce an external @@ -146,11 +147,11 @@ func (c *client) Connect(name string, allowInsecure bool) (Connection, error) { // segment and docker API version. func normalizeDockerHubHost(host string, v2 bool) string { switch host { - case imageapi.DockerDefaultRegistry, "www." + imageapi.DockerDefaultRegistry, imageapi.DockerDefaultV1Registry, imageapi.DockerDefaultV2Registry: + case reference.DockerDefaultRegistry, "www." + reference.DockerDefaultRegistry, reference.DockerDefaultV1Registry, reference.DockerDefaultV2Registry: if v2 { - return imageapi.DockerDefaultV2Registry + return reference.DockerDefaultV2Registry } - return imageapi.DockerDefaultV1Registry + return reference.DockerDefaultV1Registry } return host } @@ -255,8 +256,8 @@ func newConnection(url url.URL, dialTimeout time.Duration, allowInsecure, enable // ImageTags returns the tags for the named Docker image repository. func (c *connection) ImageTags(namespace, name string) (map[string]string, error) { - if len(namespace) == 0 && imageapi.IsRegistryDockerHub(c.url.Host) { - namespace = imageapi.DockerDefaultNamespace + if len(namespace) == 0 && reference.IsRegistryDockerHub(c.url.Host) { + namespace = "library" } if len(name) == 0 { return nil, fmt.Errorf("image name must be specified") @@ -272,8 +273,8 @@ func (c *connection) ImageTags(namespace, name string) (map[string]string, error // ImageByID returns the specified image within the named Docker image repository func (c *connection) ImageByID(namespace, name, imageID string) (*Image, error) { - if len(namespace) == 0 && imageapi.IsRegistryDockerHub(c.url.Host) { - namespace = imageapi.DockerDefaultNamespace + if len(namespace) == 0 && reference.IsRegistryDockerHub(c.url.Host) { + namespace = "library" } if len(name) == 0 { return nil, fmt.Errorf("image name must be specified") @@ -290,15 +291,15 @@ func (c *connection) ImageByID(namespace, name, imageID string) (*Image, error) // ImageByTag returns the specified image within the named Docker image repository func (c *connection) ImageByTag(namespace, name, tag string) (*Image, error) { - if len(namespace) == 0 && imageapi.IsRegistryDockerHub(c.url.Host) { - namespace = imageapi.DockerDefaultNamespace + if len(namespace) == 0 && reference.IsRegistryDockerHub(c.url.Host) { + namespace = "library" } if len(name) == 0 { return nil, fmt.Errorf("image name must be specified") } searchTag := tag if len(searchTag) == 0 { - searchTag = imageapi.DefaultImageTag + searchTag = "latest" } repo, err := c.getCachedRepository(fmt.Sprintf("%s/%s", namespace, name)) @@ -315,12 +316,12 @@ func (c *connection) ImageManifest(namespace, name, tag string) (string, []byte, if len(name) == 0 { return "", nil, fmt.Errorf("image name must be specified") } - if len(namespace) == 0 && imageapi.IsRegistryDockerHub(c.url.Host) { - namespace = imageapi.DockerDefaultNamespace + if len(namespace) == 0 && reference.IsRegistryDockerHub(c.url.Host) { + namespace = "library" } searchTag := tag if len(searchTag) == 0 { - searchTag = imageapi.DefaultImageTag + searchTag = "latest" } repo, err := c.getCachedRepository(fmt.Sprintf("%s/%s", namespace, name))