Issue #312 - Create a new controllers config package for handling global configuration options for admins (#416)
diff --git a/api/const.go b/api/const.go
deleted file mode 100644
index 519456b..0000000
--- a/api/const.go
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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 api
-
-const (
- // ComponentName just a name to identify this package/component/application
- ComponentName = "sonataflow"
-)
diff --git a/bundle.osl/manifests/logic-operator-rhel8-builder-config_v1_configmap.yaml b/bundle.osl/manifests/logic-operator-rhel8-builder-config_v1_configmap.yaml
index 7640597..2e7edce 100644
--- a/bundle.osl/manifests/logic-operator-rhel8-builder-config_v1_configmap.yaml
+++ b/bundle.osl/manifests/logic-operator-rhel8-builder-config_v1_configmap.yaml
@@ -1,6 +1,5 @@
apiVersion: v1
data:
- DEFAULT_BUILDER_RESOURCE_NAME: Dockerfile
DEFAULT_WORKFLOW_EXTENSION: .sw.json
Dockerfile: "FROM registry.redhat.io/openshift-serverless-1-tech-preview/logic-swf-builder-rhel8:latest
AS builder\n\n# variables that can be overridden by the builder\n# To add a Quarkus
diff --git a/bundle/manifests/sonataflow-operator-builder-config_v1_configmap.yaml b/bundle/manifests/sonataflow-operator-builder-config_v1_configmap.yaml
index 2d787ee..d04b6b6 100644
--- a/bundle/manifests/sonataflow-operator-builder-config_v1_configmap.yaml
+++ b/bundle/manifests/sonataflow-operator-builder-config_v1_configmap.yaml
@@ -1,6 +1,5 @@
apiVersion: v1
data:
- DEFAULT_BUILDER_RESOURCE_NAME: Dockerfile
DEFAULT_WORKFLOW_EXTENSION: .sw.json
Dockerfile: "FROM quay.io/kiegroup/kogito-swf-builder-nightly:latest AS builder\n\n#
variables that can be overridden by the builder\n# To add a Quarkus extension
diff --git a/bundle/manifests/sonataflow-operator-controllers-config_v1_configmap.yaml b/bundle/manifests/sonataflow-operator-controllers-config_v1_configmap.yaml
new file mode 100644
index 0000000..a16e6be
--- /dev/null
+++ b/bundle/manifests/sonataflow-operator-controllers-config_v1_configmap.yaml
@@ -0,0 +1,34 @@
+apiVersion: v1
+data:
+ controllers_cfg.yaml: |
+ # The default size of Kaniko PVC when using the internal operator builder manager
+ defaultPvcKanikoSize: 1Gi
+ # How much time (in seconds) to wait for a devmode workflow to start.
+ # This information is used for the controller manager to create new devmode containers and setup the healthcheck probes.
+ healthFailureThresholdDevMode: 50
+ # Default image used internally by the Operator Managed Kaniko builder to create the warmup pods
+ kanikoDefaultWarmerImageTag: gcr.io/kaniko-project/warmer:v1.9.0
+ # Default image used internally by the Operator Managed Kaniko builder to create the executor pods
+ kanikoExecutorImageTag: gcr.io/kaniko-project/executor:v1.9.0
+ # The Jobs Service image to use, if empty the operator will use the default Apache Community one based on the current operator's version
+ jobsServicePostgreSQLImageTag: ""
+ jobsServiceEphemeralImageTag: ""
+ # The Data Index image to use, if empty the operator will use the default Apache Community one based on the current operator's version
+ dataIndexPostgreSQLImageTag: ""
+ dataIndexEphemeralTag: ""
+ # SonataFlow base builder image used in the internal Dockerfile to build workflow applications in preview profile
+ # Order of precedence is:
+ # 1. SonataFlowPlatform in the given namespace
+ # 2. This configuration
+ # 3. The FROM in the Dockerfile in the operator's namespace "sonataflow-operator-builder-config" configMap.
+ # If 1 or 2, the FROM tag will be replaced by the tag se there.
+ # If empty the operator will use the default Apache Community one based on the current operator's version.
+ sonataFlowBaseBuilderImageTag: ""
+ # The image to use to deploy SonataFlow workflow images in devmode profile.
+ # If empty the operator will use the default Apache Community one based on the current operator's version.
+ sonataFlowDevModeImageTag: ""
+ # The default name of the builder configMap in the operator's namespace
+ builderConfigMapName: "sonataflow-operator-builder-config"
+kind: ConfigMap
+metadata:
+ name: sonataflow-operator-controllers-config
diff --git a/bundle/manifests/sonataflow-operator.clusterserviceversion.yaml b/bundle/manifests/sonataflow-operator.clusterserviceversion.yaml
index a4ce43c..b71c508 100644
--- a/bundle/manifests/sonataflow-operator.clusterserviceversion.yaml
+++ b/bundle/manifests/sonataflow-operator.clusterserviceversion.yaml
@@ -728,31 +728,6 @@
spec:
containers:
- args:
- - --secure-listen-address=0.0.0.0:8443
- - --upstream=http://127.0.0.1:8080/
- - --logtostderr=true
- - --v=0
- image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0
- name: kube-rbac-proxy
- ports:
- - containerPort: 8443
- name: https
- protocol: TCP
- resources:
- limits:
- cpu: 500m
- memory: 128Mi
- requests:
- cpu: 5m
- memory: 64Mi
- securityContext:
- allowPrivilegeEscalation: false
- capabilities:
- drop:
- - ALL
- seccompProfile:
- type: RuntimeDefault
- - args:
- --health-probe-bind-address=:8081
- --metrics-bind-address=127.0.0.1:8080
- --leader-elect
@@ -790,10 +765,43 @@
capabilities:
drop:
- ALL
+ volumeMounts:
+ - mountPath: /config/controllers_cfg.yaml
+ name: controllers-config
+ subPath: controllers_cfg.yaml
+ - args:
+ - --secure-listen-address=0.0.0.0:8443
+ - --upstream=http://127.0.0.1:8080/
+ - --logtostderr=true
+ - --v=0
+ image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0
+ name: kube-rbac-proxy
+ ports:
+ - containerPort: 8443
+ name: https
+ protocol: TCP
+ resources:
+ limits:
+ cpu: 500m
+ memory: 128Mi
+ requests:
+ cpu: 5m
+ memory: 64Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ seccompProfile:
+ type: RuntimeDefault
securityContext:
runAsNonRoot: true
serviceAccountName: sonataflow-operator-controller-manager
terminationGracePeriodSeconds: 10
+ volumes:
+ - configMap:
+ name: sonataflow-operator-controllers-config
+ name: controllers-config
permissions:
- rules:
- apiGroups:
diff --git a/config/default/controllers_config_patch.yaml b/config/default/controllers_config_patch.yaml
new file mode 100644
index 0000000..5394767
--- /dev/null
+++ b/config/default/controllers_config_patch.yaml
@@ -0,0 +1,18 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: controller-manager
+ namespace: system
+spec:
+ template:
+ spec:
+ containers:
+ - name: manager
+ volumeMounts:
+ - name: controllers-config
+ mountPath: /config/controllers_cfg.yaml
+ subPath: controllers_cfg.yaml
+ volumes:
+ - name: controllers-config
+ configMap:
+ name: controllers-config
diff --git a/config/default/kustomization.yaml b/config/default/kustomization.yaml
index 613c7e3..19bd8db 100644
--- a/config/default/kustomization.yaml
+++ b/config/default/kustomization.yaml
@@ -34,6 +34,9 @@
# through a ComponentConfig type
#- manager_config_patch.yaml
+# Mount the custom controllers config
+- controllers_config_patch.yaml
+
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in
# crd/kustomization.yaml
#- manager_webhook_patch.yaml
diff --git a/config/manager/sonataflow_builder_dockerfile.yaml b/config/manager/SonataFlow-Builder.containerfile
similarity index 100%
rename from config/manager/sonataflow_builder_dockerfile.yaml
rename to config/manager/SonataFlow-Builder.containerfile
diff --git a/config/manager/controllers_cfg.yaml b/config/manager/controllers_cfg.yaml
new file mode 100644
index 0000000..41f2f86
--- /dev/null
+++ b/config/manager/controllers_cfg.yaml
@@ -0,0 +1,28 @@
+# The default size of Kaniko PVC when using the internal operator builder manager
+defaultPvcKanikoSize: 1Gi
+# How much time (in seconds) to wait for a devmode workflow to start.
+# This information is used for the controller manager to create new devmode containers and setup the healthcheck probes.
+healthFailureThresholdDevMode: 50
+# Default image used internally by the Operator Managed Kaniko builder to create the warmup pods
+kanikoDefaultWarmerImageTag: gcr.io/kaniko-project/warmer:v1.9.0
+# Default image used internally by the Operator Managed Kaniko builder to create the executor pods
+kanikoExecutorImageTag: gcr.io/kaniko-project/executor:v1.9.0
+# The Jobs Service image to use, if empty the operator will use the default Apache Community one based on the current operator's version
+jobsServicePostgreSQLImageTag: ""
+jobsServiceEphemeralImageTag: ""
+# The Data Index image to use, if empty the operator will use the default Apache Community one based on the current operator's version
+dataIndexPostgreSQLImageTag: ""
+dataIndexEphemeralTag: ""
+# SonataFlow base builder image used in the internal Dockerfile to build workflow applications in preview profile
+# Order of precedence is:
+# 1. SonataFlowPlatform in the given namespace
+# 2. This configuration
+# 3. The FROM in the Dockerfile in the operator's namespace "sonataflow-operator-builder-config" configMap.
+# If 1 or 2, the FROM tag will be replaced by the tag se there.
+# If empty the operator will use the default Apache Community one based on the current operator's version.
+sonataFlowBaseBuilderImageTag: ""
+# The image to use to deploy SonataFlow workflow images in devmode profile.
+# If empty the operator will use the default Apache Community one based on the current operator's version.
+sonataFlowDevModeImageTag: ""
+# The default name of the builder configMap in the operator's namespace
+builderConfigMapName: "sonataflow-operator-builder-config"
diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml
index bc6245f..3cc8cc8 100644
--- a/config/manager/kustomization.yaml
+++ b/config/manager/kustomization.yaml
@@ -2,16 +2,21 @@
- manager.yaml
generatorOptions:
disableNameSuffixHash: true
+# No need to generate this CM since we are not using it.
+# Must also uncomment config/manager/kustomization.yaml to mount it in the controller
+
+#- files:
+# - controller_manager_config.yaml
+# name: manager-config
configMapGenerator:
- files:
- - controller_manager_config.yaml
- name: manager-config
-- files:
- - Dockerfile=sonataflow_builder_dockerfile.yaml
+ - Dockerfile=SonataFlow-Builder.containerfile
literals:
- - DEFAULT_BUILDER_RESOURCE_NAME=Dockerfile
- DEFAULT_WORKFLOW_EXTENSION=.sw.json
name: builder-config
+- files:
+ - controllers_cfg.yaml
+ name: controllers-config
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
diff --git a/config/manager/osl/sonataflow_builder_dockerfile.yaml b/config/manager/osl/SonataFlow-Builder.containerfile
similarity index 100%
rename from config/manager/osl/sonataflow_builder_dockerfile.yaml
rename to config/manager/osl/SonataFlow-Builder.containerfile
diff --git a/config/manager/osl/kustomization.yaml b/config/manager/osl/kustomization.yaml
index 52178c0..8136aef 100644
--- a/config/manager/osl/kustomization.yaml
+++ b/config/manager/osl/kustomization.yaml
@@ -9,9 +9,8 @@
- controller_manager_config.yaml
name: manager-config
- files:
- - Dockerfile=sonataflow_builder_dockerfile.yaml
+ - Dockerfile=SonataFlow-Builder.containerfile
literals:
- - DEFAULT_BUILDER_RESOURCE_NAME=Dockerfile
- DEFAULT_WORKFLOW_EXTENSION=.sw.json
name: builder-config
diff --git a/container-builder/api/build_types.go b/container-builder/api/build_types.go
index d631385..a90b182 100644
--- a/container-builder/api/build_types.go
+++ b/container-builder/api/build_types.go
@@ -125,6 +125,8 @@
Cache KanikoTaskCache `json:"cache,omitempty"`
// AdditionalFlags -- List of additional flags for the Kaniko process (see https://github.com/GoogleContainerTools/kaniko/blob/main/README.md#additional-flags)
AdditionalFlags []string `json:"additionalFlags,omitempty"`
+ // Image used by the created Kaniko pod executor
+ KanikoExecutorImage string `json:"kanikoExecutorImage,omitempty"`
}
// KanikoTaskCache is used to configure Kaniko cache
diff --git a/container-builder/api/const.go b/container-builder/api/const.go
deleted file mode 100644
index b24b5d8..0000000
--- a/container-builder/api/const.go
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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 api
-
-const (
- // ComponentName just a name to identify this package/component/application
- ComponentName = "sonataflow-builder"
-)
diff --git a/container-builder/builder/kaniko_vanilla.go b/container-builder/builder/kaniko_vanilla.go
index 5a72921..bad057f 100644
--- a/container-builder/builder/kaniko_vanilla.go
+++ b/container-builder/builder/kaniko_vanilla.go
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package builder
import (
diff --git a/container-builder/builder/kubernetes/builder.go b/container-builder/builder/kubernetes/builder.go
index f5d5047..a2c78bb 100644
--- a/container-builder/builder/kubernetes/builder.go
+++ b/container-builder/builder/kubernetes/builder.go
@@ -40,6 +40,8 @@
FinalImageName string
BuildUniqueName string
Platform api.PlatformContainerBuild
+ // ContainerBuilderImageTag the image tag used internally to create the pod builder (e.g. Kaniko Executor Builder image)
+ ContainerBuilderImageTag string
}
type resource struct {
diff --git a/container-builder/builder/kubernetes/builder_kaniko.go b/container-builder/builder/kubernetes/builder_kaniko.go
index 3541668..0ab6c9b 100644
--- a/container-builder/builder/kubernetes/builder_kaniko.go
+++ b/container-builder/builder/kubernetes/builder_kaniko.go
@@ -50,7 +50,8 @@
Image: info.FinalImageName,
Registry: info.Platform.Spec.Registry,
},
- Cache: api.KanikoTaskCache{},
+ Cache: api.KanikoTaskCache{},
+ KanikoExecutorImage: info.ContainerBuilderImageTag,
}
ctx.containerBuild = &api.ContainerBuild{
diff --git a/container-builder/builder/kubernetes/kaniko.go b/container-builder/builder/kubernetes/kaniko.go
index a596a3d..d2d542c 100644
--- a/container-builder/builder/kubernetes/kaniko.go
+++ b/container-builder/builder/kubernetes/kaniko.go
@@ -28,7 +28,6 @@
"github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/api"
"github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/client"
- "github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/util/defaults"
"github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/util/minikube"
"github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/util/registry"
)
@@ -136,7 +135,7 @@
container := corev1.Container{
Name: strings.ToLower(task.Name),
- Image: defaults.KanikoExecutorImage,
+ Image: task.KanikoExecutorImage,
ImagePullPolicy: corev1.PullIfNotPresent,
Args: args,
Env: env,
diff --git a/container-builder/builder/kubernetes/monitor_pod.go b/container-builder/builder/kubernetes/monitor_pod.go
index 9a18aa7..2a52275 100644
--- a/container-builder/builder/kubernetes/monitor_pod.go
+++ b/container-builder/builder/kubernetes/monitor_pod.go
@@ -25,10 +25,6 @@
"os"
"time"
- "github.com/hashicorp/go-version"
-
- "github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/util/defaults"
-
"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -99,16 +95,6 @@
if err = action.addTimeoutAnnotation(ctx, pod, metav1.Now()); err != nil {
return nil, err
}
- // In latest Kaniko versions kill is no more available in image's $PATH, do we still need it?
- // Send SIGTERM signal to running containers
- current, err := version.NewVersion(defaults.KanikoVersion)
- maxVersionSupportingKill, err := version.NewVersion(defaults.KanikoVersionSupportingKill)
- if current.LessThanOrEqual(maxVersionSupportingKill) {
- if err = action.sigterm(pod); err != nil {
- // Requeue
- return nil, err
- }
- }
}
case corev1.PodSucceeded:
diff --git a/container-builder/go.mod b/container-builder/go.mod
index fc52361..fccb149 100644
--- a/container-builder/go.mod
+++ b/container-builder/go.mod
@@ -6,7 +6,6 @@
github.com/docker/docker v24.0.9+incompatible
github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11
github.com/google/uuid v1.3.1
- github.com/hashicorp/go-version v1.6.0
github.com/heroku/docker-registry-client v0.0.0-20211012143308-9463674c8930
github.com/jpillora/backoff v1.0.0
github.com/mitchellh/go-homedir v1.1.0
diff --git a/container-builder/go.sum b/container-builder/go.sum
index b4e1a20..54cd567 100644
--- a/container-builder/go.sum
+++ b/container-builder/go.sum
@@ -156,8 +156,6 @@
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
github.com/heroku/docker-registry-client v0.0.0-20211012143308-9463674c8930 h1:mNL9ktJqBuzPTV/QP/fKd4y1uOFvfiv6zhe0G7lg9OA=
github.com/heroku/docker-registry-client v0.0.0-20211012143308-9463674c8930/go.mod h1:Yho0S7KhsnHQRCC5lDraYF1SsLMeWtf/tKdufKu3TJA=
diff --git a/container-builder/util/defaults/kaniko.go b/container-builder/util/defaults/kaniko.go
deleted file mode 100644
index df6c20d..0000000
--- a/container-builder/util/defaults/kaniko.go
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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 defaults
-
-const (
- KanikoVersion = "1.9.0"
- KanikoVersionSupportingKill = "0.17.1"
- KanikoExecutorImage = "gcr.io/kaniko-project/executor:v" + KanikoVersion
-)
diff --git a/controllers/builder/builder.go b/controllers/builder/builder.go
index 17db22a..d7ef14d 100644
--- a/controllers/builder/builder.go
+++ b/controllers/builder/builder.go
@@ -35,10 +35,10 @@
)
type buildManagerContext struct {
- ctx context.Context
- client client.Client
- platform *operatorapi.SonataFlowPlatform
- commonConfig *v1.ConfigMap
+ ctx context.Context
+ client client.Client
+ platform *operatorapi.SonataFlowPlatform
+ builderConfigMap *v1.ConfigMap
}
type BuildManager interface {
@@ -55,16 +55,16 @@
klog.V(log.E).ErrorS(err, "Error retrieving the active platform. Workflow build cannot be performed!", "workflow", targetName)
return nil, err
}
- commonConfig, err := GetCommonConfigMap(client, targetNamespace)
+ builderConfig, err := GetBuilderConfigMap(client, targetNamespace)
if err != nil {
klog.V(log.E).ErrorS(err, "Failed to get common configMap for Workflow Builder. Make sure that sonataflow-operator-builder-config is present in the operator namespace.")
return nil, err
}
managerContext := buildManagerContext{
- ctx: ctx,
- client: client,
- platform: p,
- commonConfig: commonConfig,
+ ctx: ctx,
+ client: client,
+ platform: p,
+ builderConfigMap: builderConfig,
}
switch p.Status.Cluster {
case operatorapi.PlatformClusterOpenShift:
diff --git a/controllers/builder/config.go b/controllers/builder/config.go
index 77155a4..d949a47 100644
--- a/controllers/builder/config.go
+++ b/controllers/builder/config.go
@@ -24,6 +24,7 @@
"fmt"
"os"
+ "github.com/apache/incubator-kie-kogito-serverless-operator/controllers/cfg"
"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -35,15 +36,13 @@
)
const (
- envVarPodNamespaceName = "POD_NAMESPACE"
- // ConfigMapName is the default name for the Builder ConfigMap name
- ConfigMapName = "sonataflow-operator-builder-config"
- configKeyDefaultExtension = "DEFAULT_WORKFLOW_EXTENSION"
- configKeyDefaultBuilderResourceName = "DEFAULT_BUILDER_RESOURCE_NAME"
+ envVarPodNamespaceName = "POD_NAMESPACE"
+ configKeyDefaultExtension = "DEFAULT_WORKFLOW_EXTENSION"
+ defaultBuilderResourceName = "Dockerfile"
)
-// GetCommonConfigMap retrieves the config map with the builder common configuration information
-func GetCommonConfigMap(client client.Client, fallbackNS string) (*corev1.ConfigMap, error) {
+// GetBuilderConfigMap retrieves the config map with the builder common configuration information
+func GetBuilderConfigMap(client client.Client, fallbackNS string) (*corev1.ConfigMap, error) {
namespace, found := os.LookupEnv(envVarPodNamespaceName)
if !found {
namespace = fallbackNS
@@ -59,43 +58,38 @@
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
- Name: ConfigMapName,
+ Name: cfg.GetCfg().BuilderConfigMapName,
Namespace: namespace,
},
Data: map[string]string{},
}
- err := client.Get(context.TODO(), types.NamespacedName{Name: ConfigMapName, Namespace: namespace}, existingConfigMap)
+ builderConfigMapName := cfg.GetCfg().BuilderConfigMapName
+ err := client.Get(context.TODO(), types.NamespacedName{Name: builderConfigMapName, Namespace: namespace}, existingConfigMap)
if err != nil {
- klog.V(log.E).ErrorS(err, "fetching configmap", "name", ConfigMapName)
+ klog.V(log.E).ErrorS(err, "fetching configmap", "name", builderConfigMapName)
return nil, err
}
- err = isValidBuilderCommonConfigMap(existingConfigMap)
+ err = isValidBuilderConfigMap(existingConfigMap)
if err != nil {
- klog.V(log.E).ErrorS(err, "configmap is not valid", "name", ConfigMapName)
+ klog.V(log.E).ErrorS(err, "configmap is not valid", "name", builderConfigMapName)
return existingConfigMap, err
}
return existingConfigMap, nil
}
-// isValidBuilderCommonConfigMap function that will verify that in the builder config maps there are the required keys, and they aren't empty
-func isValidBuilderCommonConfigMap(configMap *corev1.ConfigMap) error {
-
+// isValidBuilderConfigMap function that will verify that in the builder config maps there are the required keys, and they aren't empty
+func isValidBuilderConfigMap(configMap *corev1.ConfigMap) error {
// Verifying that the key to hold the extension for the workflow is there and not empty
if len(configMap.Data[configKeyDefaultExtension]) == 0 {
return fmt.Errorf("unable to find %s key into builder config map", configMap.Data[configKeyDefaultExtension])
}
- // Verifying that the key to hold the name of the Dockerfile for building the workflow is there and not empty
- if len(configMap.Data[configKeyDefaultBuilderResourceName]) == 0 {
- return fmt.Errorf("unable to find %s key into builder config map", configMap.Data[configKeyDefaultBuilderResourceName])
- }
-
// Verifying that the key to hold the content of the Dockerfile for building the workflow is there and not empty
- if len(configMap.Data[configMap.Data[configKeyDefaultBuilderResourceName]]) == 0 {
- return fmt.Errorf("unable to find %s key into builder config map", configMap.Data[configKeyDefaultBuilderResourceName])
+ if len(configMap.Data[defaultBuilderResourceName]) == 0 {
+ return fmt.Errorf("unable to find %s key into builder config map", configMap.Data[defaultBuilderResourceName])
}
return nil
}
diff --git a/controllers/builder/containerbuilder.go b/controllers/builder/containerbuilder.go
index a3fc344..c945f02 100644
--- a/controllers/builder/containerbuilder.go
+++ b/controllers/builder/containerbuilder.go
@@ -22,6 +22,7 @@
import (
"time"
+ "github.com/apache/incubator-kie-kogito-serverless-operator/controllers/cfg"
"k8s.io/klog/v2"
"github.com/apache/incubator-kie-kogito-serverless-operator/controllers/workflowdef"
@@ -73,9 +74,10 @@
Envs: build.Spec.Envs,
Resources: build.Spec.Resources,
},
- PublishTask: api.PublishTask{},
- Cache: kanikoTaskCache,
- AdditionalFlags: build.Spec.Arguments,
+ PublishTask: api.PublishTask{},
+ Cache: kanikoTaskCache,
+ AdditionalFlags: build.Spec.Arguments,
+ KanikoExecutorImage: cfg.GetCfg().KanikoExecutorImageTag,
}
var containerBuilder *api.ContainerBuild
var err error
@@ -137,7 +139,7 @@
task: task,
workflowDefinition: workflowDef,
workflow: workflow,
- dockerfile: platform.GetCustomizedDockerfile(c.commonConfig.Data[c.commonConfig.Data[configKeyDefaultBuilderResourceName]], *c.platform),
+ dockerfile: platform.GetCustomizedBuilderDockerfile(c.builderConfigMap.Data[defaultBuilderResourceName], *c.platform),
imageTag: buildNamespacedImageTag(workflow),
}
@@ -173,7 +175,7 @@
},
}
- build, err := newBuild(buildInput, plat, c.commonConfig.Data[configKeyDefaultExtension], cli)
+ build, err := newBuild(buildInput, plat, c.builderConfigMap.Data[configKeyDefaultExtension], cli)
if err != nil {
klog.V(log.E).ErrorS(err, "error during build Image")
return nil, err
@@ -183,7 +185,12 @@
// Helper function to create a new container-builder build and schedule it
func newBuild(buildInput kanikoBuildInput, platform api.PlatformContainerBuild, defaultExtension string, cli client.Client) (*api.ContainerBuild, error) {
- buildInfo := builder.ContainerBuilderInfo{FinalImageName: buildInput.imageTag, BuildUniqueName: buildInput.name, Platform: platform}
+ buildInfo := builder.ContainerBuilderInfo{
+ FinalImageName: buildInput.imageTag,
+ BuildUniqueName: buildInput.name,
+ Platform: platform,
+ ContainerBuilderImageTag: buildInput.task.KanikoExecutorImage,
+ }
newBuilder := builder.NewBuild(buildInfo).
WithClient(cli).
diff --git a/controllers/builder/openshiftbuilder.go b/controllers/builder/openshiftbuilder.go
index 55c1fc2..44077d4 100644
--- a/controllers/builder/openshiftbuilder.go
+++ b/controllers/builder/openshiftbuilder.go
@@ -150,7 +150,7 @@
func (o *openshiftBuilderManager) newDefaultBuildConfig(build *operatorapi.SonataFlowBuild, workflow *operatorapi.SonataFlow) *buildv1.BuildConfig {
optimizationPol := buildv1.ImageOptimizationSkipLayers
- dockerFile := platform.GetCustomizedDockerfile(o.commonConfig.Data[o.commonConfig.Data[configKeyDefaultBuilderResourceName]], *o.platform)
+ dockerFile := platform.GetCustomizedBuilderDockerfile(o.builderConfigMap.Data[defaultBuilderResourceName], *o.platform)
return &buildv1.BuildConfig{
ObjectMeta: metav1.ObjectMeta{Namespace: build.Namespace, Name: build.Name},
Spec: buildv1.BuildConfigSpec{
diff --git a/controllers/builder/openshiftbuilder_test.go b/controllers/builder/openshiftbuilder_test.go
index 5dc21ea..bd992c3 100644
--- a/controllers/builder/openshiftbuilder_test.go
+++ b/controllers/builder/openshiftbuilder_test.go
@@ -47,10 +47,10 @@
buildClient := buildfake.NewSimpleClientset().BuildV1()
managerContext := buildManagerContext{
- ctx: context.TODO(),
- client: client,
- platform: platform,
- commonConfig: config,
+ ctx: context.TODO(),
+ client: client,
+ platform: platform,
+ builderConfigMap: config,
}
buildManager := newOpenShiftBuilderManagerWithClient(managerContext, buildClient)
@@ -110,10 +110,10 @@
buildClient := buildfake.NewSimpleClientset().BuildV1()
managerContext := buildManagerContext{
- ctx: context.TODO(),
- client: client,
- platform: platform,
- commonConfig: config,
+ ctx: context.TODO(),
+ client: client,
+ platform: platform,
+ builderConfigMap: config,
}
buildManager := newOpenShiftBuilderManagerWithClient(managerContext, buildClient)
diff --git a/controllers/cfg/controllers_cfg.go b/controllers/cfg/controllers_cfg.go
new file mode 100644
index 0000000..05e409c
--- /dev/null
+++ b/controllers/cfg/controllers_cfg.go
@@ -0,0 +1,92 @@
+// Copyright 2024 Apache Software Foundation (ASF)
+//
+// Licensed 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.
+
+// note: we use `cfg` instead of `config` or `configuration` in order to have a shorter accessor in the codebase.
+
+package cfg
+
+import (
+ "bytes"
+ "os"
+
+ "github.com/apache/incubator-kie-kogito-serverless-operator/log"
+ "github.com/imdario/mergo"
+ "k8s.io/apimachinery/pkg/util/yaml"
+ "k8s.io/klog/v2"
+)
+
+const (
+ defaultConfigMountPath = "/config/controllers_cfg.yaml"
+)
+
+var controllersCfg *ControllersCfg
+
+var defaultControllersCfg = &ControllersCfg{
+ HealthFailureThresholdDevMode: 50,
+ DefaultPvcKanikoSize: "1Gi",
+ KanikoDefaultWarmerImageTag: "gcr.io/kaniko-project/warmer:v1.9.0",
+ KanikoExecutorImageTag: "gcr.io/kaniko-project/executor:v1.9.0",
+ BuilderConfigMapName: "sonataflow-operator-builder-config",
+}
+
+type ControllersCfg struct {
+ DefaultPvcKanikoSize string `yaml:"defaultPvcKanikoSize,omitempty"`
+ HealthFailureThresholdDevMode int32 `yaml:"healthFailureThresholdDevMode,omitempty"`
+ KanikoDefaultWarmerImageTag string `yaml:"kanikoDefaultWarmerImageTag,omitempty"`
+ KanikoExecutorImageTag string `yaml:"kanikoExecutorImageTag,omitempty"`
+ JobsServicePostgreSQLImageTag string `yaml:"jobsServicePostgreSQLImageTag,omitempty"`
+ JobsServiceEphemeralImageTag string `yaml:"jobsServiceEphemeralImageTag,omitempty"`
+ DataIndexPostgreSQLImageTag string `yaml:"dataIndexPostgreSQLImageTag,omitempty"`
+ DataIndexEphemeralImageTag string `yaml:"dataIndexEphemeralImageTag,omitempty"`
+ SonataFlowBaseBuilderImageTag string `yaml:"sonataFlowBaseBuilderImageTag,omitempty"`
+ SonataFlowDevModeImageTag string `yaml:"sonataFlowDevModeImageTag,omitempty"`
+ BuilderConfigMapName string `yaml:"builderConfigMapName,omitempty"`
+}
+
+// InitializeControllersCfg initializes the platform configuration for this instance.
+// Must be called at the main initialization point.
+//
+// For the main initialization, the configuration is discarded since the controllers will read the cache instance.
+// We keep the pointer return here to make sure we can access it from tests if needed or implement an optional use the defaults if fail to read.
+func InitializeControllersCfg() (*ControllersCfg, error) {
+ return InitializeControllersCfgAt(defaultConfigMountPath)
+}
+
+// InitializeControllersCfgAt same as InitializeControllersCfg receiving a path as input.
+func InitializeControllersCfgAt(configFilePath string) (*ControllersCfg, error) {
+ controllersCfg = nil
+ yamlFile, err := os.ReadFile(configFilePath)
+ if err != nil {
+ klog.V(log.E).ErrorS(err, "Failed to read controllers config file", "YAML file location", defaultConfigMountPath)
+ return defaultControllersCfg, err
+ }
+ err = yaml.NewYAMLOrJSONDecoder(bytes.NewReader(yamlFile), 100).Decode(&controllersCfg)
+ if err != nil {
+ klog.V(log.E).ErrorS(err, "Failed to unmarshal controllers config file", "YAML file location", defaultConfigMountPath)
+ return defaultControllersCfg, err
+ }
+ if err = mergo.Merge(controllersCfg, defaultControllersCfg); err != nil {
+ return defaultControllersCfg, err
+ }
+ return controllersCfg, nil
+}
+
+func GetCfg() *ControllersCfg {
+ // Guard to use defaults in local tests
+ // In runtime, main.go calls InitializeControllersCfg to set the cache.
+ if controllersCfg == nil {
+ return defaultControllersCfg
+ }
+ return controllersCfg
+}
diff --git a/controllers/cfg/controllers_cfg_test.go b/controllers/cfg/controllers_cfg_test.go
new file mode 100644
index 0000000..d2d092d
--- /dev/null
+++ b/controllers/cfg/controllers_cfg_test.go
@@ -0,0 +1,52 @@
+// Copyright 2024 Apache Software Foundation (ASF)
+//
+// Licensed 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 cfg
+
+import (
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestInitializeControllersCfgAt_ValidFile(t *testing.T) {
+ cfg, err := InitializeControllersCfgAt("./testdata/controllers-cfg-test.yaml")
+ assert.NoError(t, err)
+ assert.NotNil(t, cfg)
+
+ assert.Equal(t, int32(555), cfg.HealthFailureThresholdDevMode)
+ assert.Equal(t, "2Gi", cfg.DefaultPvcKanikoSize)
+ assert.Equal(t, "local/jobs-service:1.0.0", cfg.JobsServicePostgreSQLImageTag)
+ assert.Equal(t, "local/data-index:1.0.0", cfg.DataIndexPostgreSQLImageTag)
+ assert.Equal(t, "local/sonataflow-builder:1.0.0", cfg.SonataFlowBaseBuilderImageTag)
+ assert.Equal(t, "local/sonataflow-devmode:1.0.0", cfg.SonataFlowDevModeImageTag)
+}
+
+func TestInitializeControllersCfgAt_FileNotFound(t *testing.T) {
+ cfg, err := InitializeControllersCfgAt("./whatever.yaml")
+ assert.Error(t, err)
+ assert.NotNil(t, cfg) //get the default
+ assert.True(t, os.IsNotExist(err))
+ // defaults
+ assert.Equal(t, defaultControllersCfg, cfg)
+}
+
+func TestInitializeControllersCfgAt_NotValidYaml(t *testing.T) {
+ cfg, err := InitializeControllersCfgAt("./testdata/controllers-cfg-invalid.yaml")
+ assert.NoError(t, err)
+ assert.NotNil(t, cfg)
+ // defaults
+ assert.Equal(t, defaultControllersCfg, cfg)
+}
diff --git a/controllers/cfg/testdata/controllers-cfg-invalid.yaml b/controllers/cfg/testdata/controllers-cfg-invalid.yaml
new file mode 100644
index 0000000..3d10351
--- /dev/null
+++ b/controllers/cfg/testdata/controllers-cfg-invalid.yaml
@@ -0,0 +1,15 @@
+# Copyright 2024 Apache Software Foundation (ASF)
+#
+# Licensed 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.
+
+anyThingNotValid: "true"
diff --git a/controllers/cfg/testdata/controllers-cfg-test.yaml b/controllers/cfg/testdata/controllers-cfg-test.yaml
new file mode 100644
index 0000000..66ec30d
--- /dev/null
+++ b/controllers/cfg/testdata/controllers-cfg-test.yaml
@@ -0,0 +1,23 @@
+# Copyright 2024 Apache Software Foundation (ASF)
+#
+# Licensed 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.
+
+# The default size of Kaniko PVC when using the internal operator builder manager
+defaultPvcKanikoSize: 2Gi
+healthFailureThresholdDevMode: 555
+kanikoDefaultWarmerImageTag: gcr.io/kaniko-project/warmer:v1.0.0
+kanikoExecutorImageTag: gcr.io/kaniko-project/executor:v1.0.0
+jobsServicePostgreSQLImageTag: "local/jobs-service:1.0.0"
+dataIndexPostgreSQLImageTag: "local/data-index:1.0.0"
+sonataFlowBaseBuilderImageTag: "local/sonataflow-builder:1.0.0"
+sonataFlowDevModeImageTag: "local/sonataflow-devmode:1.0.0"
diff --git a/controllers/platform/initialize.go b/controllers/platform/initialize.go
index 492cd07..d1bfb07 100644
--- a/controllers/platform/initialize.go
+++ b/controllers/platform/initialize.go
@@ -22,6 +22,7 @@
import (
"context"
+ "github.com/apache/incubator-kie-kogito-serverless-operator/controllers/cfg"
"k8s.io/klog/v2"
corev1 "k8s.io/api/core/v1"
@@ -40,7 +41,6 @@
)
const (
- defaultKanikoPVCSize = "1Gi"
defaultKanikoCachePVCName = "kogito-kaniko-cache-pv"
)
@@ -112,7 +112,7 @@
// TODO: move this to Kaniko packages based on the platform context
func createPersistentVolumeClaim(ctx context.Context, client client.Client, platform *operatorapi.SonataFlowPlatform) error {
- volumeSize, err := resource.ParseQuantity(defaultKanikoPVCSize)
+ volumeSize, err := resource.ParseQuantity(cfg.GetCfg().DefaultPvcKanikoSize)
if err != nil {
return err
}
diff --git a/controllers/platform/kaniko_cache.go b/controllers/platform/kaniko_cache.go
index 251e5a8..df3b806 100644
--- a/controllers/platform/kaniko_cache.go
+++ b/controllers/platform/kaniko_cache.go
@@ -21,25 +21,24 @@
import (
"context"
- "fmt"
+ "github.com/apache/incubator-kie-kogito-serverless-operator/controllers/cfg"
"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/client"
- "github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/util/defaults"
-
v08 "github.com/apache/incubator-kie-kogito-serverless-operator/api/v1alpha08"
+ "github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/client"
)
// kanikoCacheDir is the cache directory for Kaniko builds (mounted into the Kaniko pod).
-const kanikoCacheDir = "/kaniko/cache"
-const kanikoPVCName = "KanikoPersistentVolumeClaim"
-const kanikoWarmerImage = "KanikoWarmerImage"
-const kanikoBuildCacheEnabled = "KanikoBuildCacheEnabled"
-const kanikoDefaultWarmerImageName = "gcr.io/kaniko-project/warmer"
+const (
+ kanikoCacheDir = "/kaniko/cache"
+ kanikoPVCName = "KanikoPersistentVolumeClaim"
+ kanikoWarmerImage = "KanikoWarmerImage"
+ kanikoBuildCacheEnabled = "KanikoBuildCacheEnabled"
+)
func IsKanikoCacheEnabled(platform *v08.SonataFlowPlatform) bool {
return platform.Spec.Build.Config.IsStrategyOptionEnabled(kanikoBuildCacheEnabled)
@@ -62,7 +61,7 @@
if image, found := platform.Spec.Build.Config.BuildStrategyOptions[kanikoWarmerImage]; found {
warmerImage = image
} else {
- warmerImage = fmt.Sprintf("%s:v%s", kanikoDefaultWarmerImageName, defaults.KanikoVersion)
+ warmerImage = cfg.GetCfg().KanikoDefaultWarmerImageTag
}
pod := corev1.Pod{
diff --git a/controllers/platform/platform.go b/controllers/platform/platform.go
index 0a64805..69b636d 100644
--- a/controllers/platform/platform.go
+++ b/controllers/platform/platform.go
@@ -45,7 +45,6 @@
OperatorWatchNamespaceEnvVariable = "WATCH_NAMESPACE"
operatorNamespaceEnvVariable = "NAMESPACE"
- operatorPodNameEnvVariable = "POD_NAME"
)
// Copied from https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/generic/1755-communicating-a-local-registry
diff --git a/controllers/platform/platformutils.go b/controllers/platform/platformutils.go
index ae14c40..f88863b 100644
--- a/controllers/platform/platformutils.go
+++ b/controllers/platform/platformutils.go
@@ -36,7 +36,6 @@
"github.com/apache/incubator-kie-kogito-serverless-operator/controllers/workflowdef"
"github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/client"
- "github.com/apache/incubator-kie-kogito-serverless-operator/container-builder/util/defaults"
"github.com/apache/incubator-kie-kogito-serverless-operator/log"
operatorapi "github.com/apache/incubator-kie-kogito-serverless-operator/api/v1alpha08"
@@ -133,10 +132,6 @@
func setStatusAdditionalInfo(platform *operatorapi.SonataFlowPlatform) {
platform.Status.Info = make(map[string]string)
- klog.V(log.D).InfoS("SonataFlow Platform setting build publish strategy", "namespace", platform.Namespace)
- if platform.Spec.Build.Config.BuildStrategy == operatorapi.OperatorBuildStrategy {
- platform.Status.Info["kanikoVersion"] = defaults.KanikoVersion
- }
klog.V(log.D).InfoS("SonataFlow setting status info", "namespace", platform.Namespace)
platform.Status.Info["goVersion"] = runtime.Version()
platform.Status.Info["goOS"] = runtime.GOOS
@@ -163,9 +158,9 @@
return nil, nil
}
-// GetCustomizedDockerfile gets the Dockerfile as defined in the default platform ConfigMap, apply any custom requirements and return.
-func GetCustomizedDockerfile(dockerfile string, platform operatorapi.SonataFlowPlatform) string {
- if platform.Spec.Build.Config.BaseImage != "" {
+// GetCustomizedBuilderDockerfile gets the Dockerfile as defined in the default platform ConfigMap, apply any custom requirements and return.
+func GetCustomizedBuilderDockerfile(dockerfile string, platform operatorapi.SonataFlowPlatform) string {
+ if len(platform.Spec.Build.Config.BaseImage) > 0 {
res := builderDockerfileFromRE.FindAllStringSubmatch(dockerfile, 1)
dockerfile = strings.Replace(dockerfile, strings.Trim(res[0][1], " "), platform.Spec.Build.Config.BaseImage, 1)
}
diff --git a/controllers/platform/platformutils_test.go b/controllers/platform/platformutils_test.go
index 0707250..f111903 100644
--- a/controllers/platform/platformutils_test.go
+++ b/controllers/platform/platformutils_test.go
@@ -37,14 +37,14 @@
}
dockerfile := string(dockerfileBytes)
// 1 - Let's verify that the default image is used (for this unit test is quay.io/kiegroup/kogito-swf-builder-nightly:latest)
- resDefault := GetCustomizedDockerfile(dockerfile, *platform)
+ resDefault := GetCustomizedBuilderDockerfile(dockerfile, *platform)
foundDefault, err := regexp.MatchString("FROM quay.io/kiegroup/kogito-swf-builder-nightly:latest AS builder", resDefault)
assert.NoError(t, err)
assert.True(t, foundDefault)
// 2 - Let's try to override using the productized image
platform.Spec.Build.Config.BaseImage = "registry.access.redhat.com/openshift-serverless-1-tech-preview/logic-swf-builder-rhel8"
- resProductized := GetCustomizedDockerfile(dockerfile, *platform)
+ resProductized := GetCustomizedBuilderDockerfile(dockerfile, *platform)
foundProductized, err := regexp.MatchString("FROM registry.access.redhat.com/openshift-serverless-1-tech-preview/logic-swf-builder-rhel8 AS builder", resProductized)
assert.NoError(t, err)
assert.True(t, foundProductized)
diff --git a/controllers/platform/services/services.go b/controllers/platform/services/services.go
index 55e7e72..8bd6d19 100644
--- a/controllers/platform/services/services.go
+++ b/controllers/platform/services/services.go
@@ -22,6 +22,7 @@
import (
"fmt"
+ "github.com/apache/incubator-kie-kogito-serverless-operator/controllers/cfg"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
@@ -45,7 +46,7 @@
GetContainerName() string
// GetServiceImageName returns the image name of the service's container. It takes in the service and persistence types and returns a string
// that contains the FQDN of the image, including the tag.
- GetServiceImageName(persistenceName string) string
+ GetServiceImageName(persistenceName constants.PersistenceType) string
// GetServiceName returns the name of the kubernetes service prefixed with the platform name
GetServiceName() string
// GetServiceCmName returns the name of the configmap associated to the service
@@ -101,7 +102,13 @@
return constants.DataIndexServiceName
}
-func (d DataIndexHandler) GetServiceImageName(persistenceName string) string {
+func (d DataIndexHandler) GetServiceImageName(persistenceType constants.PersistenceType) string {
+ if persistenceType == constants.PersistenceTypePostgreSQL && len(cfg.GetCfg().DataIndexPostgreSQLImageTag) > 0 {
+ return cfg.GetCfg().DataIndexPostgreSQLImageTag
+ }
+ if persistenceType == constants.PersistenceTypeEphemeral && len(cfg.GetCfg().DataIndexEphemeralImageTag) > 0 {
+ return cfg.GetCfg().DataIndexEphemeralImageTag
+ }
var tag = version.GetMajorMinor()
var suffix = ""
if version.IsSnapshot() {
@@ -110,7 +117,7 @@
suffix = constants.ImageNameNightlySuffix
}
// returns "quay.io/kiegroup/kogito-data-index-<persistence_layer>:<tag>"
- return fmt.Sprintf("%s-%s-%s:%s", constants.ImageNamePrefix, constants.DataIndexName, persistenceName+suffix, tag)
+ return fmt.Sprintf("%s-%s-%s:%s", constants.ImageNamePrefix, constants.DataIndexName, persistenceType.String()+suffix, tag)
}
func (d DataIndexHandler) GetServiceName() string {
@@ -266,7 +273,13 @@
return constants.JobServiceName
}
-func (j JobServiceHandler) GetServiceImageName(persistenceName string) string {
+func (j JobServiceHandler) GetServiceImageName(persistenceType constants.PersistenceType) string {
+ if persistenceType == constants.PersistenceTypePostgreSQL && len(cfg.GetCfg().JobsServicePostgreSQLImageTag) > 0 {
+ return cfg.GetCfg().JobsServicePostgreSQLImageTag
+ }
+ if persistenceType == constants.PersistenceTypeEphemeral && len(cfg.GetCfg().JobsServiceEphemeralImageTag) > 0 {
+ return cfg.GetCfg().JobsServiceEphemeralImageTag
+ }
var tag = version.GetMajorMinor()
var suffix = ""
if version.IsSnapshot() {
@@ -275,7 +288,7 @@
suffix = constants.ImageNameNightlySuffix
}
// returns "quay.io/kiegroup/kogito-jobs-service-<persistece_layer>:<tag>"
- return fmt.Sprintf("%s-%s-%s:%s", constants.ImageNamePrefix, constants.JobServiceName, persistenceName+suffix, tag)
+ return fmt.Sprintf("%s-%s-%s:%s", constants.ImageNamePrefix, constants.JobServiceName, persistenceType.String()+suffix, tag)
}
func (j JobServiceHandler) GetServiceName() string {
diff --git a/controllers/profiles/common/constants/platform_services.go b/controllers/profiles/common/constants/platform_services.go
index c0bc508..30b25fb 100644
--- a/controllers/profiles/common/constants/platform_services.go
+++ b/controllers/profiles/common/constants/platform_services.go
@@ -23,8 +23,6 @@
QuarkusHTTP = "quarkus-http"
ConfigMapWorkflowPropsVolumeName = "workflow-properties"
- PersistenceTypePostgreSQL = "postgresql"
- PersistenceTypeEphemeral = "ephemeral"
JobServiceRequestEventsURL = "mp.messaging.outgoing.kogito-job-service-job-request-events.url"
JobServiceRequestEventsConnector = "mp.messaging.outgoing.kogito-job-service-job-request-events.connector"
@@ -34,7 +32,6 @@
JobServiceDataSourceReactiveURL = "quarkus.datasource.reactive.url"
JobServiceJobEventsPath = "/v2/jobs/events"
- KogitoProcessEventsProtocol = "http"
KogitoProcessInstancesEventsURL = "mp.messaging.outgoing.kogito-processinstances-events.url"
KogitoProcessInstancesEventsEnabled = "kogito.events.processinstances.enabled"
KogitoProcessInstancesEventsPath = "/processes"
@@ -70,3 +67,14 @@
DefaultDatabaseName string = "sonataflow"
DefaultPostgreSQLPort int = 5432
)
+
+type PersistenceType string
+
+const (
+ PersistenceTypePostgreSQL PersistenceType = "postgresql"
+ PersistenceTypeEphemeral PersistenceType = "ephemeral"
+)
+
+func (p PersistenceType) String() string {
+ return string(p)
+}
diff --git a/controllers/profiles/common/persistence/postgresql.go b/controllers/profiles/common/persistence/postgresql.go
index 6da517b..4bb5f38 100644
--- a/controllers/profiles/common/persistence/postgresql.go
+++ b/controllers/profiles/common/persistence/postgresql.go
@@ -92,7 +92,7 @@
},
{
Name: "QUARKUS_DATASOURCE_DB_KIND",
- Value: constants.PersistenceTypePostgreSQL,
+ Value: constants.PersistenceTypePostgreSQL.String(),
},
{
Name: "QUARKUS_DATASOURCE_JDBC_URL",
diff --git a/controllers/profiles/dev/object_creators_dev.go b/controllers/profiles/dev/object_creators_dev.go
index 0d947c0..45f6926 100644
--- a/controllers/profiles/dev/object_creators_dev.go
+++ b/controllers/profiles/dev/object_creators_dev.go
@@ -22,6 +22,7 @@
import (
"path"
+ "github.com/apache/incubator-kie-kogito-serverless-operator/controllers/cfg"
"github.com/apache/incubator-kie-kogito-serverless-operator/controllers/profiles"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
@@ -35,11 +36,6 @@
"github.com/apache/incubator-kie-kogito-serverless-operator/workflowproj"
)
-const (
- // healthFailureThresholdDevMode exclusive threshold for devmode given that it might take longer than the immutable image to start/live/respond.
- healthFailureThresholdDevMode = 50
-)
-
// serviceCreator is an objectCreator for a basic Service for a workflow using dev profile
// aiming a vanilla Kubernetes Deployment.
// It maps the default HTTP port (80) to the target Java application webserver on port 8080.
@@ -55,21 +51,21 @@
}
func deploymentCreator(workflow *operatorapi.SonataFlow, plf *operatorapi.SonataFlowPlatform) (client.Object, error) {
-
obj, err := common.DeploymentCreator(workflow, plf)
if err != nil {
return nil, err
}
deployment := obj.(*appsv1.Deployment)
_, idx := kubeutil.GetContainerByName(operatorapi.DefaultContainerName, &deployment.Spec.Template.Spec)
+ healthThreshold := cfg.GetCfg().HealthFailureThresholdDevMode
if workflow.Spec.PodTemplate.Container.StartupProbe == nil {
- deployment.Spec.Template.Spec.Containers[idx].StartupProbe.FailureThreshold = healthFailureThresholdDevMode
+ deployment.Spec.Template.Spec.Containers[idx].StartupProbe.FailureThreshold = healthThreshold
}
if workflow.Spec.PodTemplate.Container.LivenessProbe == nil {
- deployment.Spec.Template.Spec.Containers[idx].LivenessProbe.FailureThreshold = healthFailureThresholdDevMode
+ deployment.Spec.Template.Spec.Containers[idx].LivenessProbe.FailureThreshold = healthThreshold
}
if workflow.Spec.PodTemplate.Container.ReadinessProbe == nil {
- deployment.Spec.Template.Spec.Containers[idx].ReadinessProbe.FailureThreshold = healthFailureThresholdDevMode
+ deployment.Spec.Template.Spec.Containers[idx].ReadinessProbe.FailureThreshold = healthThreshold
}
return deployment, nil
}
diff --git a/controllers/profiles/dev/profile_dev_test.go b/controllers/profiles/dev/profile_dev_test.go
index 1c3478e..c5671fa 100644
--- a/controllers/profiles/dev/profile_dev_test.go
+++ b/controllers/profiles/dev/profile_dev_test.go
@@ -24,6 +24,7 @@
"sort"
"testing"
+ "github.com/apache/incubator-kie-kogito-serverless-operator/controllers/cfg"
"k8s.io/client-go/rest"
corev1 "k8s.io/api/core/v1"
@@ -67,7 +68,7 @@
// get the deployment, change the probe and reconcile it again
newThreshold := int32(5) //yes we have to force the type for the assertion below
deployment := test.MustGetDeployment(t, client, workflow)
- assert.Equal(t, int32(healthFailureThresholdDevMode), deployment.Spec.Template.Spec.Containers[0].StartupProbe.FailureThreshold)
+ assert.Equal(t, cfg.GetCfg().HealthFailureThresholdDevMode, deployment.Spec.Template.Spec.Containers[0].StartupProbe.FailureThreshold)
deployment.Spec.Template.Spec.Containers[0].StartupProbe.FailureThreshold = newThreshold
assert.NoError(t, client.Update(context.TODO(), deployment))
// reconcile and fetch from the cluster
diff --git a/controllers/sonataflowplatform_controller_test.go b/controllers/sonataflowplatform_controller_test.go
index abfffb2..022c760 100644
--- a/controllers/sonataflowplatform_controller_test.go
+++ b/controllers/sonataflowplatform_controller_test.go
@@ -40,7 +40,7 @@
var (
envDBKind = corev1.EnvVar{
Name: "QUARKUS_DATASOURCE_DB_KIND",
- Value: constants.PersistenceTypePostgreSQL,
+ Value: constants.PersistenceTypePostgreSQL.String(),
}
envDataIndex = corev1.EnvVar{
@@ -130,7 +130,7 @@
env := corev1.EnvVar{
Name: "QUARKUS_DATASOURCE_DB_KIND",
- Value: constants.PersistenceTypePostgreSQL,
+ Value: constants.PersistenceTypePostgreSQL.String(),
}
assert.Len(t, dep.Spec.Template.Spec.Containers, 1)
assert.Equal(t, di.GetServiceImageName(constants.PersistenceTypeEphemeral), dep.Spec.Template.Spec.Containers[0].Image)
@@ -216,7 +216,7 @@
env := corev1.EnvVar{
Name: "QUARKUS_DATASOURCE_DB_KIND",
- Value: constants.PersistenceTypePostgreSQL,
+ Value: constants.PersistenceTypePostgreSQL.String(),
}
assert.Len(t, dep.Spec.Template.Spec.Containers, 1)
assert.Equal(t, di.GetServiceImageName(constants.PersistenceTypeEphemeral), dep.Spec.Template.Spec.Containers[0].Image)
@@ -294,7 +294,7 @@
}
dbSourceKind := corev1.EnvVar{
Name: "QUARKUS_DATASOURCE_DB_KIND",
- Value: constants.PersistenceTypePostgreSQL,
+ Value: constants.PersistenceTypePostgreSQL.String(),
}
dbSourceDIURL := corev1.EnvVar{
Name: "QUARKUS_DATASOURCE_JDBC_URL",
@@ -398,7 +398,7 @@
}
dbSourceKind := corev1.EnvVar{
Name: "QUARKUS_DATASOURCE_DB_KIND",
- Value: constants.PersistenceTypePostgreSQL,
+ Value: constants.PersistenceTypePostgreSQL.String(),
}
dbDIUsername := corev1.EnvVar{
Name: "QUARKUS_DATASOURCE_USERNAME",
diff --git a/controllers/workflowdef/image.go b/controllers/workflowdef/image.go
index 760a233..220aa20 100644
--- a/controllers/workflowdef/image.go
+++ b/controllers/workflowdef/image.go
@@ -21,6 +21,7 @@
import (
"github.com/apache/incubator-kie-kogito-serverless-operator/api/v1alpha08"
+ "github.com/apache/incubator-kie-kogito-serverless-operator/controllers/cfg"
"github.com/apache/incubator-kie-kogito-serverless-operator/version"
)
@@ -29,7 +30,6 @@
nightlySuffix = "nightly"
defaultWorkflowDevModeImage = "quay.io/kiegroup/kogito-swf-devmode"
defaultWorkflowBuilderImage = "quay.io/kiegroup/kogito-swf-builder"
- defaultOperatorImage = "quay.io/kiegroup/kogito-serverless-operator"
)
// GetWorkflowAppImageNameTag returns the image name with tag to use for the image to be produced for a given workflow.
@@ -49,17 +49,19 @@
}
func GetDefaultWorkflowDevModeImageTag() string {
+ if len(cfg.GetCfg().SonataFlowDevModeImageTag) > 0 {
+ return cfg.GetCfg().SonataFlowDevModeImageTag
+ }
return GetDefaultImageTag(defaultWorkflowDevModeImage)
}
func GetDefaultWorkflowBuilderImageTag() string {
+ if len(cfg.GetCfg().SonataFlowBaseBuilderImageTag) > 0 {
+ return cfg.GetCfg().SonataFlowBaseBuilderImageTag
+ }
return GetDefaultImageTag(defaultWorkflowBuilderImage)
}
-func GetDefaultOperatorImageTag() string {
- return GetDefaultImageTag(defaultOperatorImage)
-}
-
func GetDefaultImageTag(imgTag string) string {
if version.IsSnapshot() {
imgTag += "-" + nightlySuffix
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
index ba1e363..2112d86 100644
--- a/docs/CONTRIBUTING.md
+++ b/docs/CONTRIBUTING.md
@@ -168,13 +168,12 @@
A configmap called `sonataflow-operator-builder-config` will be created under the `sonataflow-operator-system` namespace
when the Operator will be installed, and it contains:
-- DEFAULT_BUILDER_RESOURCE = Dockerfile
- DEFAULT_WORKFLOW_EXTENSION = .sw.json
- Dockerfile = `<dockerfile content>`
## Customize Builder Image
-At the startup a [Dockerfile](../config/manager/sonataflow_builder_dockerfile.yaml) is placed in a configmap. This
+At the startup a [Dockerfile](../config/manager/SonataFlow-Builder.containerfile) is placed in a configmap. This
Dockerfile uses a base image
called [kogito-swf-builder](https://github.com/kiegroup/kogito-images/tree/master/modules/kogito-swf-builder) with:
diff --git a/go.mod b/go.mod
index 4f650cf..cecb57f 100644
--- a/go.mod
+++ b/go.mod
@@ -74,7 +74,6 @@
github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 // indirect
github.com/google/uuid v1.3.1 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
diff --git a/go.sum b/go.sum
index 86d6dfc..f6b34f6 100644
--- a/go.sum
+++ b/go.sum
@@ -371,8 +371,6 @@
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
diff --git a/hack/local/run-e2e.sh b/hack/local/run-e2e.sh
index a048fad..af20051 100755
--- a/hack/local/run-e2e.sh
+++ b/hack/local/run-e2e.sh
@@ -23,6 +23,7 @@
export OPERATOR_IMAGE_NAME=localhost/kogito-serverless-operator:0.0.1
# clean up previous runs
+kubectl get namespaces -o name | awk -F/ '/^namespace\/test/ {print $2}' | xargs kubectl delete namespace
make undeploy ignore-not-found=true
make deploy IMG="${OPERATOR_IMAGE_NAME}"
@@ -31,4 +32,6 @@
echo "Failure: Failed to build image, exiting " >&2
exit 1
fi
+
+make deploy IMG="${OPERATOR_IMAGE_NAME}"
make test-e2e
diff --git a/main.go b/main.go
index 240a1d2..2e39652 100644
--- a/main.go
+++ b/main.go
@@ -23,6 +23,7 @@
"flag"
"os"
+ "github.com/apache/incubator-kie-kogito-serverless-operator/controllers/cfg"
eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1"
sourcesv1 "knative.dev/eventing/pkg/apis/sources/v1"
@@ -91,6 +92,12 @@
utils.SetIsOpenShift(mgr.GetConfig())
+ // Fail fast, we can change this behavior in the future to read from defaults instead.
+ if _, err = cfg.InitializeControllersCfg(); err != nil {
+ klog.V(log.E).ErrorS(err, "unable to read controllers configuration file")
+ os.Exit(1)
+ }
+
if err = (&controllers.SonataFlowReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
diff --git a/operator.yaml b/operator.yaml
index 939c060..ef09c6c 100644
--- a/operator.yaml
+++ b/operator.yaml
@@ -26857,7 +26857,6 @@
---
apiVersion: v1
data:
- DEFAULT_BUILDER_RESOURCE_NAME: Dockerfile
DEFAULT_WORKFLOW_EXTENSION: .sw.json
Dockerfile: "FROM quay.io/kiegroup/kogito-swf-builder-nightly:latest AS builder\n\n#
variables that can be overridden by the builder\n# To add a Quarkus extension
@@ -26881,21 +26880,38 @@
---
apiVersion: v1
data:
- controller_manager_config.yaml: |
- apiVersion: controller-runtime.sigs.k8s.io/v1alpha1
- kind: ControllerManagerConfig
- health:
- healthProbeBindAddress: :8081
- metrics:
- bindAddress: 127.0.0.1:8080
- webhook:
- port: 9443
- leaderElection:
- leaderElect: true
- resourceName: 1be5e57d.kiegroup.org
+ controllers_cfg.yaml: |
+ # The default size of Kaniko PVC when using the internal operator builder manager
+ defaultPvcKanikoSize: 1Gi
+ # How much time (in seconds) to wait for a devmode workflow to start.
+ # This information is used for the controller manager to create new devmode containers and setup the healthcheck probes.
+ healthFailureThresholdDevMode: 50
+ # Default image used internally by the Operator Managed Kaniko builder to create the warmup pods
+ kanikoDefaultWarmerImageTag: gcr.io/kaniko-project/warmer:v1.9.0
+ # Default image used internally by the Operator Managed Kaniko builder to create the executor pods
+ kanikoExecutorImageTag: gcr.io/kaniko-project/executor:v1.9.0
+ # The Jobs Service image to use, if empty the operator will use the default Apache Community one based on the current operator's version
+ jobsServicePostgreSQLImageTag: ""
+ jobsServiceEphemeralImageTag: ""
+ # The Data Index image to use, if empty the operator will use the default Apache Community one based on the current operator's version
+ dataIndexPostgreSQLImageTag: ""
+ dataIndexEphemeralTag: ""
+ # SonataFlow base builder image used in the internal Dockerfile to build workflow applications in preview profile
+ # Order of precedence is:
+ # 1. SonataFlowPlatform in the given namespace
+ # 2. This configuration
+ # 3. The FROM in the Dockerfile in the operator's namespace "sonataflow-operator-builder-config" configMap.
+ # If 1 or 2, the FROM tag will be replaced by the tag se there.
+ # If empty the operator will use the default Apache Community one based on the current operator's version.
+ sonataFlowBaseBuilderImageTag: ""
+ # The image to use to deploy SonataFlow workflow images in devmode profile.
+ # If empty the operator will use the default Apache Community one based on the current operator's version.
+ sonataFlowDevModeImageTag: ""
+ # The default name of the builder configMap in the operator's namespace
+ builderConfigMapName: "sonataflow-operator-builder-config"
kind: ConfigMap
metadata:
- name: sonataflow-operator-manager-config
+ name: sonataflow-operator-controllers-config
namespace: sonataflow-operator-system
---
apiVersion: v1
@@ -26935,31 +26951,6 @@
spec:
containers:
- args:
- - --secure-listen-address=0.0.0.0:8443
- - --upstream=http://127.0.0.1:8080/
- - --logtostderr=true
- - --v=0
- image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0
- name: kube-rbac-proxy
- ports:
- - containerPort: 8443
- name: https
- protocol: TCP
- resources:
- limits:
- cpu: 500m
- memory: 128Mi
- requests:
- cpu: 5m
- memory: 64Mi
- securityContext:
- allowPrivilegeEscalation: false
- capabilities:
- drop:
- - ALL
- seccompProfile:
- type: RuntimeDefault
- - args:
- --health-probe-bind-address=:8081
- --metrics-bind-address=127.0.0.1:8080
- --leader-elect
@@ -26997,7 +26988,40 @@
capabilities:
drop:
- ALL
+ volumeMounts:
+ - mountPath: /config/controllers_cfg.yaml
+ name: controllers-config
+ subPath: controllers_cfg.yaml
+ - args:
+ - --secure-listen-address=0.0.0.0:8443
+ - --upstream=http://127.0.0.1:8080/
+ - --logtostderr=true
+ - --v=0
+ image: gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0
+ name: kube-rbac-proxy
+ ports:
+ - containerPort: 8443
+ name: https
+ protocol: TCP
+ resources:
+ limits:
+ cpu: 500m
+ memory: 128Mi
+ requests:
+ cpu: 5m
+ memory: 64Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ seccompProfile:
+ type: RuntimeDefault
securityContext:
runAsNonRoot: true
serviceAccountName: sonataflow-operator-controller-manager
terminationGracePeriodSeconds: 10
+ volumes:
+ - configMap:
+ name: sonataflow-operator-controllers-config
+ name: controllers-config
diff --git a/testbdd/installers/sonataflow_installer.go b/testbdd/installers/sonataflow_installer.go
index f9520f6..1b528bc 100644
--- a/testbdd/installers/sonataflow_installer.go
+++ b/testbdd/installers/sonataflow_installer.go
@@ -33,6 +33,8 @@
srvframework "github.com/apache/incubator-kie-kogito-serverless-operator/testbdd/framework"
)
+const defaultOperatorImage = "quay.io/kiegroup/kogito-serverless-operator"
+
var (
// sonataFlowYamlClusterInstaller installs SonataFlow operator cluster wide using YAMLs
sonataFlowYamlClusterInstaller = installers.YamlClusterWideServiceInstaller{
@@ -101,7 +103,7 @@
return err
}
- regexp, err := regexp.Compile(workflowdef.GetDefaultOperatorImageTag())
+ regexp, err := regexp.Compile(getDefaultOperatorImageTag())
if err != nil {
return err
}
@@ -191,3 +193,7 @@
}
return true
}
+
+func getDefaultOperatorImageTag() string {
+ return workflowdef.GetDefaultImageTag(defaultOperatorImage)
+}
diff --git a/utils/common.go b/utils/common.go
index c105f2a..e24e869 100644
--- a/utils/common.go
+++ b/utils/common.go
@@ -28,8 +28,6 @@
)
const (
- // DebugV is the default verbosity for the debugger logger
- DebugV = 2
HttpScheme = "http"
)