This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit f6b4a599664ddf6e0cb492e0cdcc9195391e030c Author: nferraro <ni.ferr...@gmail.com> AuthorDate: Tue Dec 11 15:36:47 2018 +0100 Fix #221: use registry name instead of IP in Knative on Openshift --- pkg/builder/builder_types.go | 4 ++-- pkg/trait/builder.go | 22 ++++++++++++++++++++++ pkg/trait/builder_test.go | 10 ++++++++++ pkg/trait/knative.go | 2 ++ pkg/trait/springboot.go | 2 +- 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/pkg/builder/builder_types.go b/pkg/builder/builder_types.go index 47c59e0..7d7768d 100644 --- a/pkg/builder/builder_types.go +++ b/pkg/builder/builder_types.go @@ -31,8 +31,8 @@ import ( ) const ( - // IntiPhase -- - IntiPhase int32 = 0 + // InitPhase -- + InitPhase int32 = 0 // ProjectGenerationPhase -- ProjectGenerationPhase int32 = 10 // ProjectBuildPhase -- diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go index e495510..273bed7 100644 --- a/pkg/trait/builder.go +++ b/pkg/trait/builder.go @@ -23,6 +23,11 @@ import ( "github.com/apache/camel-k/pkg/builder/kaniko" "github.com/apache/camel-k/pkg/builder/s2i" "github.com/apache/camel-k/pkg/platform" + "regexp" +) + +const ( + openshiftDockerRegistryHost = "docker-registry.default.svc" ) // TODO: we should add a way to label a trait as platform so it cannot be disabled/removed @@ -58,6 +63,9 @@ func (t *builderTrait) Apply(e *Environment) error { if e.IntegrationContextInPhase(v1alpha1.IntegrationContextPhaseBuilding) { if platform.SupportsS2iPublishStrategy(e.Platform) { e.Steps = s2i.DefaultSteps + if e.DetermineProfile() == v1alpha1.TraitProfileKnative { + e.Steps = append(e.Steps, builder.NewStep("publisher/replaceHost", builder.ApplicationPublishPhase+1, t.ReplaceHost)) + } } else if platform.SupportsKanikoPublishStrategy(e.Platform) { e.Steps = kaniko.DefaultSteps e.BuildDir = kaniko.BuildDir @@ -71,6 +79,9 @@ func (t *builderTrait) Apply(e *Environment) error { builder.NewStep("publisher/s2i", builder.ApplicationPublishPhase, s2i.Publisher), builder.NewStep("notify/integration", builder.NotifyPhase, builder.NotifyIntegration), } + if e.DetermineProfile() == v1alpha1.TraitProfileKnative { + e.Steps = append(e.Steps, builder.NewStep("publisher/replaceHost", builder.ApplicationPublishPhase+1, t.ReplaceHost)) + } } else if platform.SupportsKanikoPublishStrategy(e.Platform) { e.Steps = []builder.Step{ builder.NewStep("packager", builder.ApplicationPackagePhase, builder.StandardPackager), @@ -83,3 +94,14 @@ func (t *builderTrait) Apply(e *Environment) error { return nil } + +func (t *builderTrait) ReplaceHost(ctx *builder.Context) error { + ctx.Image = getImageWithOpenShiftHost(ctx.Image) + return nil +} + +func getImageWithOpenShiftHost(image string) string { + pattern := regexp.MustCompile(`^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+([:/].*)`) + return pattern.ReplaceAllString(image, openshiftDockerRegistryHost+"$1") + return image +} diff --git a/pkg/trait/builder_test.go b/pkg/trait/builder_test.go index c4bb0ee..cb9147f 100644 --- a/pkg/trait/builder_test.go +++ b/pkg/trait/builder_test.go @@ -141,3 +141,13 @@ func createBuilderTestEnv(cluster v1alpha1.IntegrationPlatformCluster, strategy Resources: kubernetes.NewCollection(), } } + +func TestIPReplacement(t *testing.T) { + assert.Equal(t, "docker-registry.default.svc:5000/myproject/camel-k:1234", getImageWithOpenShiftHost("172.30.1.1:5000/myproject/camel-k:1234")) + assert.Equal(t, "docker-registry.default.svc/myproject/camel-k:1234", getImageWithOpenShiftHost("172.30.1.1/myproject/camel-k:1234")) + assert.Equal(t, "docker-registry.default.svc/myproject/camel-k:1234", getImageWithOpenShiftHost("10.0.0.1/myproject/camel-k:1234")) + assert.Equal(t, "docker-registry.default.svc/camel-k", getImageWithOpenShiftHost("10.0.0.1/camel-k")) + assert.Equal(t, "10.0.2.3.4/camel-k", getImageWithOpenShiftHost("10.0.2.3.4/camel-k")) + assert.Equal(t, "gcr.io/camel-k/camel-k:latest", getImageWithOpenShiftHost("gcr.io/camel-k/camel-k:latest")) + assert.Equal(t, "docker.io/camel-k:latest", getImageWithOpenShiftHost("docker.io/camel-k:latest")) +} \ No newline at end of file diff --git a/pkg/trait/knative.go b/pkg/trait/knative.go index a40abb3..93e16a0 100644 --- a/pkg/trait/knative.go +++ b/pkg/trait/knative.go @@ -169,6 +169,8 @@ func (t *knativeTrait) getServiceFor(e *Environment) *serving.Service { } annotations := make(map[string]string) + // Resolve registry host names when used + annotations["alpha.image.policy.openshift.io/resolve-names"] = "*" if t.MinScale != nil { annotations[knativeMinScaleAnnotation] = strconv.Itoa(*t.MinScale) } diff --git a/pkg/trait/springboot.go b/pkg/trait/springboot.go index 522a526..116c684 100644 --- a/pkg/trait/springboot.go +++ b/pkg/trait/springboot.go @@ -107,7 +107,7 @@ func (t *springBootTrait) Apply(e *Environment) error { if e.Context != nil && e.Context.Status.Phase == v1alpha1.IntegrationContextPhaseBuilding { // add custom initialization logic - e.Steps = append(e.Steps, builder.NewStep("initialize/spring-boot", builder.IntiPhase, springboot.Initialize)) + e.Steps = append(e.Steps, builder.NewStep("initialize/spring-boot", builder.InitPhase, springboot.Initialize)) e.Steps = append(e.Steps, builder.NewStep("build/compute-boot-dependencies", builder.ProjectBuildPhase+1, springboot.ComputeDependencies)) // replace project generator