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 8d3510f5 kie-kogito-serverless-operator-520: Error when deploying a WF 
with the dev profile in a SPF that has persistence configured (#531)
8d3510f5 is described below

commit 8d3510f584fcd2651e1ad1b239bc5db4834c50f8
Author: Walter Medvedeo <[email protected]>
AuthorDate: Wed Sep 11 16:26:12 2024 +0200

    kie-kogito-serverless-operator-520: Error when deploying a WF with the dev 
profile in a SPF that has persistence configured (#531)
---
 controllers/profiles/common/object_creators.go     |  16 +-
 .../profiles/common/object_creators_test.go        | 181 +++++++++++++++++++++
 2 files changed, 191 insertions(+), 6 deletions(-)

diff --git a/controllers/profiles/common/object_creators.go 
b/controllers/profiles/common/object_creators.go
index 8b72a234..94a0d21d 100644
--- a/controllers/profiles/common/object_creators.go
+++ b/controllers/profiles/common/object_creators.go
@@ -23,6 +23,8 @@ import (
        "fmt"
        "strings"
 
+       
"github.com/apache/incubator-kie-kogito-serverless-operator/controllers/profiles"
+
        
"github.com/apache/incubator-kie-kogito-serverless-operator/controllers/workflowdef"
        servingv1 "knative.dev/serving/pkg/apis/serving/v1"
 
@@ -200,12 +202,14 @@ func defaultContainer(workflow *operatorapi.SonataFlow, 
plf *operatorapi.SonataF
        if err := mergo.Merge(defaultFlowContainer, 
workflow.Spec.PodTemplate.Container.ToContainer(), mergo.WithOverride); err != 
nil {
                return nil, err
        }
-       var pper *operatorapi.PlatformPersistenceOptionsSpec
-       if plf != nil && plf.Spec.Persistence != nil {
-               pper = plf.Spec.Persistence
-       }
-       if p := persistence.RetrieveConfiguration(workflow.Spec.Persistence, 
pper, workflow.Name); p != nil {
-               defaultFlowContainer = 
persistence.ConfigurePersistence(defaultFlowContainer, p, workflow.Name, 
workflow.Namespace)
+       if !profiles.IsDevProfile(workflow) {
+               var pper *operatorapi.PlatformPersistenceOptionsSpec
+               if plf != nil && plf.Spec.Persistence != nil {
+                       pper = plf.Spec.Persistence
+               }
+               if p := 
persistence.RetrieveConfiguration(workflow.Spec.Persistence, pper, 
workflow.Name); p != nil {
+                       defaultFlowContainer = 
persistence.ConfigurePersistence(defaultFlowContainer, p, workflow.Name, 
workflow.Namespace)
+               }
        }
        // immutable
        defaultFlowContainer.Name = operatorapi.DefaultContainerName
diff --git a/controllers/profiles/common/object_creators_test.go 
b/controllers/profiles/common/object_creators_test.go
index 074547e8..d0733d97 100644
--- a/controllers/profiles/common/object_creators_test.go
+++ b/controllers/profiles/common/object_creators_test.go
@@ -23,6 +23,9 @@ import (
        "context"
        "testing"
 
+       
"github.com/apache/incubator-kie-kogito-serverless-operator/api/metadata"
+       "k8s.io/apimachinery/pkg/util/intstr"
+
        sourcesv1 "knative.dev/eventing/pkg/apis/sources/v1"
 
        "github.com/magiconair/properties"
@@ -609,3 +612,181 @@ func 
TestMergePodSpec_WithServicedPostgreSQL_In_Platform_But_Workflow_CR_Not_Req
        assert.Equal(t, int32(8080), flowContainer.Ports[0].ContainerPort)
        assert.Nil(t, flowContainer.Env)
 }
+
+func TestDefaultContainer_WithPlatformPersistenceWorkflowWithDefaultProfile(t 
*testing.T) {
+       workflow := test.GetBaseSonataFlow(t.Name())
+       doTestDefaultContainer_WithPlatformPersistence(t, workflow, true)
+}
+
+func TestDefaultContainer_WithPlatformPersistenceWorkflowWithPreviewProfile(t 
*testing.T) {
+       workflow := test.GetBaseSonataFlow(t.Name())
+       workflowproj.SetWorkflowProfile(workflow, metadata.PreviewProfile)
+       doTestDefaultContainer_WithPlatformPersistence(t, workflow, true)
+}
+
+func TestDefaultContainer_WithPlatformPersistenceWorkflowWithGitOpsProfile(t 
*testing.T) {
+       workflow := test.GetBaseSonataFlow(t.Name())
+       workflowproj.SetWorkflowProfile(workflow, metadata.GitOpsProfile)
+       doTestDefaultContainer_WithPlatformPersistence(t, workflow, true)
+}
+
+func TestDefaultContainer_WithPlatformPersistenceWorkflowWithDevProfile(t 
*testing.T) {
+       workflow := test.GetBaseSonataFlow(t.Name())
+       workflowproj.SetWorkflowProfile(workflow, metadata.DevProfile)
+       doTestDefaultContainer_WithPlatformPersistence(t, workflow, false)
+}
+
+func doTestDefaultContainer_WithPlatformPersistence(t *testing.T, workflow 
*v1alpha08.SonataFlow, checkPersistence bool) {
+       platform := &v1alpha08.SonataFlowPlatform{
+               ObjectMeta: metav1.ObjectMeta{
+                       Name:      "foo",
+                       Namespace: "default",
+               },
+               Spec: v1alpha08.SonataFlowPlatformSpec{
+                       Persistence: &v1alpha08.PlatformPersistenceOptionsSpec{
+                               PostgreSQL: 
&v1alpha08.PlatformPersistencePostgreSQL{
+                                       SecretRef: 
v1alpha08.PostgreSQLSecretOptions{
+                                               Name:        "foo_secret",
+                                               UserKey:     "username",
+                                               PasswordKey: "password",
+                                       },
+                                       ServiceRef: 
&v1alpha08.SQLServiceOptions{
+                                               Name:         "service_name",
+                                               Namespace:    
"service_namespace",
+                                               Port:         &postgreSQLPort,
+                                               DatabaseName: "foo",
+                                       },
+                               },
+                       },
+               },
+       }
+
+       container, err := defaultContainer(workflow, platform)
+       assert.Nil(t, err)
+       assert.NotNil(t, container)
+       assert.Equal(t, "workflow", container.Name)
+
+       //verify default container port.
+       assert.Equal(t, 1, len(container.Ports))
+       assert.Equal(t, "h2c", container.Ports[0].Name)
+       assert.Equal(t, int32(0), container.Ports[0].HostPort)
+       assert.Equal(t, int32(8080), container.Ports[0].ContainerPort)
+       assert.Equal(t, corev1.Protocol("TCP"), container.Ports[0].Protocol)
+       assert.Equal(t, "", container.Ports[0].HostIP)
+
+       //verify default container health checks
+       assert.Equal(t, &corev1.Probe{
+               ProbeHandler: corev1.ProbeHandler{
+                       Exec: nil,
+                       HTTPGet: &corev1.HTTPGetAction{
+                               Path: "/q/health/live",
+                               Port: intstr.IntOrString{
+                                       Type:   0,
+                                       IntVal: 8080,
+                                       StrVal: "",
+                               },
+                               Host:        "",
+                               Scheme:      "",
+                               HTTPHeaders: nil,
+                       },
+                       TCPSocket: nil,
+                       GRPC:      nil,
+               },
+               InitialDelaySeconds:           0,
+               TimeoutSeconds:                3,
+               PeriodSeconds:                 15,
+               SuccessThreshold:              0,
+               FailureThreshold:              0,
+               TerminationGracePeriodSeconds: nil,
+       }, container.LivenessProbe)
+
+       assert.Equal(t, &corev1.Probe{
+               ProbeHandler: corev1.ProbeHandler{
+                       Exec: nil,
+                       HTTPGet: &corev1.HTTPGetAction{
+                               Path: "/q/health/ready",
+                               Port: intstr.IntOrString{
+                                       Type:   0,
+                                       IntVal: 8080,
+                                       StrVal: "",
+                               },
+                               Host:        "",
+                               Scheme:      "",
+                               HTTPHeaders: nil,
+                       },
+                       TCPSocket: nil,
+                       GRPC:      nil,
+               },
+               InitialDelaySeconds:           0,
+               TimeoutSeconds:                3,
+               PeriodSeconds:                 15,
+               SuccessThreshold:              0,
+               FailureThreshold:              0,
+               TerminationGracePeriodSeconds: nil,
+       }, container.ReadinessProbe)
+
+       assert.Equal(t, &corev1.Probe{
+               ProbeHandler: corev1.ProbeHandler{
+                       Exec: nil,
+                       HTTPGet: &corev1.HTTPGetAction{
+                               Path: "/q/health/started",
+                               Port: intstr.IntOrString{
+                                       Type:   0,
+                                       IntVal: 8080,
+                                       StrVal: "",
+                               },
+                               Host:        "",
+                               Scheme:      "",
+                               HTTPHeaders: nil,
+                       },
+                       TCPSocket: nil,
+                       GRPC:      nil,
+               },
+               InitialDelaySeconds:           10,
+               TimeoutSeconds:                3,
+               PeriodSeconds:                 15,
+               SuccessThreshold:              0,
+               FailureThreshold:              5,
+               TerminationGracePeriodSeconds: nil,
+       }, container.StartupProbe)
+
+       //verify the persistence configuration is present if requested.
+       if checkPersistence {
+               expectedEnvVars := []corev1.EnvVar{
+                       {
+                               Name:  "QUARKUS_DATASOURCE_USERNAME",
+                               Value: "",
+                               ValueFrom: &corev1.EnvVarSource{
+                                       SecretKeyRef: &corev1.SecretKeySelector{
+                                               LocalObjectReference: 
corev1.LocalObjectReference{Name: "foo_secret"}, Key: "username",
+                                       },
+                               },
+                       },
+                       {
+                               Name:  "QUARKUS_DATASOURCE_PASSWORD",
+                               Value: "",
+                               ValueFrom: &corev1.EnvVarSource{
+                                       SecretKeyRef: &corev1.SecretKeySelector{
+                                               LocalObjectReference: 
corev1.LocalObjectReference{Name: "foo_secret"}, Key: "password",
+                                       },
+                               },
+                       },
+                       {
+                               Name:  "QUARKUS_DATASOURCE_DB_KIND",
+                               Value: "postgresql",
+                       },
+                       {
+                               Name:  "QUARKUS_DATASOURCE_JDBC_URL",
+                               Value: 
"jdbc:postgresql://service_name.service_namespace:5432/foo?currentSchema=greeting",
+                       },
+                       {
+                               Name:  "KOGITO_PERSISTENCE_TYPE",
+                               Value: "jdbc",
+                       },
+               }
+               assert.Equal(t, expectedEnvVars, container.Env)
+       } else {
+               //no persistence
+               assert.Nil(t, container.Env)
+       }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to