This is an automated email from the ASF dual-hosted git repository. nferraro pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 23e73a596c7e984c7e00d3df713f55bce92f4c0e Author: Nicola Ferraro <[email protected]> AuthorDate: Mon Dec 9 10:51:43 2019 +0100 Fix #1120: do not change spec in platform --- .../camel/v1alpha1/integrationplatform_types.go | 1 + .../v1alpha1/integrationplatform_types_support.go | 19 ++ pkg/cmd/describe_platform.go | 23 ++- pkg/controller/integrationkit/build.go | 2 +- pkg/controller/integrationplatform/create.go | 4 +- pkg/controller/integrationplatform/create_test.go | 5 +- pkg/controller/integrationplatform/initialize.go | 170 +---------------- .../integrationplatform/initialize_test.go | 32 ++-- pkg/controller/integrationplatform/kaniko_cache.go | 4 +- pkg/controller/integrationplatform/monitor.go | 6 + pkg/controller/integrationplatform/warm_test.go | 7 + pkg/platform/defaults.go | 201 +++++++++++++++++++++ pkg/platform/platform.go | 15 +- pkg/trait/builder_test.go | 10 +- pkg/trait/camel.go | 6 +- pkg/trait/container_test.go | 2 + pkg/trait/deployment_test.go | 1 + pkg/trait/environment_test.go | 3 + pkg/trait/istio_test.go | 1 + pkg/trait/knative_service_test.go | 2 + pkg/trait/knative_test.go | 2 + pkg/trait/pull_secret.go | 2 +- pkg/trait/quarkus.go | 14 +- pkg/trait/rest-dsl.go | 6 +- pkg/trait/route_test.go | 4 +- pkg/trait/service_test.go | 3 + pkg/trait/trait_catalog.go | 4 +- pkg/trait/trait_test.go | 5 +- pkg/trait/util_test.go | 2 + script/Makefile | 2 +- 30 files changed, 339 insertions(+), 219 deletions(-) diff --git a/pkg/apis/camel/v1alpha1/integrationplatform_types.go b/pkg/apis/camel/v1alpha1/integrationplatform_types.go index 72aaea7..f21b207 100644 --- a/pkg/apis/camel/v1alpha1/integrationplatform_types.go +++ b/pkg/apis/camel/v1alpha1/integrationplatform_types.go @@ -41,6 +41,7 @@ type IntegrationPlatformResourcesSpec struct { // IntegrationPlatformStatus defines the observed state of IntegrationPlatform type IntegrationPlatformStatus struct { + FullConfig IntegrationPlatformSpec `json:"fullConfig,omitempty"` Phase IntegrationPlatformPhase `json:"phase,omitempty"` Conditions []IntegrationPlatformCondition `json:"conditions,omitempty"` Version string `json:"version,omitempty"` diff --git a/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go b/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go index 1edbdbd..6ca9029 100644 --- a/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go +++ b/pkg/apis/camel/v1alpha1/integrationplatform_types_support.go @@ -73,6 +73,10 @@ func (in *IntegrationPlatform) Configurations() []ConfigurationSpec { return []ConfigurationSpec{} } + if len(in.Status.FullConfig.Configuration) > 0 { + return in.Status.FullConfig.Configuration + } + return in.Spec.Configuration } @@ -84,6 +88,21 @@ func (in *IntegrationPlatform) AddConfiguration(confType string, confValue strin }) } +// GetActualValue can be used to extract information the platform spec or its derived config in the status +func (in *IntegrationPlatform) GetActualValue(extractor func(spec IntegrationPlatformSpec) string) string { + res := extractor(in.Status.FullConfig) + if res == "" { + res = extractor(in.Spec) + } + return res +} + +// ResyncStatusFullConfig copies the spec configuration into the status-fullConfig field. +func (in *IntegrationPlatform) ResyncStatusFullConfig() { + cl := in.Spec.DeepCopy() + in.Status.FullConfig = *cl +} + // GetCondition returns the condition with the provided type. func (in *IntegrationPlatformStatus) GetCondition(condType IntegrationPlatformConditionType) *IntegrationPlatformCondition { for i := range in.Conditions { diff --git a/pkg/cmd/describe_platform.go b/pkg/cmd/describe_platform.go index 58e74a1..bab719f 100644 --- a/pkg/cmd/describe_platform.go +++ b/pkg/cmd/describe_platform.go @@ -90,17 +90,26 @@ func (command *describePlatformCommand) describeIntegrationPlatform(platform v1a describeObjectMeta(w, platform.ObjectMeta) w.Write(0, "Phase:\t%s\n", platform.Status.Phase) w.Write(0, "Version:\t%s\n", platform.Status.Version) - w.Write(0, "Base Image:\t%s\n", platform.Spec.Build.BaseImage) - w.Write(0, "Camel Version:\t%s\n", platform.Spec.Build.CamelVersion) - w.Write(0, "Local Repository:\t%s\n", platform.Spec.Build.Maven.LocalRepository) - w.Write(0, "Publish Strategy:\t%s\n", platform.Spec.Build.PublishStrategy) - - if len(platform.Spec.Resources.Kits) > 0 { + w.Write(0, "Base Image:\t%s\n", platform.GetActualValue(getPlatformBaseImage)) + w.Write(0, "Camel Version:\t%s\n", platform.GetActualValue(getPlatformCamelVersion)) + w.Write(0, "Local Repository:\t%s\n", platform.GetActualValue(getPlatformMavenLocalRepository)) + w.Write(0, "Publish Strategy:\t%s\n", platform.GetActualValue(getPlatformPublishStrategy)) + + kits := platform.Status.FullConfig.Resources.Kits + if len(kits) == 0 { + kits = platform.Spec.Resources.Kits + } + if len(kits) > 0 { w.Write(0, "Resources:\n") w.Write(1, "Kits:\n") - for _, kit := range platform.Spec.Resources.Kits { + for _, kit := range kits { w.Write(2, "%s\n", kit) } } }) } + +func getPlatformBaseImage(spec v1alpha1.IntegrationPlatformSpec) string {return spec.Build.BaseImage} +func getPlatformCamelVersion(spec v1alpha1.IntegrationPlatformSpec) string {return spec.Build.CamelVersion} +func getPlatformMavenLocalRepository(spec v1alpha1.IntegrationPlatformSpec) string {return spec.Build.Maven.LocalRepository} +func getPlatformPublishStrategy(spec v1alpha1.IntegrationPlatformSpec) string {return string(spec.Build.PublishStrategy)} diff --git a/pkg/controller/integrationkit/build.go b/pkg/controller/integrationkit/build.go index a7f2319..3a785f0 100644 --- a/pkg/controller/integrationkit/build.go +++ b/pkg/controller/integrationkit/build.go @@ -96,7 +96,7 @@ func (action *buildAction) handleBuildSubmitted(ctx context.Context, kit *v1alph CamelVersion: env.CamelCatalog.Version, RuntimeVersion: env.CamelCatalog.RuntimeVersion, RuntimeProvider: env.CamelCatalog.RuntimeProvider, - Platform: env.Platform.Spec, + Platform: env.Platform.Status.FullConfig, Dependencies: kit.Spec.Dependencies, // TODO: sort for easy read Steps: builder.StepIDsFor(env.Steps...), diff --git a/pkg/controller/integrationplatform/create.go b/pkg/controller/integrationplatform/create.go index 5fccaa7..ee9a3fc 100644 --- a/pkg/controller/integrationplatform/create.go +++ b/pkg/controller/integrationplatform/create.go @@ -56,10 +56,10 @@ func (action *createAction) Handle(ctx context.Context, platform *v1alpha1.Integ } } - if l := len(platform.Spec.Resources.Kits); l > 0 { + if l := len(platform.Status.FullConfig.Resources.Kits); l > 0 { res := make([]string, 0, l) - for _, c := range platform.Spec.Resources.Kits { + for _, c := range platform.Status.FullConfig.Resources.Kits { // // Assuming that if the resource ends with a yaml extension, the full // resource name is provided diff --git a/pkg/controller/integrationplatform/create_test.go b/pkg/controller/integrationplatform/create_test.go index 2670eb7..0cfabca 100644 --- a/pkg/controller/integrationplatform/create_test.go +++ b/pkg/controller/integrationplatform/create_test.go @@ -23,8 +23,8 @@ import ( "testing" "github.com/apache/camel-k/deploy" - "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" + "github.com/apache/camel-k/pkg/platform" "github.com/apache/camel-k/pkg/util/log" "github.com/apache/camel-k/pkg/util/test" "github.com/rs/xid" @@ -41,6 +41,9 @@ func TestCreate(t *testing.T) { c, err := test.NewFakeClient(&ip) assert.Nil(t, err) + err = platform.ConfigureDefaults(context.TODO(), c, &ip, false) + assert.Nil(t, err) + h := NewCreateAction() h.InjectLogger(log.Log) h.InjectClient(c) diff --git a/pkg/controller/integrationplatform/initialize.go b/pkg/controller/integrationplatform/initialize.go index 663a3b5..c6b1c09 100644 --- a/pkg/controller/integrationplatform/initialize.go +++ b/pkg/controller/integrationplatform/initialize.go @@ -19,10 +19,6 @@ package integrationplatform import ( "context" - "fmt" - "time" - - "github.com/apache/camel-k/pkg/util/maven" corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -31,10 +27,8 @@ import ( "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" "github.com/apache/camel-k/pkg/client" - "github.com/apache/camel-k/pkg/util/defaults" - "github.com/apache/camel-k/pkg/util/openshift" - platformutil "github.com/apache/camel-k/pkg/platform" + "github.com/apache/camel-k/pkg/util/defaults" ) // NewInitializeAction returns a action that initializes the platform configuration when not provided by the user @@ -71,62 +65,11 @@ func (action *initializeAction) Handle(ctx context.Context, platform *v1alpha1.I return nil, nil } - // update missing fields in the resource - if platform.Spec.Cluster == "" { - // determine the kind of cluster the platform is installed into - isOpenShift, err := openshift.IsOpenShift(action.client) - switch { - case err != nil: - return nil, err - case isOpenShift: - platform.Spec.Cluster = v1alpha1.IntegrationPlatformClusterOpenShift - default: - platform.Spec.Cluster = v1alpha1.IntegrationPlatformClusterKubernetes - } - } - - if platform.Spec.Build.PublishStrategy == "" { - if platform.Spec.Cluster == v1alpha1.IntegrationPlatformClusterOpenShift { - platform.Spec.Build.PublishStrategy = v1alpha1.IntegrationPlatformBuildPublishStrategyS2I - } else { - platform.Spec.Build.PublishStrategy = v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko - } - } - - if platform.Spec.Build.BuildStrategy == "" { - // If the operator is global, a global build strategy should be used - if platformutil.IsCurrentOperatorGlobal() { - // The only global strategy we have for now - platform.Spec.Build.BuildStrategy = v1alpha1.IntegrationPlatformBuildStrategyPod - } else { - if platform.Spec.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko { - // The build output has to be shared with Kaniko via a persistent volume - platform.Spec.Build.BuildStrategy = v1alpha1.IntegrationPlatformBuildStrategyPod - } else { - platform.Spec.Build.BuildStrategy = v1alpha1.IntegrationPlatformBuildStrategyRoutine - } - } - } - - err = action.setDefaults(ctx, platform) - if err != nil { + if err = platformutil.ConfigureDefaults(ctx, action.client, platform, true); err != nil { return nil, err } - if platform.Spec.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko && platform.Spec.Build.Registry.Address == "" { - action.L.Info("No registry specified for publishing images") - } - - if platform.Spec.Build.Maven.Timeout.Duration != 0 { - action.L.Infof("Maven Timeout set to %s", platform.Spec.Build.Maven.Timeout.Duration) - } - - err = action.client.Update(ctx, platform) - if err != nil { - return nil, err - } - - if platform.Spec.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko { + if platform.Status.FullConfig.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko { // Create the persistent volume claim used to coordinate build pod output // with Kaniko cache and build input action.L.Info("Create persistent volume claim") @@ -135,7 +78,7 @@ func (action *initializeAction) Handle(ctx context.Context, platform *v1alpha1.I return nil, err } - if platform.Spec.Build.IsKanikoCacheEnabled() { + if platform.Status.FullConfig.Build.IsKanikoCacheEnabled() { // Create the Kaniko warmer pod that caches the base image into the Camel K builder volume action.L.Info("Create Kaniko cache warmer pod") err = createKanikoCacheWarmerPod(ctx, action.client, platform) @@ -170,97 +113,6 @@ func (action *initializeAction) isDuplicate(ctx context.Context, thisPlatform *v return false, nil } -func (action *initializeAction) setDefaults(ctx context.Context, platform *v1alpha1.IntegrationPlatform) error { - if platform.Spec.Profile == "" { - platform.Spec.Profile = platformutil.DetermineBestProfile(ctx, action.client, platform) - } - if platform.Spec.Build.CamelVersion == "" { - platform.Spec.Build.CamelVersion = defaults.CamelVersionConstraint - } - if platform.Spec.Build.RuntimeVersion == "" { - platform.Spec.Build.RuntimeVersion = defaults.RuntimeVersionConstraint - } - if platform.Spec.Build.BaseImage == "" { - platform.Spec.Build.BaseImage = defaults.BaseImage - } - if platform.Spec.Build.Maven.LocalRepository == "" { - platform.Spec.Build.Maven.LocalRepository = defaults.LocalRepository - } - if platform.Spec.Build.PersistentVolumeClaim == "" { - platform.Spec.Build.PersistentVolumeClaim = platform.Name - } - - if platform.Spec.Build.Timeout.Duration != 0 { - d := platform.Spec.Build.Timeout.Duration.Truncate(time.Second) - - if platform.Spec.Build.Timeout.Duration != d { - action.L.Infof("Build timeout minimum unit is sec (configured: %s, truncated: %s)", platform.Spec.Build.Timeout.Duration, d) - } - - platform.Spec.Build.Timeout.Duration = d - } - if platform.Spec.Build.Timeout.Duration == 0 { - platform.Spec.Build.Timeout.Duration = 5 * time.Minute - } - - if platform.Spec.Build.Maven.Timeout.Duration != 0 { - d := platform.Spec.Build.Maven.Timeout.Duration.Truncate(time.Second) - - if platform.Spec.Build.Maven.Timeout.Duration != d { - action.L.Infof("Maven timeout minimum unit is sec (configured: %s, truncated: %s)", platform.Spec.Build.Maven.Timeout.Duration, d) - } - - platform.Spec.Build.Maven.Timeout.Duration = d - } - if platform.Spec.Build.Maven.Timeout.Duration == 0 { - n := platform.Spec.Build.Timeout.Duration.Seconds() * 0.75 - platform.Spec.Build.Maven.Timeout.Duration = (time.Duration(n) * time.Second).Truncate(time.Second) - } - - if platform.Spec.Build.Maven.Settings.ConfigMapKeyRef == nil && platform.Spec.Build.Maven.Settings.SecretKeyRef == nil { - var repositories []maven.Repository - for i, c := range platform.Spec.Configuration { - if c.Type == "repository" { - repository := maven.NewRepository(c.Value) - if repository.ID == "" { - repository.ID = fmt.Sprintf("repository-%03d", i) - } - repositories = append(repositories, repository) - } - } - - settings := maven.NewDefaultSettings(repositories) - - err := createMavenSettingsConfigMap(ctx, action.client, platform, settings) - if err != nil { - return err - } - - platform.Spec.Build.Maven.Settings.ConfigMapKeyRef = &corev1.ConfigMapKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: platform.Name + "-maven-settings", - }, - Key: "settings.xml", - } - } - - if platform.Spec.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko && platform.Spec.Build.KanikoBuildCache == nil { - // Default to using Kaniko cache warmer - defaultKanikoBuildCache := true - platform.Spec.Build.KanikoBuildCache = &defaultKanikoBuildCache - action.L.Infof("Kaniko cache set to %t", *platform.Spec.Build.KanikoBuildCache) - } - - action.L.Infof("CamelVersion set to %s", platform.Spec.Build.CamelVersion) - action.L.Infof("RuntimeVersion set to %s", platform.Spec.Build.RuntimeVersion) - action.L.Infof("BaseImage set to %s", platform.Spec.Build.BaseImage) - action.L.Infof("LocalRepository set to %s", platform.Spec.Build.Maven.LocalRepository) - action.L.Infof("Timeout set to %s", platform.Spec.Build.Timeout) - action.L.Infof("Maven Timeout set to %s", platform.Spec.Build.Maven.Timeout.Duration) - - return nil -} - func createPersistentVolumeClaim(ctx context.Context, client client.Client, platform *v1alpha1.IntegrationPlatform) error { volumeSize, err := resource.ParseQuantity("1Gi") if err != nil { @@ -299,17 +151,3 @@ func createPersistentVolumeClaim(ctx context.Context, client client.Client, plat return nil } - -func createMavenSettingsConfigMap(ctx context.Context, client client.Client, platform *v1alpha1.IntegrationPlatform, settings maven.Settings) error { - cm, err := maven.CreateSettingsConfigMap(platform.Namespace, platform.Name, settings) - if err != nil { - return err - } - - err = client.Create(ctx, cm) - if err != nil && !k8serrors.IsAlreadyExists(err) { - return err - } - - return nil -} diff --git a/pkg/controller/integrationplatform/initialize_test.go b/pkg/controller/integrationplatform/initialize_test.go index e744a9d..d465cbe 100644 --- a/pkg/controller/integrationplatform/initialize_test.go +++ b/pkg/controller/integrationplatform/initialize_test.go @@ -22,6 +22,7 @@ import ( "testing" "time" + "github.com/apache/camel-k/pkg/platform" "github.com/rs/xid" "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" @@ -42,6 +43,8 @@ func TestTimeouts_Default(t *testing.T) { c, err := test.NewFakeClient(&ip) assert.Nil(t, err) + assert.Nil(t, platform.ConfigureDefaults(context.TODO(), c, &ip, false)) + h := NewInitializeAction() h.InjectLogger(log.Log) h.InjectClient(c) @@ -50,11 +53,11 @@ func TestTimeouts_Default(t *testing.T) { assert.Nil(t, err) assert.NotNil(t, answer) - n := answer.Spec.Build.Timeout.Duration.Seconds() * 0.75 + n := answer.Status.FullConfig.Build.Timeout.Duration.Seconds() * 0.75 d := (time.Duration(n) * time.Second).Truncate(time.Second) - assert.Equal(t, d, answer.Spec.Build.Maven.Timeout.Duration) - assert.Equal(t, 5*time.Minute, answer.Spec.Build.Timeout.Duration) + assert.Equal(t, d, answer.Status.FullConfig.Build.Maven.Timeout.Duration) + assert.Equal(t, 5*time.Minute, answer.Status.FullConfig.Build.Timeout.Duration) } func TestTimeouts_MavenComputedFromBuild(t *testing.T) { @@ -73,6 +76,8 @@ func TestTimeouts_MavenComputedFromBuild(t *testing.T) { c, err := test.NewFakeClient(&ip) assert.Nil(t, err) + assert.Nil(t, platform.ConfigureDefaults(context.TODO(), c, &ip, false)) + h := NewInitializeAction() h.InjectLogger(log.Log) h.InjectClient(c) @@ -81,11 +86,11 @@ func TestTimeouts_MavenComputedFromBuild(t *testing.T) { assert.Nil(t, err) assert.NotNil(t, answer) - n := answer.Spec.Build.Timeout.Duration.Seconds() * 0.75 + n := answer.Status.FullConfig.Build.Timeout.Duration.Seconds() * 0.75 d := (time.Duration(n) * time.Second).Truncate(time.Second) - assert.Equal(t, d, answer.Spec.Build.Maven.Timeout.Duration) - assert.Equal(t, 1*time.Minute, answer.Spec.Build.Timeout.Duration) + assert.Equal(t, d, answer.Status.FullConfig.Build.Maven.Timeout.Duration) + assert.Equal(t, 1*time.Minute, answer.Status.FullConfig.Build.Timeout.Duration) } func TestTimeouts_Truncated(t *testing.T) { @@ -111,6 +116,8 @@ func TestTimeouts_Truncated(t *testing.T) { c, err := test.NewFakeClient(&ip) assert.Nil(t, err) + assert.Nil(t, platform.ConfigureDefaults(context.TODO(), c, &ip, false)) + h := NewInitializeAction() h.InjectLogger(log.Log) h.InjectClient(c) @@ -119,8 +126,8 @@ func TestTimeouts_Truncated(t *testing.T) { assert.Nil(t, err) assert.NotNil(t, answer) - assert.Equal(t, 2*time.Minute, answer.Spec.Build.Maven.Timeout.Duration) - assert.Equal(t, 5*time.Minute, answer.Spec.Build.Timeout.Duration) + assert.Equal(t, 2*time.Minute, answer.Status.FullConfig.Build.Maven.Timeout.Duration) + assert.Equal(t, 5*time.Minute, answer.Status.FullConfig.Build.Timeout.Duration) } func TestDefaultMavenSettingsApplied(t *testing.T) { @@ -132,6 +139,8 @@ func TestDefaultMavenSettingsApplied(t *testing.T) { c, err := test.NewFakeClient(&ip) assert.Nil(t, err) + assert.Nil(t, platform.ConfigureDefaults(context.TODO(), c, &ip, false)) + h := NewInitializeAction() h.InjectLogger(log.Log) h.InjectClient(c) @@ -140,7 +149,8 @@ func TestDefaultMavenSettingsApplied(t *testing.T) { assert.Nil(t, err) assert.NotNil(t, answer) - assert.NotNil(t, answer.Spec.Build.Maven.Settings.ConfigMapKeyRef) - assert.Equal(t, "test-platform-maven-settings", answer.Spec.Build.Maven.Settings.ConfigMapKeyRef.Name) - assert.Equal(t, "settings.xml", answer.Spec.Build.Maven.Settings.ConfigMapKeyRef.Key) + assert.NotNil(t, answer.Status.FullConfig.Build.Maven.Settings.ConfigMapKeyRef) + assert.Nil(t, answer.Spec.Build.Maven.Settings.ConfigMapKeyRef) + assert.Equal(t, "test-platform-maven-settings", answer.Status.FullConfig.Build.Maven.Settings.ConfigMapKeyRef.Name) + assert.Equal(t, "settings.xml", answer.Status.FullConfig.Build.Maven.Settings.ConfigMapKeyRef.Key) } diff --git a/pkg/controller/integrationplatform/kaniko_cache.go b/pkg/controller/integrationplatform/kaniko_cache.go index 217c50f..2e09d50 100644 --- a/pkg/controller/integrationplatform/kaniko_cache.go +++ b/pkg/controller/integrationplatform/kaniko_cache.go @@ -59,7 +59,7 @@ func createKanikoCacheWarmerPod(ctx context.Context, client client.Client, platf Image: fmt.Sprintf("gcr.io/kaniko-project/warmer:v%s", defaults.KanikoVersion), Args: []string{ "--cache-dir=/workspace/cache", - "--image=" + platform.Spec.Build.BaseImage, + "--image=" + platform.Status.FullConfig.Build.BaseImage, }, VolumeMounts: []corev1.VolumeMount{ { @@ -91,7 +91,7 @@ func createKanikoCacheWarmerPod(ctx context.Context, client client.Client, platf Name: "camel-k-builder", VolumeSource: corev1.VolumeSource{ PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{ - ClaimName: platform.Spec.Build.PersistentVolumeClaim, + ClaimName: platform.Status.FullConfig.Build.PersistentVolumeClaim, }, }, }, diff --git a/pkg/controller/integrationplatform/monitor.go b/pkg/controller/integrationplatform/monitor.go index d1e5390..380f3f1 100644 --- a/pkg/controller/integrationplatform/monitor.go +++ b/pkg/controller/integrationplatform/monitor.go @@ -21,6 +21,7 @@ import ( "context" "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" + platformutils "github.com/apache/camel-k/pkg/platform" "github.com/apache/camel-k/pkg/util/defaults" ) @@ -48,5 +49,10 @@ func (action *monitorAction) Handle(ctx context.Context, platform *v1alpha1.Inte action.L.Info("IntegrationPlatform version updated", "version", platform.Status.Version) } + // Refresh applied configuration + if err := platformutils.ConfigureDefaults(ctx, action.client, platform, false); err != nil { + return nil, err + } + return platform, nil } diff --git a/pkg/controller/integrationplatform/warm_test.go b/pkg/controller/integrationplatform/warm_test.go index 160cbc6..d564031 100644 --- a/pkg/controller/integrationplatform/warm_test.go +++ b/pkg/controller/integrationplatform/warm_test.go @@ -21,6 +21,7 @@ import ( "context" "testing" + "github.com/apache/camel-k/pkg/platform" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -54,6 +55,8 @@ func TestWarm_Succeeded(t *testing.T) { c, err := test.NewFakeClient(&ip, &pod) assert.Nil(t, err) + assert.Nil(t, platform.ConfigureDefaults(context.TODO(), c, &ip, false)) + h := NewWarmAction() h.InjectLogger(log.Log) h.InjectClient(c) @@ -86,6 +89,8 @@ func TestWarm_Failing(t *testing.T) { c, err := test.NewFakeClient(&ip, &pod) assert.Nil(t, err) + assert.Nil(t, platform.ConfigureDefaults(context.TODO(), c, &ip, false)) + h := NewWarmAction() h.InjectLogger(log.Log) h.InjectClient(c) @@ -118,6 +123,8 @@ func TestWarm_WarmingUp(t *testing.T) { c, err := test.NewFakeClient(&ip, &pod) assert.Nil(t, err) + assert.Nil(t, platform.ConfigureDefaults(context.TODO(), c, &ip, false)) + h := NewWarmAction() h.InjectLogger(log.Log) h.InjectClient(c) diff --git a/pkg/platform/defaults.go b/pkg/platform/defaults.go new file mode 100644 index 0000000..e3e768d --- /dev/null +++ b/pkg/platform/defaults.go @@ -0,0 +1,201 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package platform + +import ( + "context" + "fmt" + "time" + + "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" + "github.com/apache/camel-k/pkg/client" + "github.com/apache/camel-k/pkg/util/defaults" + "github.com/apache/camel-k/pkg/util/log" + "github.com/apache/camel-k/pkg/util/maven" + "github.com/apache/camel-k/pkg/util/openshift" + corev1 "k8s.io/api/core/v1" + k8serrors "k8s.io/apimachinery/pkg/api/errors" +) + +// ConfigureDefaults fills with default values all missing details about the integration platform. +// Defaults are set in the status->appliedConfiguration fields, not in the spec. +func ConfigureDefaults(ctx context.Context, c client.Client, p *v1alpha1.IntegrationPlatform, verbose bool) error { + // Reset the state to initial values + p.ResyncStatusFullConfig() + + // update missing fields in the resource + if p.Status.FullConfig.Cluster == "" { + // determine the kind of cluster the platform is installed into + isOpenShift, err := openshift.IsOpenShift(c) + switch { + case err != nil: + return err + case isOpenShift: + p.Status.FullConfig.Cluster = v1alpha1.IntegrationPlatformClusterOpenShift + default: + p.Status.FullConfig.Cluster = v1alpha1.IntegrationPlatformClusterKubernetes + } + } + + if p.Status.FullConfig.Build.PublishStrategy == "" { + if p.Status.FullConfig.Cluster == v1alpha1.IntegrationPlatformClusterOpenShift { + p.Status.FullConfig.Build.PublishStrategy = v1alpha1.IntegrationPlatformBuildPublishStrategyS2I + } else { + p.Status.FullConfig.Build.PublishStrategy = v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko + } + } + + if p.Status.FullConfig.Build.BuildStrategy == "" { + // If the operator is global, a global build strategy should be used + if IsCurrentOperatorGlobal() { + // The only global strategy we have for now + p.Status.FullConfig.Build.BuildStrategy = v1alpha1.IntegrationPlatformBuildStrategyPod + } else { + if p.Status.FullConfig.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko { + // The build output has to be shared with Kaniko via a persistent volume + p.Status.FullConfig.Build.BuildStrategy = v1alpha1.IntegrationPlatformBuildStrategyPod + } else { + p.Status.FullConfig.Build.BuildStrategy = v1alpha1.IntegrationPlatformBuildStrategyRoutine + } + } + } + + err := setPlatformDefaults(ctx, c, p, verbose) + if err != nil { + return err + } + + if verbose && p.Status.FullConfig.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko && p.Status.FullConfig.Build.Registry.Address == "" { + log.Log.Info("No registry specified for publishing images") + } + + if verbose && p.Status.FullConfig.Build.Maven.Timeout.Duration != 0 { + log.Log.Infof("Maven Timeout set to %s", p.Status.FullConfig.Build.Maven.Timeout.Duration) + } + + return nil +} + +func setPlatformDefaults(ctx context.Context, c client.Client, p *v1alpha1.IntegrationPlatform, verbose bool) error { + if p.Status.FullConfig.Profile == "" { + p.Status.FullConfig.Profile = DetermineBestProfile(ctx, c, p) + } + if p.Status.FullConfig.Build.CamelVersion == "" { + p.Status.FullConfig.Build.CamelVersion = defaults.CamelVersionConstraint + } + if p.Status.FullConfig.Build.RuntimeVersion == "" { + p.Status.FullConfig.Build.RuntimeVersion = defaults.RuntimeVersionConstraint + } + if p.Status.FullConfig.Build.BaseImage == "" { + p.Status.FullConfig.Build.BaseImage = defaults.BaseImage + } + if p.Status.FullConfig.Build.Maven.LocalRepository == "" { + p.Status.FullConfig.Build.Maven.LocalRepository = defaults.LocalRepository + } + if p.Status.FullConfig.Build.PersistentVolumeClaim == "" { + p.Status.FullConfig.Build.PersistentVolumeClaim = p.Name + } + + if p.Status.FullConfig.Build.Timeout.Duration != 0 { + d := p.Status.FullConfig.Build.Timeout.Duration.Truncate(time.Second) + + if verbose && p.Status.FullConfig.Build.Timeout.Duration != d { + log.Log.Infof("Build timeout minimum unit is sec (configured: %s, truncated: %s)", p.Status.FullConfig.Build.Timeout.Duration, d) + } + + p.Status.FullConfig.Build.Timeout.Duration = d + } + if p.Status.FullConfig.Build.Timeout.Duration == 0 { + p.Status.FullConfig.Build.Timeout.Duration = 5 * time.Minute + } + + if p.Status.FullConfig.Build.Maven.Timeout.Duration != 0 { + d := p.Status.FullConfig.Build.Maven.Timeout.Duration.Truncate(time.Second) + + if verbose && p.Status.FullConfig.Build.Maven.Timeout.Duration != d { + log.Log.Infof("Maven timeout minimum unit is sec (configured: %s, truncated: %s)", p.Status.FullConfig.Build.Maven.Timeout.Duration, d) + } + + p.Status.FullConfig.Build.Maven.Timeout.Duration = d + } + if p.Status.FullConfig.Build.Maven.Timeout.Duration == 0 { + n := p.Status.FullConfig.Build.Timeout.Duration.Seconds() * 0.75 + p.Status.FullConfig.Build.Maven.Timeout.Duration = (time.Duration(n) * time.Second).Truncate(time.Second) + } + + if p.Status.FullConfig.Build.Maven.Settings.ConfigMapKeyRef == nil && p.Status.FullConfig.Build.Maven.Settings.SecretKeyRef == nil { + var repositories []maven.Repository + for i, c := range p.Status.FullConfig.Configuration { + if c.Type == "repository" { + repository := maven.NewRepository(c.Value) + if repository.ID == "" { + repository.ID = fmt.Sprintf("repository-%03d", i) + } + repositories = append(repositories, repository) + } + } + + settings := maven.NewDefaultSettings(repositories) + + err := createDefaultMavenSettingsConfigMap(ctx, c, p, settings) + if err != nil { + return err + } + + p.Status.FullConfig.Build.Maven.Settings.ConfigMapKeyRef = &corev1.ConfigMapKeySelector { + LocalObjectReference: corev1.LocalObjectReference{ + Name: p.Name + "-maven-settings", + }, + Key: "settings.xml", + } + } + + if p.Status.FullConfig.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko && p.Status.FullConfig.Build.KanikoBuildCache == nil { + // Default to using Kaniko cache warmer + defaultKanikoBuildCache := true + p.Status.FullConfig.Build.KanikoBuildCache = &defaultKanikoBuildCache + if verbose { + log.Log.Infof("Kaniko cache set to %t", *p.Status.FullConfig.Build.KanikoBuildCache) + } + } + + if verbose { + log.Log.Infof("CamelVersion set to %s", p.Status.FullConfig.Build.CamelVersion) + log.Log.Infof("RuntimeVersion set to %s", p.Status.FullConfig.Build.RuntimeVersion) + log.Log.Infof("BaseImage set to %s", p.Status.FullConfig.Build.BaseImage) + log.Log.Infof("LocalRepository set to %s", p.Status.FullConfig.Build.Maven.LocalRepository) + log.Log.Infof("Timeout set to %s", p.Status.FullConfig.Build.Timeout) + log.Log.Infof("Maven Timeout set to %s", p.Status.FullConfig.Build.Maven.Timeout.Duration) + } + + return nil +} + +func createDefaultMavenSettingsConfigMap(ctx context.Context, client client.Client, p *v1alpha1.IntegrationPlatform, settings maven.Settings) error { + cm, err := maven.CreateSettingsConfigMap(p.Namespace, p.Name, settings) + if err != nil { + return err + } + + err = client.Create(ctx, cm) + if err != nil && !k8serrors.IsAlreadyExists(err) { + return err + } + + return nil +} diff --git a/pkg/platform/platform.go b/pkg/platform/platform.go index 83c2e82..7fb539a 100644 --- a/pkg/platform/platform.go +++ b/pkg/platform/platform.go @@ -99,8 +99,8 @@ func IsActive(p *v1alpha1.IntegrationPlatform) bool { // DetermineBestProfile tries to detect the best trait profile for the platform func DetermineBestProfile(ctx context.Context, c k8sclient.Reader, p *v1alpha1.IntegrationPlatform) v1alpha1.TraitProfile { - if p.Spec.Profile != "" { - return p.Spec.Profile + if p.Status.FullConfig.Profile != "" { + return p.Status.FullConfig.Profile } if knative.IsEnabledInNamespace(ctx, c, p.Namespace) { return v1alpha1.TraitProfileKnative @@ -110,10 +110,11 @@ func DetermineBestProfile(ctx context.Context, c k8sclient.Reader, p *v1alpha1.I // GetProfile returns the current profile of the platform (if present) or returns the default one for the cluster func GetProfile(p *v1alpha1.IntegrationPlatform) v1alpha1.TraitProfile { - if p.Spec.Profile != "" { - return p.Spec.Profile + if p.Status.FullConfig.Profile != "" { + return p.Status.FullConfig.Profile } - switch p.Spec.Cluster { + + switch p.Status.FullConfig.Cluster { case v1alpha1.IntegrationPlatformClusterKubernetes: return v1alpha1.TraitProfileKubernetes case v1alpha1.IntegrationPlatformClusterOpenShift: @@ -124,10 +125,10 @@ func GetProfile(p *v1alpha1.IntegrationPlatform) v1alpha1.TraitProfile { // SupportsS2iPublishStrategy -- func SupportsS2iPublishStrategy(p *v1alpha1.IntegrationPlatform) bool { - return p.Spec.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyS2I + return p.Status.FullConfig.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyS2I } // SupportsKanikoPublishStrategy -- func SupportsKanikoPublishStrategy(p *v1alpha1.IntegrationPlatform) bool { - return p.Spec.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko && p.Spec.Build.Registry.Address != "" + return p.Status.FullConfig.Build.PublishStrategy == v1alpha1.IntegrationPlatformBuildPublishStrategyKaniko && p.Status.FullConfig.Build.Registry.Address != "" } diff --git a/pkg/trait/builder_test.go b/pkg/trait/builder_test.go index 9fa42bf..87dea37 100644 --- a/pkg/trait/builder_test.go +++ b/pkg/trait/builder_test.go @@ -46,7 +46,7 @@ func TestBuilderTraitNotAppliedBecauseOfNilKit(t *testing.T) { e := e // pin e.IntegrationKit = nil - t.Run(string(e.Platform.Spec.Cluster), func(t *testing.T) { + t.Run(string(e.Platform.Status.FullConfig.Cluster), func(t *testing.T) { err := NewBuilderTestCatalog().apply(e) assert.Nil(t, err) @@ -67,7 +67,7 @@ func TestBuilderTraitNotAppliedBecauseOfNilPhase(t *testing.T) { e := e // pin e.IntegrationKit.Status.Phase = v1alpha1.IntegrationKitPhaseInitialization - t.Run(string(e.Platform.Spec.Cluster), func(t *testing.T) { + t.Run(string(e.Platform.Status.FullConfig.Cluster), func(t *testing.T) { err := NewBuilderTestCatalog().apply(e) assert.Nil(t, err) @@ -124,7 +124,7 @@ func createBuilderTestEnv(cluster v1alpha1.IntegrationPlatformCluster, strategy panic(err) } - return &Environment{ + res := &Environment{ C: context.TODO(), CamelCatalog: c, Catalog: NewCatalog(context.TODO(), nil), @@ -157,6 +157,10 @@ func createBuilderTestEnv(cluster v1alpha1.IntegrationPlatformCluster, strategy Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + + res.Platform.ResyncStatusFullConfig() + + return res } func NewBuilderTestCatalog() *Catalog { diff --git a/pkg/trait/camel.go b/pkg/trait/camel.go index ca59d11..95e9669 100644 --- a/pkg/trait/camel.go +++ b/pkg/trait/camel.go @@ -105,7 +105,7 @@ func (t *camelTrait) loadOrCreateCatalog(e *Environment, camelVersion string, ru // the required versions (camel and runtime) are not expressed as // semver constraints if exactVersionRegexp.MatchString(camelVersion) && exactVersionRegexp.MatchString(runtimeVersion) { - catalog, err = camel.GenerateCatalog(e.C, e.Client, ns, e.Platform.Spec.Build.Maven, camelVersion, runtimeVersion) + catalog, err = camel.GenerateCatalog(e.C, e.Client, ns, e.Platform.Status.FullConfig.Build.Maven, camelVersion, runtimeVersion) if err != nil { return err } @@ -148,7 +148,7 @@ func (t *camelTrait) determineCamelVersion(e *Environment) string { if e.IntegrationKit != nil && e.IntegrationKit.Status.CamelVersion != "" { return e.IntegrationKit.Status.CamelVersion } - return e.Platform.Spec.Build.CamelVersion + return e.Platform.Status.FullConfig.Build.CamelVersion } func (t *camelTrait) determineRuntimeVersion(e *Environment) string { @@ -161,7 +161,7 @@ func (t *camelTrait) determineRuntimeVersion(e *Environment) string { if e.IntegrationKit != nil && e.IntegrationKit.Status.RuntimeVersion != "" { return e.IntegrationKit.Status.RuntimeVersion } - return e.Platform.Spec.Build.RuntimeVersion + return e.Platform.Status.FullConfig.Build.RuntimeVersion } // IsPlatformTrait overrides base class method diff --git a/pkg/trait/container_test.go b/pkg/trait/container_test.go index 90b9613..f66c0c8 100644 --- a/pkg/trait/container_test.go +++ b/pkg/trait/container_test.go @@ -72,6 +72,7 @@ func TestContainerWithDefaults(t *testing.T) { Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + environment.Platform.ResyncStatusFullConfig() err = traitCatalog.apply(&environment) @@ -134,6 +135,7 @@ func TestContainerWithCustomName(t *testing.T) { Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + environment.Platform.ResyncStatusFullConfig() err = traitCatalog.apply(&environment) diff --git a/pkg/trait/deployment_test.go b/pkg/trait/deployment_test.go index 15a30df..9d45328 100644 --- a/pkg/trait/deployment_test.go +++ b/pkg/trait/deployment_test.go @@ -199,6 +199,7 @@ func createNominalDeploymentTest() (*deploymentTrait, *Environment) { }, Resources: kubernetes.NewCollection(), } + environment.Platform.ResyncStatusFullConfig() return trait, environment } diff --git a/pkg/trait/environment_test.go b/pkg/trait/environment_test.go index 977ab4b..e13a472 100644 --- a/pkg/trait/environment_test.go +++ b/pkg/trait/environment_test.go @@ -66,6 +66,7 @@ func TestDefaultEnvironment(t *testing.T) { Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + env.Platform.ResyncStatusFullConfig() err = NewEnvironmentTestCatalog().apply(&env) @@ -134,6 +135,7 @@ func TestEnabledContainerMetaDataEnvVars(t *testing.T) { Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + env.Platform.ResyncStatusFullConfig() err = NewEnvironmentTestCatalog().apply(&env) @@ -202,6 +204,7 @@ func TestDisabledContainerMetaDataEnvVars(t *testing.T) { Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + env.Platform.ResyncStatusFullConfig() err = NewEnvironmentTestCatalog().apply(&env) diff --git a/pkg/trait/istio_test.go b/pkg/trait/istio_test.go index b68d374..92d91bf 100644 --- a/pkg/trait/istio_test.go +++ b/pkg/trait/istio_test.go @@ -64,6 +64,7 @@ func NewIstioTestEnv(t *testing.T, d *appsv1.Deployment, s *serving.Service, ena EnvVars: make([]corev1.EnvVar, 0), Resources: kubernetes.NewCollection(s, d), } + env.Platform.ResyncStatusFullConfig() if enabled { env.Integration.Spec.Traits["istio"].Configuration["enabled"] = "true" diff --git a/pkg/trait/knative_service_test.go b/pkg/trait/knative_service_test.go index faad1b2..5da9b54 100644 --- a/pkg/trait/knative_service_test.go +++ b/pkg/trait/knative_service_test.go @@ -112,6 +112,7 @@ func TestKnativeService(t *testing.T) { Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + environment.Platform.ResyncStatusFullConfig() err = traitCatalog.apply(&environment) @@ -238,6 +239,7 @@ func TestKnativeServiceWithCustomContainerName(t *testing.T) { Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + environment.Platform.ResyncStatusFullConfig() err = traitCatalog.apply(&environment) diff --git a/pkg/trait/knative_test.go b/pkg/trait/knative_test.go index 3596188..716059c 100644 --- a/pkg/trait/knative_test.go +++ b/pkg/trait/knative_test.go @@ -98,6 +98,7 @@ func TestKnativeEnvConfigurationFromTrait(t *testing.T) { Resources: k8sutils.NewCollection(), Classpath: strset.New(), } + environment.Platform.ResyncStatusFullConfig() c, err := NewFakeClient("ns") assert.Nil(t, err) @@ -207,6 +208,7 @@ func TestKnativeEnvConfigurationFromSource(t *testing.T) { Resources: k8sutils.NewCollection(), Classpath: strset.New(), } + environment.Platform.ResyncStatusFullConfig() c, err := NewFakeClient("ns") assert.Nil(t, err) diff --git a/pkg/trait/pull_secret.go b/pkg/trait/pull_secret.go index db79632..56394cc 100644 --- a/pkg/trait/pull_secret.go +++ b/pkg/trait/pull_secret.go @@ -60,7 +60,7 @@ func (t *pullSecretTrait) Configure(e *Environment) (bool, error) { if t.Auto == nil || *t.Auto { if t.SecretName == "" { - secret := e.Platform.Spec.Build.Registry.Secret + secret := e.Platform.Status.FullConfig.Build.Registry.Secret if secret != "" { key := client.ObjectKey{Namespace: e.Platform.Namespace, Name: secret} obj := v1.Secret{} diff --git a/pkg/trait/quarkus.go b/pkg/trait/quarkus.go index 8cbb165..3696aa8 100644 --- a/pkg/trait/quarkus.go +++ b/pkg/trait/quarkus.go @@ -94,7 +94,7 @@ func (t *quarkusTrait) loadOrCreateCatalog(e *Environment, camelVersion string, // semver constraints if exactVersionRegexp.MatchString(camelVersion) && exactVersionRegexp.MatchString(runtimeVersion) && exactVersionRegexp.MatchString(camelQuarkusVersion) && exactVersionRegexp.MatchString(quarkusVersion) { - catalog, err = camel.GenerateCatalogWithProvider(e.C, e.Client, ns, e.Platform.Spec.Build.Maven, camelVersion, runtimeVersion, + catalog, err = camel.GenerateCatalogWithProvider(e.C, e.Client, ns, e.Platform.Status.FullConfig.Build.Maven, camelVersion, runtimeVersion, "quarkus", []maven.Dependency{ { @@ -201,9 +201,9 @@ func (t *quarkusTrait) determineQuarkusVersion(e *Environment) string { e.IntegrationKit.Status.RuntimeProvider.Quarkus.QuarkusVersion != "" { return e.IntegrationKit.Status.RuntimeProvider.Quarkus.QuarkusVersion } - if e.Platform.Spec.Build.RuntimeProvider != nil && e.Platform.Spec.Build.RuntimeProvider.Quarkus != nil && - e.Platform.Spec.Build.RuntimeProvider.Quarkus.QuarkusVersion != "" { - return e.Platform.Spec.Build.RuntimeProvider.Quarkus.QuarkusVersion + if e.Platform.Status.FullConfig.Build.RuntimeProvider != nil && e.Platform.Status.FullConfig.Build.RuntimeProvider.Quarkus != nil && + e.Platform.Status.FullConfig.Build.RuntimeProvider.Quarkus.QuarkusVersion != "" { + return e.Platform.Status.FullConfig.Build.RuntimeProvider.Quarkus.QuarkusVersion } return defaults.QuarkusVersionConstraint } @@ -220,9 +220,9 @@ func (t *quarkusTrait) determineCamelQuarkusVersion(e *Environment) string { e.IntegrationKit.Status.RuntimeProvider.Quarkus.CamelQuarkusVersion != "" { return e.IntegrationKit.Status.RuntimeProvider.Quarkus.CamelQuarkusVersion } - if e.Platform.Spec.Build.RuntimeProvider != nil && e.Platform.Spec.Build.RuntimeProvider.Quarkus != nil && - e.Platform.Spec.Build.RuntimeProvider.Quarkus.CamelQuarkusVersion != "" { - return e.Platform.Spec.Build.RuntimeProvider.Quarkus.CamelQuarkusVersion + if e.Platform.Status.FullConfig.Build.RuntimeProvider != nil && e.Platform.Status.FullConfig.Build.RuntimeProvider.Quarkus != nil && + e.Platform.Status.FullConfig.Build.RuntimeProvider.Quarkus.CamelQuarkusVersion != "" { + return e.Platform.Status.FullConfig.Build.RuntimeProvider.Quarkus.CamelQuarkusVersion } return defaults.CamelQuarkusVersionConstraint } diff --git a/pkg/trait/rest-dsl.go b/pkg/trait/rest-dsl.go index efc5ecd..022dbb2 100644 --- a/pkg/trait/rest-dsl.go +++ b/pkg/trait/rest-dsl.go @@ -114,12 +114,12 @@ func (t *restDslTrait) Apply(e *Environment) error { } mc := maven.NewContext(tmpDir, project) - mc.LocalRepository = e.Platform.Spec.Build.Maven.LocalRepository - mc.Timeout = e.Platform.Spec.Build.Maven.Timeout.Duration + mc.LocalRepository = e.Platform.Status.FullConfig.Build.Maven.LocalRepository + mc.Timeout = e.Platform.Status.FullConfig.Build.Maven.Timeout.Duration mc.AddArgument("-Dopenapi.spec=" + in) mc.AddArgument("-Ddsl.out=" + out) - settings, err := kubernetes.ResolveValueSource(e.C, e.Client, e.Integration.Namespace, &e.Platform.Spec.Build.Maven.Settings) + settings, err := kubernetes.ResolveValueSource(e.C, e.Client, e.Integration.Namespace, &e.Platform.Status.FullConfig.Build.Maven.Settings) if err != nil { return err } diff --git a/pkg/trait/route_test.go b/pkg/trait/route_test.go index 24f4895..3a43156 100644 --- a/pkg/trait/route_test.go +++ b/pkg/trait/route_test.go @@ -39,7 +39,7 @@ func createTestRouteEnvironment(t *testing.T, name string) *Environment { catalog, err := camel.DefaultCatalog() assert.Nil(t, err) - return &Environment{ + res := &Environment{ CamelCatalog: catalog, Catalog: NewCatalog(context.TODO(), nil), Integration: &v1alpha1.Integration{ @@ -92,6 +92,8 @@ func createTestRouteEnvironment(t *testing.T, name string) *Environment { }, ), } + res.Platform.ResyncStatusFullConfig() + return res } func TestRoute_Default(t *testing.T) { diff --git a/pkg/trait/service_test.go b/pkg/trait/service_test.go index 5505de0..da72d7a 100644 --- a/pkg/trait/service_test.go +++ b/pkg/trait/service_test.go @@ -96,6 +96,7 @@ func TestServiceWithDefaults(t *testing.T) { Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + environment.Platform.ResyncStatusFullConfig() err = traitCatalog.apply(&environment) @@ -194,6 +195,7 @@ func TestService(t *testing.T) { Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + environment.Platform.ResyncStatusFullConfig() err = traitCatalog.apply(&environment) @@ -277,6 +279,7 @@ func TestServiceWithCustomContainerName(t *testing.T) { Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + environment.Platform.ResyncStatusFullConfig() err = traitCatalog.apply(&environment) diff --git a/pkg/trait/trait_catalog.go b/pkg/trait/trait_catalog.go index 32d5faa..8df6c30 100644 --- a/pkg/trait/trait_catalog.go +++ b/pkg/trait/trait_catalog.go @@ -279,8 +279,8 @@ func (c *Catalog) GetTrait(id string) Trait { } func (c *Catalog) configure(env *Environment) error { - if env.Platform != nil && env.Platform.Spec.Traits != nil { - if err := c.configureTraits(env.Platform.Spec.Traits); err != nil { + if env.Platform != nil && env.Platform.Status.FullConfig.Traits != nil { + if err := c.configureTraits(env.Platform.Status.FullConfig.Traits); err != nil { return err } } diff --git a/pkg/trait/trait_test.go b/pkg/trait/trait_test.go index 67faa61..3a9f9e7 100644 --- a/pkg/trait/trait_test.go +++ b/pkg/trait/trait_test.go @@ -177,6 +177,7 @@ func TestTraitHierarchyDecode(t *testing.T) { "autoscaling-target": "15", }, } + env.Platform.ResyncStatusFullConfig() env.IntegrationKit.Spec.Traits = make(map[string]v1alpha1.TraitSpec) env.IntegrationKit.Spec.Traits["knative-service"] = v1alpha1.TraitSpec{ @@ -433,7 +434,7 @@ func createTestEnv(t *testing.T, cluster v1alpha1.IntegrationPlatformCluster, sc catalog, err := camel.DefaultCatalog() assert.Nil(t, err) - return &Environment{ + res := &Environment{ CamelCatalog: catalog, Catalog: NewCatalog(context.TODO(), nil), Integration: &v1alpha1.Integration{ @@ -471,6 +472,8 @@ func createTestEnv(t *testing.T, cluster v1alpha1.IntegrationPlatformCluster, sc Resources: kubernetes.NewCollection(), Classpath: strset.New(), } + res.Platform.ResyncStatusFullConfig() + return res } func NewTraitTestCatalog() *Catalog { diff --git a/pkg/trait/util_test.go b/pkg/trait/util_test.go index ec2709e..c6df916 100644 --- a/pkg/trait/util_test.go +++ b/pkg/trait/util_test.go @@ -54,6 +54,7 @@ func TestCollectConfigurationValues(t *testing.T) { }, }, } + e.Platform.ResyncStatusFullConfig() assert.Contains(t, e.CollectConfigurationValues("configmap"), "my-cm-integration") assert.Contains(t, e.CollectConfigurationValues("secret"), "my-secret-platform") @@ -90,6 +91,7 @@ func TestCollectConfigurationPairs(t *testing.T) { }, }, } + e.Platform.ResyncStatusFullConfig() pairs := e.CollectConfigurationPairs("property") assert.Equal(t, "integration", pairs["p1"]) diff --git a/script/Makefile b/script/Makefile index 5e610b3..eda1632 100644 --- a/script/Makefile +++ b/script/Makefile @@ -241,4 +241,4 @@ install-minikube: release-notes: ./script/gen_release_notes.sh $(LAST_RELEASED_VERSION) $(VERSION) -.PHONY: build build-kamel build-resources build-olm unsnapshot-olm dep codegen images images-dec images-push images-push-staging test check test-integration clean release cross-compile package-examples set-version git-tag release-notes check-licenses generate-deepcopy generate-client generate-doc +.PHONY: build build-kamel build-resources build-olm unsnapshot-olm dep codegen images images-dev images-push images-push-staging test check test-integration clean release cross-compile package-examples set-version git-tag release-notes check-licenses generate-deepcopy generate-client generate-doc
