You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2023/08/09 09:35:14 UTC
[camel-k] branch main updated: feat(trait): Fail IntKit when custom task on build strategy routine
This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/main by this push:
new 308ca76c1 feat(trait): Fail IntKit when custom task on build strategy routine
308ca76c1 is described below
commit 308ca76c1fe406144cfd6013275df583b9a686c4
Author: Gaelle Fournier <ga...@gmail.com>
AuthorDate: Fri Aug 4 11:47:19 2023 +0200
feat(trait): Fail IntKit when custom task on build strategy routine
Ref #4558
---
pkg/trait/builder.go | 35 +++++++++++++++++++----
pkg/trait/builder_test.go | 72 ++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 91 insertions(+), 16 deletions(-)
diff --git a/pkg/trait/builder.go b/pkg/trait/builder.go
index d42922e44..c9fc315c2 100644
--- a/pkg/trait/builder.go
+++ b/pkg/trait/builder.go
@@ -67,6 +67,8 @@ func (t *builderTrait) Configure(e *Environment) (bool, error) {
}
func (t *builderTrait) Apply(e *Environment) error {
+ // local pipeline tasks
+ var pipelineTasks []v1.Task
// Building task
builderTask, err := t.builderTask(e)
if err != nil {
@@ -78,17 +80,36 @@ func (t *builderTrait) Apply(e *Environment) error {
}
return nil
}
- e.Pipeline = append(e.Pipeline, v1.Task{Builder: builderTask})
+
+ pipelineTasks = append(pipelineTasks, v1.Task{Builder: builderTask})
// Custom tasks
if t.Tasks != nil {
- e.Pipeline = append(e.Pipeline, t.customTasks()...)
+ realBuildStrategy := builderTask.Configuration.Strategy
+ if realBuildStrategy == "" {
+ realBuildStrategy = e.Platform.Status.Build.BuildConfiguration.Strategy
+ }
+ if len(t.Tasks) > 0 && realBuildStrategy != v1.BuildStrategyPod {
+ e.IntegrationKit.Status.Phase = v1.IntegrationKitPhaseError
+ e.IntegrationKit.Status.SetCondition("IntegrationKitTasksValid",
+ corev1.ConditionFalse,
+ "IntegrationKitTasksValid",
+ fmt.Sprintf("Pipeline tasks unavailable when using `%s` platform build strategy: use `%s` instead.",
+ realBuildStrategy,
+ v1.BuildStrategyPod),
+ )
+ if err := e.Client.Status().Update(e.Ctx, e.IntegrationKit); err != nil {
+ return err
+ }
+ return nil
+ }
+ pipelineTasks = append(pipelineTasks, t.customTasks()...)
}
// Publishing task
switch e.Platform.Status.Build.PublishStrategy {
case v1.IntegrationPlatformBuildPublishStrategySpectrum:
- e.Pipeline = append(e.Pipeline, v1.Task{Spectrum: &v1.SpectrumTask{
+ pipelineTasks = append(pipelineTasks, v1.Task{Spectrum: &v1.SpectrumTask{
BaseTask: v1.BaseTask{
Name: "spectrum",
},
@@ -100,7 +121,7 @@ func (t *builderTrait) Apply(e *Environment) error {
}})
case v1.IntegrationPlatformBuildPublishStrategyS2I:
- e.Pipeline = append(e.Pipeline, v1.Task{S2i: &v1.S2iTask{
+ pipelineTasks = append(pipelineTasks, v1.Task{S2i: &v1.S2iTask{
BaseTask: v1.BaseTask{
Name: "s2i",
},
@@ -121,7 +142,7 @@ func (t *builderTrait) Apply(e *Environment) error {
executorImage = image
t.L.Infof("User defined executor image %s will be used for buildah", image)
}
- e.Pipeline = append(e.Pipeline, v1.Task{Buildah: &v1.BuildahTask{
+ pipelineTasks = append(pipelineTasks, v1.Task{Buildah: &v1.BuildahTask{
Platform: platform,
BaseTask: v1.BaseTask{
Name: "buildah",
@@ -144,7 +165,7 @@ func (t *builderTrait) Apply(e *Environment) error {
t.L.Infof("User defined executor image %s will be used for kaniko", image)
}
- e.Pipeline = append(e.Pipeline, v1.Task{Kaniko: &v1.KanikoTask{
+ pipelineTasks = append(pipelineTasks, v1.Task{Kaniko: &v1.KanikoTask{
BaseTask: v1.BaseTask{
Name: "kaniko",
},
@@ -160,6 +181,8 @@ func (t *builderTrait) Apply(e *Environment) error {
ExecutorImage: executorImage,
}})
}
+ // add local pipeline tasks to env pipeline
+ e.Pipeline = append(e.Pipeline, pipelineTasks...)
return nil
}
diff --git a/pkg/trait/builder_test.go b/pkg/trait/builder_test.go
index a260c18a0..95702bbc8 100644
--- a/pkg/trait/builder_test.go
+++ b/pkg/trait/builder_test.go
@@ -36,8 +36,8 @@ import (
func TestBuilderTraitNotAppliedBecauseOfNilKit(t *testing.T) {
environments := []*Environment{
- createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I),
- createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko),
+ createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I, v1.BuildStrategyRoutine),
+ createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko, v1.BuildStrategyRoutine),
}
for _, e := range environments {
@@ -57,8 +57,8 @@ func TestBuilderTraitNotAppliedBecauseOfNilKit(t *testing.T) {
func TestBuilderTraitNotAppliedBecauseOfNilPhase(t *testing.T) {
environments := []*Environment{
- createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I),
- createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko),
+ createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I, v1.BuildStrategyRoutine),
+ createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko, v1.BuildStrategyRoutine),
}
for _, e := range environments {
@@ -77,7 +77,7 @@ func TestBuilderTraitNotAppliedBecauseOfNilPhase(t *testing.T) {
}
func TestS2IBuilderTrait(t *testing.T) {
- env := createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I)
+ env := createBuilderTestEnv(v1.IntegrationPlatformClusterOpenShift, v1.IntegrationPlatformBuildPublishStrategyS2I, v1.BuildStrategyRoutine)
err := NewBuilderTestCatalog().apply(env)
assert.Nil(t, err)
@@ -90,7 +90,7 @@ func TestS2IBuilderTrait(t *testing.T) {
}
func TestKanikoBuilderTrait(t *testing.T) {
- env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko)
+ env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko, v1.BuildStrategyRoutine)
err := NewBuilderTestCatalog().apply(env)
assert.Nil(t, err)
@@ -102,7 +102,7 @@ func TestKanikoBuilderTrait(t *testing.T) {
assert.NotNil(t, env.Pipeline[1].Kaniko)
}
-func createBuilderTestEnv(cluster v1.IntegrationPlatformCluster, strategy v1.IntegrationPlatformBuildPublishStrategy) *Environment {
+func createBuilderTestEnv(cluster v1.IntegrationPlatformCluster, strategy v1.IntegrationPlatformBuildPublishStrategy, buildStrategy v1.BuildStrategy) *Environment {
c, err := camel.DefaultCatalog()
if err != nil {
panic(err)
@@ -136,6 +136,9 @@ func createBuilderTestEnv(cluster v1.IntegrationPlatformCluster, strategy v1.Int
RuntimeVersion: defaults.DefaultRuntimeVersion,
RuntimeProvider: v1.RuntimeProviderQuarkus,
PublishStrategyOptions: map[string]string{},
+ BuildConfiguration: v1.BuildConfiguration{
+ Strategy: buildStrategy,
+ },
},
},
Status: v1.IntegrationPlatformStatus{
@@ -157,7 +160,7 @@ func NewBuilderTestCatalog() *Catalog {
}
func TestMavenPropertyBuilderTrait(t *testing.T) {
- env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko)
+ env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko, v1.BuildStrategyRoutine)
builderTrait := createNominalBuilderTraitTest()
builderTrait.Properties = append(builderTrait.Properties, "build-time-prop1=build-time-value1")
@@ -175,7 +178,7 @@ func createNominalBuilderTraitTest() *builderTrait {
}
func TestCustomTaskBuilderTrait(t *testing.T) {
- env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategySpectrum)
+ env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategySpectrum, v1.BuildStrategyPod)
builderTrait := createNominalBuilderTraitTest()
builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;ls")
@@ -194,6 +197,55 @@ func TestCustomTaskBuilderTrait(t *testing.T) {
assert.Equal(t, "ls", customTask.Custom.ContainerCommand)
}
+func TestCustomTaskBuilderTraitValidStrategyOverride(t *testing.T) {
+ env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategySpectrum, v1.BuildStrategyRoutine)
+ builderTrait := createNominalBuilderTraitTest()
+ builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;ls")
+ builderTrait.Strategy = "pod"
+
+ err := builderTrait.Apply(env)
+
+ assert.Nil(t, err)
+
+ builderTask := findCustomTaskByName(env.Pipeline, "builder")
+ publisherTask := findCustomTaskByName(env.Pipeline, "spectrum")
+ customTask := findCustomTaskByName(env.Pipeline, "test")
+ assert.NotNil(t, customTask)
+ assert.NotNil(t, builderTask)
+ assert.NotNil(t, publisherTask)
+ assert.Equal(t, 3, len(env.Pipeline))
+ assert.Equal(t, "test", customTask.Custom.Name)
+ assert.Equal(t, "alpine", customTask.Custom.ContainerImage)
+ assert.Equal(t, "ls", customTask.Custom.ContainerCommand)
+}
+
+func TestCustomTaskBuilderTraitInvalidStrategy(t *testing.T) {
+ env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategySpectrum, v1.BuildStrategyRoutine)
+ builderTrait := createNominalBuilderTraitTest()
+ builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;ls")
+
+ err := builderTrait.Apply(env)
+
+ assert.NotNil(t, err)
+ assert.Equal(t, env.IntegrationKit.Status.Phase, v1.IntegrationKitPhaseError)
+ assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Status, corev1.ConditionFalse)
+ assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Type, v1.IntegrationKitConditionType("IntegrationKitTasksValid"))
+}
+
+func TestCustomTaskBuilderTraitInvalidStrategyOverride(t *testing.T) {
+ env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategySpectrum, v1.BuildStrategyPod)
+ builderTrait := createNominalBuilderTraitTest()
+ builderTrait.Tasks = append(builderTrait.Tasks, "test;alpine;ls")
+ builderTrait.Strategy = "routine"
+
+ err := builderTrait.Apply(env)
+
+ assert.NotNil(t, err)
+ assert.Equal(t, env.IntegrationKit.Status.Phase, v1.IntegrationKitPhaseError)
+ assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Status, corev1.ConditionFalse)
+ assert.Equal(t, env.IntegrationKit.Status.Conditions[0].Type, v1.IntegrationKitConditionType("IntegrationKitTasksValid"))
+}
+
func findCustomTaskByName(tasks []v1.Task, name string) v1.Task {
for _, t := range tasks {
if t.Custom != nil && t.Custom.Name == name {
@@ -204,7 +256,7 @@ func findCustomTaskByName(tasks []v1.Task, name string) v1.Task {
}
func TestMavenProfileBuilderTrait(t *testing.T) {
- env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko)
+ env := createBuilderTestEnv(v1.IntegrationPlatformClusterKubernetes, v1.IntegrationPlatformBuildPublishStrategyKaniko, v1.BuildStrategyRoutine)
builderTrait := createNominalBuilderTraitTest()
builderTrait.MavenProfile = "configmap:maven-profile/owasp-profile.xml"