You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2019/12/11 18:37:51 UTC
[camel-k] 01/08: Fix #1120: do not change spec in platform
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 <ni...@gmail.com>
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