This is an automated email from the ASF dual-hosted git repository.
ederign 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 3b5108ca Fix #317 - Make namespace an optional parameter when
generating manifests in workflowproj (#320)
3b5108ca is described below
commit 3b5108ca8c352cb3d81fd736f3e116ed21e66a3f
Author: Ricardo Zanini <[email protected]>
AuthorDate: Wed Dec 13 11:46:10 2023 -0300
Fix #317 - Make namespace an optional parameter when generating manifests
in workflowproj (#320)
Signed-off-by: Ricardo Zanini <[email protected]>
---
workflowproj/workflowproj.go | 20 ++++++++----
workflowproj/workflowproj_test.go | 65 +++++++++++++++++++++++----------------
2 files changed, 53 insertions(+), 32 deletions(-)
diff --git a/workflowproj/workflowproj.go b/workflowproj/workflowproj.go
index 03952715..3b46f8c9 100644
--- a/workflowproj/workflowproj.go
+++ b/workflowproj/workflowproj.go
@@ -49,6 +49,8 @@ type WorkflowProjectHandler interface {
// Named overwrites the workflow ID. The handler will use this name
instead to generate the manifests name.
// Remember that together with the Namespace, the Name is the unique
key of a Kubernetes object.
Named(name string) WorkflowProjectHandler
+ // Profile overrides the default profile (dev) in the generated
SonataFlow manifest
+ Profile(profile metadata.ProfileType) WorkflowProjectHandler
// WithWorkflow reader for a file or the content stream of a workflow
definition.
WithWorkflow(reader io.Reader) WorkflowProjectHandler
// WithAppProperties reader for a file or the content stream of a
workflow application properties.
@@ -81,7 +83,6 @@ type resource struct {
// New is the entry point for this package.
// You can create a new handler with the given namespace, meaning that every
manifest generated will use this namespace.
-// namespace is a required parameter.
func New(namespace string) WorkflowProjectHandler {
s := scheme.Scheme
utilruntime.Must(operatorapi.AddToScheme(s))
@@ -96,6 +97,7 @@ func New(namespace string) WorkflowProjectHandler {
type workflowProjectHandler struct {
name string
namespace string
+ profile metadata.ProfileType
scheme *runtime.Scheme
project WorkflowProject
rawWorkflow io.Reader
@@ -110,6 +112,12 @@ func (w *workflowProjectHandler) Named(name string)
WorkflowProjectHandler {
return w
}
+func (w *workflowProjectHandler) Profile(profile metadata.ProfileType)
WorkflowProjectHandler {
+ w.profile = profile
+ w.parsed = false
+ return w
+}
+
func (w *workflowProjectHandler) WithWorkflow(reader io.Reader)
WorkflowProjectHandler {
w.rawWorkflow = reader
w.parsed = false
@@ -190,9 +198,6 @@ func (w *workflowProjectHandler) parseRawProject() error {
}
func (w *workflowProjectHandler) sanityCheck() error {
- if len(w.namespace) == 0 {
- return errors.New("Namespace is required when building Workflow
projects")
- }
if w.rawWorkflow == nil {
return errors.New("A workflow reader pointer is required when
building Workflow projects")
}
@@ -221,8 +226,11 @@ func (w *workflowProjectHandler) parseRawWorkflow() error {
w.project.Workflow, err = operatorapi.FromCNCFWorkflow(workflowDef,
context.TODO())
w.project.Workflow.Name = w.name
w.project.Workflow.Namespace = w.namespace
-
- SetWorkflowProfile(w.project.Workflow, metadata.DevProfile)
+ profile := metadata.DevProfile
+ if len(w.profile) > 0 {
+ profile = w.profile
+ }
+ SetWorkflowProfile(w.project.Workflow, profile)
SetDefaultLabels(w.project.Workflow, w.project.Workflow)
if err = SetTypeToObject(w.project.Workflow, w.scheme); err != nil {
return err
diff --git a/workflowproj/workflowproj_test.go
b/workflowproj/workflowproj_test.go
index dec1fc6f..bb0daa8a 100644
--- a/workflowproj/workflowproj_test.go
+++ b/workflowproj/workflowproj_test.go
@@ -27,6 +27,7 @@ import (
"strings"
"testing"
+
"github.com/apache/incubator-kie-kogito-serverless-operator/api/metadata"
"github.com/stretchr/testify/assert"
"k8s.io/client-go/kubernetes/scheme"
)
@@ -36,10 +37,13 @@ func Test_Handler_WorkflowMinimal(t *testing.T) {
assert.NoError(t, err)
assert.NotNil(t, proj)
assert.Equal(t, "hello", proj.Workflow.Name)
+ assert.Equal(t, string(metadata.DevProfile),
proj.Workflow.Annotations[metadata.Profile])
}
func Test_Handler_WorkflowMinimalInvalid(t *testing.T) {
- proj, err :=
New("default").WithWorkflow(getWorkflowMinimalInvalid()).AsObjects()
+ proj, err := New("default").
+ WithWorkflow(getWorkflowMinimalInvalid()).
+ AsObjects()
assert.Error(t, err)
assert.Nil(t, proj)
}
@@ -47,6 +51,7 @@ func Test_Handler_WorkflowMinimalInvalid(t *testing.T) {
func Test_Handler_WorkflowMinimalAndProps(t *testing.T) {
proj, err := New("default").
Named("minimal").
+ Profile(metadata.ProdProfile).
WithWorkflow(getWorkflowMinimal()).
WithAppProperties(getWorkflowProperties()).
AsObjects()
@@ -55,6 +60,7 @@ func Test_Handler_WorkflowMinimalAndProps(t *testing.T) {
assert.NotNil(t, proj.Properties)
assert.Equal(t, "minimal", proj.Workflow.Name)
assert.Equal(t, "minimal-props", proj.Properties.Name)
+ assert.Equal(t, string(metadata.ProdProfile),
proj.Workflow.Annotations[metadata.Profile])
assert.NotEmpty(t, proj.Properties.Data)
}
@@ -144,33 +150,40 @@ func
Test_Handler_WorklflowServiceAndPropsAndSpec_SaveAs(t *testing.T) {
}
func Test_Handler_WorkflowService_SaveAs(t *testing.T) {
- handler := New("default").
- WithWorkflow(getWorkflowService())
-
- proj, err := handler.AsObjects()
- assert.NoError(t, err)
- assert.NotNil(t, proj.Workflow)
-
- tmpPath, err := os.MkdirTemp("", "*-test")
- assert.NoError(t, err)
- defer os.RemoveAll(tmpPath)
-
- assert.NoError(t, handler.SaveAsKubernetesManifests(tmpPath))
- files, err := os.ReadDir(tmpPath)
- assert.NoError(t, err)
- assert.Len(t, files, 1)
-
- for _, f := range files {
- if strings.HasSuffix(f.Name(), yamlFileExt) {
- contents, err := os.ReadFile(path.Join(tmpPath,
f.Name()))
- assert.NoError(t, err)
- decode := scheme.Codecs.UniversalDeserializer().Decode
- k8sObj, _, err := decode(contents, nil, nil)
- assert.NoError(t, err)
- assert.NotNil(t, k8sObj)
- assert.NotEmpty(t,
k8sObj.GetObjectKind().GroupVersionKind().String())
+ testRun := func(t *testing.T, handler WorkflowProjectHandler) {
+ proj, err := handler.AsObjects()
+ assert.NoError(t, err)
+ assert.NotNil(t, proj.Workflow)
+
+ tmpPath, err := os.MkdirTemp("", "*-test")
+ assert.NoError(t, err)
+ defer os.RemoveAll(tmpPath)
+
+ assert.NoError(t, handler.SaveAsKubernetesManifests(tmpPath))
+ files, err := os.ReadDir(tmpPath)
+ assert.NoError(t, err)
+ assert.Len(t, files, 1)
+
+ for _, f := range files {
+ if strings.HasSuffix(f.Name(), yamlFileExt) {
+ contents, err := os.ReadFile(path.Join(tmpPath,
f.Name()))
+ assert.NoError(t, err)
+ decode :=
scheme.Codecs.UniversalDeserializer().Decode
+ k8sObj, _, err := decode(contents, nil, nil)
+ assert.NoError(t, err)
+ assert.NotNil(t, k8sObj)
+ assert.NotEmpty(t,
k8sObj.GetObjectKind().GroupVersionKind().String())
+ }
}
}
+
+ t.Run("SaveAs in default namespace", func(t *testing.T) {
+ testRun(t, New("default").WithWorkflow(getWorkflowService()))
+ })
+
+ t.Run("SaveAs with empty namespace namespace", func(t *testing.T) {
+ testRun(t, New("").WithWorkflow(getWorkflowService()))
+ })
}
func getWorkflowMinimalInvalid() io.Reader {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]