This is an automated email from the ASF dual-hosted git repository.
wmedvedeo pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-serverless-operator.git
The following commit(s) were added to refs/heads/main by this push:
new 957ca3df [issue-547] Allow workflow deployment if Knative broker is
not defined in the SonataFlow or SonataFlowPlatform CRs (#553)
957ca3df is described below
commit 957ca3df010423736800fb3ef11c3b11727dfefc
Author: Jianrong Zhang <[email protected]>
AuthorDate: Thu Oct 31 13:53:25 2024 -0400
[issue-547] Allow workflow deployment if Knative broker is not defined in
the SonataFlow or SonataFlowPlatform CRs (#553)
---
.../controller/profiles/common/object_creators.go | 17 +----
.../profiles/common/object_creators_test.go | 6 +-
.../profiles/preview/deployment_handler.go | 33 --------
test/e2e/clusterplatform_test.go | 3 +-
.../02-sonataflow_platform.yaml} | 25 +++---
.../kustomization.yaml | 1 -
.../03-sonataflow_callbackstatetimeouts.sw.yaml | 88 ++++++++++++++++++++++
.../ephemeral-with-workflow/kustomization.yaml | 1 -
8 files changed, 109 insertions(+), 65 deletions(-)
diff --git a/internal/controller/profiles/common/object_creators.go
b/internal/controller/profiles/common/object_creators.go
index 240c8aef..1a1bbec7 100644
--- a/internal/controller/profiles/common/object_creators.go
+++ b/internal/controller/profiles/common/object_creators.go
@@ -26,7 +26,6 @@ import (
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/profiles"
-
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/workflowdef"
servingv1 "knative.dev/serving/pkg/apis/serving/v1"
cncfmodel "github.com/serverlessworkflow/sdk-go/v2/model"
@@ -47,7 +46,6 @@ import (
operatorapi
"github.com/apache/incubator-kie-kogito-serverless-operator/api/v1alpha08"
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/knative"
-
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/platform/services"
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/profiles/common/constants"
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/profiles/common/persistence"
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/profiles/common/properties"
@@ -285,14 +283,7 @@ func SinkBindingCreator(workflow *operatorapi.SonataFlow,
plf *operatorapi.Sonat
if err != nil {
return nil, err
}
- dataIndexEnabled := services.IsDataIndexEnabled(plf)
- jobServiceEnabled := services.IsJobServiceEnabled(plf)
-
- // skip if no produced event is found and there is no
DataIndex/JobService enabled
if sink == nil {
- if dataIndexEnabled || jobServiceEnabled ||
workflowdef.ContainsEventKind(workflow, cncfmodel.EventKindProduced) {
- return nil, fmt.Errorf("a sink in the SonataFlow %s or
broker in the SonataFlowPlatform %s should be configured when DataIndex or
JobService is enabled", workflow.Name, plf.Name)
- }
return nil, nil /*nothing to do*/
}
@@ -389,11 +380,9 @@ func TriggersCreator(workflow *operatorapi.SonataFlow, plf
*operatorapi.SonataFl
if err != nil {
return nil, err
}
- if brokerRef == nil {
- return nil, fmt.Errorf("no broker configured for
eventType %s in SonataFlow %s", event.Type, workflow.Name)
- }
- if !knative.IsKnativeBroker(brokerRef) {
- return nil, fmt.Errorf("no valid broker configured for
eventType %s in SonataFlow %s", event.Type, workflow.Name)
+ if brokerRef == nil || !knative.IsKnativeBroker(brokerRef) {
+ // No broker configured for the eventType. Skip and
will not create trigger for it.
+ continue
}
if err := knative.ValidateBroker(brokerRef.Name,
brokerRef.Namespace); err != nil {
return nil, err
diff --git a/internal/controller/profiles/common/object_creators_test.go
b/internal/controller/profiles/common/object_creators_test.go
index 9e2b5274..e2d86d7d 100644
--- a/internal/controller/profiles/common/object_creators_test.go
+++ b/internal/controller/profiles/common/object_creators_test.go
@@ -246,8 +246,7 @@ func
TestEnsureWorkflowSinkBindingWithoutBrokerAreNotCreated(t *testing.T) {
plf := test.GetBasePlatformWithBroker()
plf.Spec.Eventing = nil // No broker configured in the platform, but
data index and jobs service are enabled
sinkBinding, err := SinkBindingCreator(workflow, plf)
- assert.Error(t, err)
- assert.Contains(t, err.Error(), "a sink in the SonataFlow vet or broker
in the SonataFlowPlatform sonataflow-platform should be configured when
DataIndex or JobService is enabled")
+ assert.NoError(t, err)
assert.Nil(t, sinkBinding)
}
@@ -372,8 +371,7 @@ func TestEnsureWorkflowTriggersWithoutBrokerAreNotCreated(t
*testing.T) {
plf := test.GetBasePlatform()
triggers, err := TriggersCreator(workflow, plf)
- assert.Error(t, err)
- assert.Contains(t, err.Error(), "no broker configured for eventType
events.vet.appointments in SonataFlow vet")
+ assert.NoError(t, err)
assert.Nil(t, triggers)
}
diff --git a/internal/controller/profiles/preview/deployment_handler.go
b/internal/controller/profiles/preview/deployment_handler.go
index 17cc49ed..c6a8e286 100644
--- a/internal/controller/profiles/preview/deployment_handler.go
+++ b/internal/controller/profiles/preview/deployment_handler.go
@@ -19,7 +19,6 @@ package preview
import (
"context"
- "fmt"
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/knative"
v1 "k8s.io/api/core/v1"
@@ -31,7 +30,6 @@ import (
operatorapi
"github.com/apache/incubator-kie-kogito-serverless-operator/api/v1alpha08"
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/monitoring"
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/platform"
-
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/platform/services"
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/profiles/common"
"github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/profiles/common/constants"
"github.com/apache/incubator-kie-kogito-serverless-operator/utils"
@@ -59,11 +57,6 @@ func (d *DeploymentReconciler) reconcileWithImage(ctx
context.Context, workflow
return reconcile.Result{Requeue: false}, nil, err
}
- // Checks if the workflow has sink configured.
- if requires, err := d.ensureKnativeSinkConfigured(workflow); requires
|| err != nil {
- return reconcile.Result{Requeue: false}, nil, err
- }
-
// Ensure objects
result, objs, err := d.ensureObjects(ctx, workflow, image)
if err != nil || result.Requeue {
@@ -100,32 +93,6 @@ func (d *DeploymentReconciler)
ensureKnativeServingRequired(workflow *operatorap
return false, nil
}
-// if Knative Eventing is available, the workflow should have a sink
configured, or the platform should have a broker defined
-func (d *DeploymentReconciler) ensureKnativeSinkConfigured(workflow
*operatorapi.SonataFlow) (bool, error) {
- avail, err := knative.GetKnativeAvailability(d.Cfg)
- if err != nil {
- return true, err
- }
- if !avail.Eventing {
- return false, nil
- }
- platform, err := platform.GetActivePlatform(context.TODO(), d.C,
workflow.Namespace)
- if err != nil {
- return true, err
- }
- sink, err := knative.GetWorkflowSink(workflow, platform)
- if err != nil {
- return true, err
- }
- if sink == nil && (services.IsDataIndexEnabled(platform) ||
services.IsJobServiceEnabled(platform)) {
- d.Recorder.Eventf(workflow, v1.EventTypeWarning,
- "KnativeSinkNotConfigured",
- "Failed to deploy workflow. No sink configured in the
workflow or the platform when Job Service or Data Index Service is enabled.")
- return true, fmt.Errorf("no sink configured in the workflow or
the platform when Job Service or Data Index Service is enabled")
- }
- return false, nil
-}
-
func (d *DeploymentReconciler) ensureObjects(ctx context.Context, workflow
*operatorapi.SonataFlow, image string) (reconcile.Result, []client.Object,
error) {
pl, _ := platform.GetActivePlatform(ctx, d.C, workflow.Namespace)
userPropsCM, _, err := d.ensurers.userPropsConfigMap.Ensure(ctx,
workflow)
diff --git a/test/e2e/clusterplatform_test.go b/test/e2e/clusterplatform_test.go
index 9f8fa169..c6e4f558 100644
--- a/test/e2e/clusterplatform_test.go
+++ b/test/e2e/clusterplatform_test.go
@@ -230,7 +230,8 @@ var _ = Describe("Cluster Platform Use Cases :: ",
Label("cluster"), Ordered, fu
Expect(err).NotTo(HaveOccurred())
},
Entry("without services configured",
test.GetPathFromE2EDirectory("platform", "noservices"),
metadata.GitOpsProfile.String(), ephemeral, false),
- Entry("with services configured",
test.GetPathFromE2EDirectory("platform", "services"),
metadata.GitOpsProfile.String(), "ephemeral-with-workflow", true),
+ Entry("with services configured and platform broker",
test.GetPathFromE2EDirectory("platform", "services"),
metadata.GitOpsProfile.String(), "ephemeral-with-workflow", true),
+ Entry("with services configured and no broker",
test.GetPathFromE2EDirectory("platform", "services"),
metadata.GitOpsProfile.String(), "ephemeral-with-workflow-no-broker", true),
)
DescribeTable("against a platform in a separate namespace",
func(testcaseDir string, profile string, persistenceType string) {
diff --git
a/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow/kustomization.yaml
b/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow-no-broker/02-sonataflow_platform.yaml
similarity index 74%
copy from
test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow/kustomization.yaml
copy to
test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow-no-broker/02-sonataflow_platform.yaml
index bf215bdd..d6af1ae9 100644
---
a/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow/kustomization.yaml
+++
b/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow-no-broker/02-sonataflow_platform.yaml
@@ -15,14 +15,17 @@
# specific language governing permissions and limitations
# under the License.
-apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
-
-resources:
-- 00-broker.yaml
-- 02-sonataflow_platform.yaml
-- sonataflow/03-sonataflow_callbackstatetimeouts.sw.yaml
-
-sortOptions:
- order: fifo
-
+apiVersion: sonataflow.org/v1alpha08
+kind: SonataFlowPlatform
+metadata:
+ name: sonataflow-platform
+spec:
+ build:
+ config:
+ strategyOptions:
+ KanikoBuildCacheEnabled: "true"
+ services:
+ dataIndex:
+ enabled: true
+ jobService:
+ enabled: true
diff --git
a/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow/kustomization.yaml
b/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow-no-broker/kustomization.yaml
similarity index 98%
copy from
test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow/kustomization.yaml
copy to
test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow-no-broker/kustomization.yaml
index bf215bdd..a95dc70d 100644
---
a/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow/kustomization.yaml
+++
b/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow-no-broker/kustomization.yaml
@@ -19,7 +19,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
-- 00-broker.yaml
- 02-sonataflow_platform.yaml
- sonataflow/03-sonataflow_callbackstatetimeouts.sw.yaml
diff --git
a/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow-no-broker/sonataflow/03-sonataflow_callbackstatetimeouts.sw.yaml
b/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow-no-broker/sonataflow/03-sonataflow_callbackstatetimeouts.sw.yaml
new file mode 100644
index 00000000..a11207c5
--- /dev/null
+++
b/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow-no-broker/sonataflow/03-sonataflow_callbackstatetimeouts.sw.yaml
@@ -0,0 +1,88 @@
+# 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.
+
+apiVersion: sonataflow.org/v1alpha08
+kind: SonataFlow
+metadata:
+ name: callbackstatetimeouts
+ annotations:
+ sonataflow.org/description: Callback State Timeouts Example k8s
+ sonataflow.org/version: 0.0.1
+ sonataflow.org/profile: gitops
+spec:
+ podTemplate:
+ replicas: 0
+ container:
+ image: replaceme
+ flow:
+ start: PrintStartMessage
+ events:
+ - name: callbackEvent
+ source: ''
+ type: callback_event_type
+ functions:
+ - name: systemOut
+ type: custom
+ operation: sysout
+ states:
+ - name: PrintStartMessage
+ type: operation
+ actions:
+ - name: printSystemOut
+ functionRef:
+ refName: systemOut
+ arguments:
+ message: "${\"callback-state-timeouts: \" +
$WORKFLOW.instanceId + \" has started.\"}"
+ transition: CallbackState
+ - name: CallbackState
+ type: callback
+ action:
+ name: callbackAction
+ functionRef:
+ refName: systemOut
+ arguments:
+ message: "${\"callback-state-timeouts: \" + $WORKFLOW.instanceId
+ \" has executed the callbackFunction.\"}"
+ eventRef: callbackEvent
+ transition: CheckEventArrival
+ timeouts:
+ eventTimeout: PT30S
+ - name: CheckEventArrival
+ type: switch
+ dataConditions:
+ - condition: "${ .eventData != null }"
+ transition: EventArrived
+ defaultCondition:
+ transition: EventNotArrived
+ - name: EventArrived
+ type: inject
+ data:
+ exitMessage: "The callback event has arrived."
+ transition: PrintExitMessage
+ - name: EventNotArrived
+ type: inject
+ data:
+ exitMessage: "The callback event has not arrived, and the timeout
has overdue."
+ transition: PrintExitMessage
+ - name: PrintExitMessage
+ type: operation
+ actions:
+ - name: printSystemOut
+ functionRef:
+ refName: systemOut
+ arguments:
+ message: "${\"callback-state-timeouts: \" +
$WORKFLOW.instanceId + \" has finalized. \" + .exitMessage + \" eventData: \" +
.eventData}"
+ end: true
diff --git
a/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow/kustomization.yaml
b/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow/kustomization.yaml
index bf215bdd..a95dc70d 100644
---
a/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow/kustomization.yaml
+++
b/test/e2e/testdata/platform/services/gitops/ephemeral-with-workflow/kustomization.yaml
@@ -19,7 +19,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
-- 00-broker.yaml
- 02-sonataflow_platform.yaml
- sonataflow/03-sonataflow_callbackstatetimeouts.sw.yaml
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]