Skip to content

Commit fee6689

Browse files
[KOGITO-9748] 🐛 Fix passing arguments to internal Kaniko builder (#245)
Signed-off-by: Ricardo Zanini <zanini@redhat.com>
1 parent a9f7ad9 commit fee6689

File tree

6 files changed

+80
-12
lines changed

6 files changed

+80
-12
lines changed

bundle/manifests/sonataflow-operator-builder-config_v1_configmap.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ apiVersion: v1
22
data:
33
DEFAULT_BUILDER_RESOURCE_NAME: Dockerfile
44
DEFAULT_WORKFLOW_EXTENSION: .sw.json
5-
Dockerfile: "FROM quay.io/kiegroup/kogito-swf-builder-nightly:latest AS builder\n
6-
\ \n # Copy from build context to skeleton resources project\nCOPY --chmod=644
7-
* ./resources/\n\nRUN /home/kogito/launch/build-app.sh ./resources\n \n #=============================\n
5+
Dockerfile: "FROM quay.io/kiegroup/kogito-swf-builder-nightly:latest AS builder\n\n
6+
# variables that can be overridden by the builder\nARG QUARKUS_EXTENSIONS\n\n
7+
\ # Copy from build context to skeleton resources project\nCOPY --chmod=644 *
8+
./resources/\n\nRUN /home/kogito/launch/build-app.sh ./resources\n \n #=============================\n
89
\ # Runtime Run\n #=============================\nFROM registry.access.redhat.com/ubi8/openjdk-11:latest\n\nENV
910
LANG='en_US.UTF-8' LANGUAGE='en_US:en'\n \n # We make four distinct layers so
1011
if there are application changes the library layers can be re-used\nCOPY --from=builder

config/manager/sonataflow_builder_dockerfile.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
FROM quay.io/kiegroup/kogito-swf-builder-nightly:latest AS builder
2-
2+
3+
# variables that can be overridden by the builder
4+
ARG QUARKUS_EXTENSIONS
5+
36
# Copy from build context to skeleton resources project
47
COPY --chmod=644 * ./resources/
58

container-builder/builder/kubernetes/builder_kaniko.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ import (
1919

2020
corev1 "k8s.io/api/core/v1"
2121

22+
"github.com/kiegroup/kogito-serverless-operator/container-builder/client"
23+
2224
"github.com/kiegroup/kogito-serverless-operator/container-builder/api"
2325
)
2426

2527
var _ Scheduler = &kanikoScheduler{}
2628

2729
type kanikoScheduler struct {
28-
*scheduler
29-
KanikoTask *api.KanikoTask
30+
baseScheduler *scheduler
31+
KanikoTask *api.KanikoTask
3032
}
3133

3234
type kanikoSchedulerHandler struct {
@@ -90,13 +92,28 @@ func (sk *kanikoScheduler) WithAdditionalArgs(flags []string) Scheduler {
9092
return sk
9193
}
9294

95+
func (sk *kanikoScheduler) WithResource(target string, content []byte) Scheduler {
96+
sk.baseScheduler.WithResource(target, content)
97+
return sk
98+
}
99+
100+
func (sk *kanikoScheduler) WithConfigMapResource(configMap corev1.LocalObjectReference, path string) Scheduler {
101+
sk.baseScheduler.WithConfigMapResource(configMap, path)
102+
return sk
103+
}
104+
105+
func (sk *kanikoScheduler) WithClient(client client.Client) Scheduler {
106+
sk.baseScheduler.WithClient(client)
107+
return sk
108+
}
109+
93110
func (sk *kanikoScheduler) Schedule() (*api.ContainerBuild, error) {
94111
// verify if we really need this
95-
for _, task := range sk.builder.Context.ContainerBuild.Spec.Tasks {
112+
for _, task := range sk.baseScheduler.builder.Context.ContainerBuild.Spec.Tasks {
96113
if task.Kaniko != nil {
97114
task.Kaniko = sk.KanikoTask
98115
break
99116
}
100117
}
101-
return sk.scheduler.Schedule()
118+
return sk.baseScheduler.Schedule()
102119
}

controllers/builder/containerbuilder.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,14 @@ func (c *containerBuilderManager) Schedule(build *operatorapi.SonataFlowBuild) e
6060
Resources: build.Spec.Resources,
6161
AdditionalFlags: build.Spec.Arguments,
6262
}
63-
containerBuilder, err := c.scheduleNewKanikoBuildWithContainerFile(build, kanikoTask)
63+
var containerBuilder *api.ContainerBuild
64+
var err error
65+
if containerBuilder, err = c.scheduleNewKanikoBuildWithContainerFile(build, kanikoTask); err != nil {
66+
return err
67+
}
68+
if containerBuilder == nil {
69+
return nil
70+
}
6471
if err = build.Status.SetInnerBuild(containerBuilder); err != nil {
6572
return err
6673
}
@@ -166,6 +173,8 @@ func newBuild(kb internalBuilder, platform api.PlatformContainerBuild, defaultEx
166173
scheduler := builder.NewBuild(buildInfo).
167174
WithResource(resourceDockerfile, kb.ContainerFile).
168175
WithResource(kb.Workflow.Name+defaultExtension, kb.WorkflowDefinition).
176+
WithAdditionalArgs(kb.AdditionalFlags).
177+
WithResourceRequirements(kb.ResourceReqs).
169178
WithClient(cli)
170179

171180
for _, res := range kb.Workflow.Spec.Resources.ConfigMaps {

controllers/sonataflowbuild_controller_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,40 @@ func TestSonataFlowBuildController(t *testing.T) {
6262
assert.NoError(t, ksb.Status.GetInnerBuild(containerBuild))
6363
assert.Equal(t, string(ksb.Status.BuildPhase), string(containerBuild.Status.Phase))
6464
}
65+
66+
func TestSonataFlowBuildController_WithArgs(t *testing.T) {
67+
namespace := t.Name()
68+
ksw := test.GetBaseSonataFlow(namespace)
69+
ksb := test.GetNewEmptySonataFlowBuild(ksw.Name, namespace)
70+
71+
ksb.Spec.Arguments = make([]string, 1)
72+
ksb.Spec.Arguments[0] = "--build-args=MYENV=VALUE"
73+
74+
cl := test.NewKogitoClientBuilder().
75+
WithRuntimeObjects(ksb, ksw).
76+
WithRuntimeObjects(test.GetBasePlatformInReadyPhase(namespace)).
77+
WithRuntimeObjects(test.GetSonataFlowBuilderConfig("../", namespace)).
78+
WithStatusSubresource(ksb, ksw).
79+
Build()
80+
81+
r := &SonataFlowBuildReconciler{cl, cl.Scheme(), &record.FakeRecorder{}, &rest.Config{}}
82+
req := reconcile.Request{
83+
NamespacedName: types.NamespacedName{
84+
Name: ksb.Name,
85+
Namespace: ksb.Namespace,
86+
},
87+
}
88+
89+
result, err := r.Reconcile(context.TODO(), req)
90+
assert.NoError(t, err)
91+
assert.Equal(t, requeueAfterForNewBuild, result.RequeueAfter)
92+
93+
assert.NoError(t, cl.Get(context.TODO(), req.NamespacedName, ksb))
94+
assert.Equal(t, operatorapi.BuildPhaseScheduling, ksb.Status.BuildPhase)
95+
assert.NotNil(t, ksb.Status.InnerBuild)
96+
97+
containerBuild := &api.ContainerBuild{}
98+
assert.NoError(t, ksb.Status.GetInnerBuild(containerBuild))
99+
assert.Equal(t, string(ksb.Status.BuildPhase), string(containerBuild.Status.Phase))
100+
assert.Len(t, containerBuild.Spec.Tasks[0].Kaniko.AdditionalFlags, 1)
101+
}

operator.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3018,9 +3018,10 @@ apiVersion: v1
30183018
data:
30193019
DEFAULT_BUILDER_RESOURCE_NAME: Dockerfile
30203020
DEFAULT_WORKFLOW_EXTENSION: .sw.json
3021-
Dockerfile: "FROM quay.io/kiegroup/kogito-swf-builder-nightly:latest AS builder\n
3022-
\ \n # Copy from build context to skeleton resources project\nCOPY --chmod=644
3023-
* ./resources/\n\nRUN /home/kogito/launch/build-app.sh ./resources\n \n #=============================\n
3021+
Dockerfile: "FROM quay.io/kiegroup/kogito-swf-builder-nightly:latest AS builder\n\n
3022+
# variables that can be overridden by the builder\nARG QUARKUS_EXTENSIONS\n\n
3023+
\ # Copy from build context to skeleton resources project\nCOPY --chmod=644 *
3024+
./resources/\n\nRUN /home/kogito/launch/build-app.sh ./resources\n \n #=============================\n
30243025
\ # Runtime Run\n #=============================\nFROM registry.access.redhat.com/ubi8/openjdk-11:latest\n\nENV
30253026
LANG='en_US.UTF-8' LANGUAGE='en_US:en'\n \n # We make four distinct layers so
30263027
if there are application changes the library layers can be re-used\nCOPY --from=builder

0 commit comments

Comments
 (0)