From 7a621592498321749431e33327ca582c835fba0c Mon Sep 17 00:00:00 2001 From: Roy Golan Date: Thu, 6 Jun 2024 21:43:00 +0300 Subject: [PATCH] Set recommended kubernetes labels on services and workflows Motivation: There's a need to select efficiently workflows and their respective services. Having the common kubernetes labels allow a single selector: podSelector: matchExpressions: - { key: app.kubernetes.io/component, operator: In, values: ["data-index-service", "jobs-service", "serverless-workflow"] } Modification: Make the v1.Deployment for services and the deployment or knative services to contain at common labels Result: A workflow deployment or knative serving labels: app.kubernetes.io/name: ${workflow name} app.kubernetes.io/component: serverless-workflow app.kubernetes.io/part-of: ${platform url set by status} app.kubernetes.io/managed-by: sonataflow-operator Data index or Jobs services Deployment.v1 labels: app.kubernetes.io/name: ${service name} app.kubernetes.io/component: data-index-service|jobs-service app.kubernetes.io/part-of: ${platform name} app.kubernetes.io/managed-by: sonataflow-operator Reference: https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/#labels Signed-off-by: Roy Golan --- api/v1alpha08/zz_generated.deepcopy.go | 2 +- api/zz_generated.deepcopy.go | 2 ++ .../api/zz_generated.deepcopy.go | 2 +- controllers/platform/k8s.go | 8 ++++++-- .../profiles/common/object_creators_test.go | 2 ++ workflowproj/operator.go | 20 +++++++++++++++---- 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/api/v1alpha08/zz_generated.deepcopy.go b/api/v1alpha08/zz_generated.deepcopy.go index b11518893..00302cfce 100644 --- a/api/v1alpha08/zz_generated.deepcopy.go +++ b/api/v1alpha08/zz_generated.deepcopy.go @@ -22,7 +22,7 @@ package v1alpha08 import ( "github.com/serverlessworkflow/sdk-go/v2/model" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "knative.dev/pkg/apis" diff --git a/api/zz_generated.deepcopy.go b/api/zz_generated.deepcopy.go index 4fd61d6d9..b68499c7b 100644 --- a/api/zz_generated.deepcopy.go +++ b/api/zz_generated.deepcopy.go @@ -20,6 +20,8 @@ package api +import () + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Condition) DeepCopyInto(out *Condition) { *out = *in diff --git a/container-builder/api/zz_generated.deepcopy.go b/container-builder/api/zz_generated.deepcopy.go index e19547bf4..46f2ddaea 100644 --- a/container-builder/api/zz_generated.deepcopy.go +++ b/container-builder/api/zz_generated.deepcopy.go @@ -21,7 +21,7 @@ package api import ( - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) diff --git a/controllers/platform/k8s.go b/controllers/platform/k8s.go index 62d8b3699..e358796c5 100644 --- a/controllers/platform/k8s.go +++ b/controllers/platform/k8s.go @@ -233,8 +233,12 @@ func createOrUpdateService(ctx context.Context, client client.Client, platform * func getLabels(platform *operatorapi.SonataFlowPlatform, psh services.PlatformServiceHandler) (map[string]string, map[string]string) { lbl := map[string]string{ - workflowproj.LabelApp: platform.Name, - workflowproj.LabelService: psh.GetServiceName(), + workflowproj.LabelApp: platform.Name, + workflowproj.LabelService: psh.GetServiceName(), + workflowproj.LabelK8SName: psh.GetContainerName(), + workflowproj.LabelK8SComponent: psh.GetServiceName(), + workflowproj.LabelK8SPartOF: platform.Name, + workflowproj.LabelK8SManagedBy: "sonataflow-operator", } selectorLbl := map[string]string{ workflowproj.LabelService: psh.GetServiceName(), diff --git a/controllers/profiles/common/object_creators_test.go b/controllers/profiles/common/object_creators_test.go index 5057b2180..a9b8e5549 100644 --- a/controllers/profiles/common/object_creators_test.go +++ b/controllers/profiles/common/object_creators_test.go @@ -39,6 +39,8 @@ import ( "github.com/apache/incubator-kie-kogito-serverless-operator/workflowproj" ) +const platformName = "test-platform" + func Test_ensureWorkflowPropertiesConfigMapMutator(t *testing.T) { workflow := test.GetBaseSonataFlowWithDevProfile(t.Name()) platform := test.GetBasePlatform() diff --git a/workflowproj/operator.go b/workflowproj/operator.go index 2383f34fa..2ee28f70f 100644 --- a/workflowproj/operator.go +++ b/workflowproj/operator.go @@ -40,7 +40,11 @@ const ( // LabelService key to use among object selectors LabelService = metadata.Domain + "/service" // LabelWorkflow specialized label managed by the controller - LabelWorkflow = metadata.Domain + "/workflow-app" + LabelWorkflow = metadata.Domain + "/workflow-app" + LabelK8SName = "app.kubernetes.io/name" + LabelK8SComponent = "app.kubernetes.io/component" + LabelK8SPartOF = "app.kubernetes.io/part-of" + LabelK8SManagedBy = "app.kubernetes.io/managed-by" ) // SetTypeToObject sets the Kind and ApiVersion to a given object since the default constructor won't do it. @@ -84,10 +88,18 @@ func GetManagedPropertiesFileName(workflow *operatorapi.SonataFlow) string { // GetDefaultLabels gets the default labels based on the given workflow. func GetDefaultLabels(workflow *operatorapi.SonataFlow) map[string]string { - return map[string]string{ - LabelApp: workflow.Name, - LabelWorkflow: workflow.Name, + labels := map[string]string{ + LabelApp: workflow.Name, + LabelWorkflow: workflow.Name, + LabelK8SName: workflow.Name, + LabelK8SComponent: "serverless-workflow", + LabelK8SManagedBy: "sonataflow-operator", } + if workflow.Status.Platform != nil { + labels[LabelK8SPartOF] = workflow.Status.Platform.Name + } + return labels + } // SetMergedLabels adds the merged labels to the given object.