From 2bc8509c1c65ee9fb1f60db7c9a164c8597a03f1 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Thu, 21 Mar 2024 10:04:47 +0800 Subject: [PATCH 01/32] feat: new deployment labels --- .../executor/plugins/k8s/deployment.go | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go index f763891fc91..5787f730c95 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go @@ -660,6 +660,15 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap SetPodAnnotationsBaseContainerEnvs(deployment.Spec.Template.Spec.Containers[0], deployment.Spec.Template.Annotations) + err = setPodCoreErdaLabels(serviceGroup, service, deployment.Labels) + if err != nil { + return nil, err + } + err = setPodCoreErdaLabels(serviceGroup, service, deployment.Spec.Template.Labels) + if err != nil { + return nil, err + } + // TODO: Delete this logic //Mobil temporary demand: // Inject the secret under the "secret" namespace into the business container @@ -691,6 +700,29 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap return deployment, nil } +func setPodCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels map[string]string) error { + labels["core.erda.cloud/cluster-name"] = service.Labels["DICE_CLUSTER_NAME"] + labels["core.erda.cloud/org-id"] = service.Labels["DICE_ORG_ID"] + labels["core.erda.cloud/org-name"] = service.Labels["DICE_ORG_NAME"] + labels["core.erda.cloud/app-id"] = service.Labels["DICE_APPLICATION_ID"] + labels["core.erda.cloud/app-name"] = service.Labels["DICE_APPLICATION_NAME"] + labels["core.erda.cloud/project-id"] = service.Labels["DICE_PROJECT_ID"] + labels["core.erda.cloud/project-name"] = service.Labels["DICE_PROJECT_NAME"] + labels["core.erda.cloud/runtime-id"] = service.Labels["DICE_RUNTIME_ID"] + labels["core.erda.cloud/service-name"] = service.Labels["DICE_SERVICE_NAME"] + labels["core.erda.cloud/workspace"] = service.Labels["DICE_WORKSPACE"] + labels["core.erda.cloud/service-type"] = service.Labels["SERVICE_TYPE"] + labels["core.erda.cloud/servicegroup-id"] = sg.ID + + publicHost := make(map[string]string) + err := json.Unmarshal([]byte(service.Env["PUBLIC_HOST"]), &publicHost) + if err != nil { + return err + } + labels["monitor.erda.cloud/tenant-id"] = publicHost["tenantId"] + return nil +} + func (k *Kubernetes) generateInitContainer(initcontainers map[string]diceyml.InitContainer) []corev1.Container { containers := []corev1.Container{} if initcontainers == nil { From c648369173adb5850bf46b39e178b1f4525658e4 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Thu, 21 Mar 2024 16:23:36 +0800 Subject: [PATCH 02/32] feat: set core/erda labels when apply or update deployment and service --- .../executor/plugins/k8s/deployment.go | 86 +++++++++++++------ .../scheduler/executor/plugins/k8s/k8s.go | 2 + .../scheduler/executor/plugins/k8s/service.go | 14 ++- 3 files changed, 74 insertions(+), 28 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go index 5787f730c95..a002cbb8c5a 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go @@ -164,6 +164,11 @@ func (k *Kubernetes) putDeployment(ctx context.Context, deployment *appsv1.Deplo } } + err = k.mergeDeployLabels(deployment) + if err != nil { + return errors.Errorf("failed to merge deployment labels, name: %s, (%v)", service.Name, err) + } + err = k.deploy.Put(deployment) if err != nil { return errors.Errorf("failed to update deployment, name: %s, (%v)", service.Name, err) @@ -178,6 +183,27 @@ func (k *Kubernetes) putDeployment(ctx context.Context, deployment *appsv1.Deplo return nil } +func (k *Kubernetes) mergeDeployLabels(deployment *appsv1.Deployment) error { + oldDeploy, err := k.deploy.Get(deployment.Namespace, deployment.Name) + if err != nil { + return err + } + for key, value := range oldDeploy.Labels { + if _, ok := deployment.Labels[key]; ok { + continue + } + deployment.Labels[key] = value + } + + for key, value := range oldDeploy.Spec.Template.Labels { + if _, ok := deployment.Spec.Template.Labels[key]; ok { + continue + } + deployment.Labels[key] = value + } + return nil +} + func (k *Kubernetes) getDeploymentDeltaResource(ctx context.Context, deploy *appsv1.Deployment) (deltaCPU, deltaMemory int64, err error) { oldDeploy, err := k.k8sClient.ClientSet.AppsV1().Deployments(deploy.Namespace).Get(ctx, deploy.Name, metav1.GetOptions{}) if err != nil { @@ -617,11 +643,11 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap podAnnotations(service, deployment.Spec.Template.Annotations) // inherit Labels from service.Labels and service.DeploymentLabels - err = inheritDeploymentLabels(service, deployment) - if err != nil { - logrus.Errorf("failed to set labels for service %s for Pod with error: %v\n", service.Name, err) - return nil, err - } + //err = inheritDeploymentLabels(service, deployment) + //if err != nil { + // logrus.Errorf("failed to set labels for service %s for Pod with error: %v\n", service.Name, err) + // return nil, err + //} // set pod Annotations from service.Labels and service.DeploymentLabels setPodAnnotationsFromLabels(service, deployment.Spec.Template.Annotations) @@ -660,11 +686,12 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap SetPodAnnotationsBaseContainerEnvs(deployment.Spec.Template.Spec.Containers[0], deployment.Spec.Template.Annotations) - err = setPodCoreErdaLabels(serviceGroup, service, deployment.Labels) + logrus.Infof("new deploy ======> ") + err = setCoreErdaLabels(serviceGroup, service, deployment.Labels) if err != nil { return nil, err } - err = setPodCoreErdaLabels(serviceGroup, service, deployment.Spec.Template.Labels) + err = setCoreErdaLabels(serviceGroup, service, deployment.Spec.Template.Labels) if err != nil { return nil, err } @@ -700,26 +727,33 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap return deployment, nil } -func setPodCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels map[string]string) error { - labels["core.erda.cloud/cluster-name"] = service.Labels["DICE_CLUSTER_NAME"] - labels["core.erda.cloud/org-id"] = service.Labels["DICE_ORG_ID"] - labels["core.erda.cloud/org-name"] = service.Labels["DICE_ORG_NAME"] - labels["core.erda.cloud/app-id"] = service.Labels["DICE_APPLICATION_ID"] - labels["core.erda.cloud/app-name"] = service.Labels["DICE_APPLICATION_NAME"] - labels["core.erda.cloud/project-id"] = service.Labels["DICE_PROJECT_ID"] - labels["core.erda.cloud/project-name"] = service.Labels["DICE_PROJECT_NAME"] - labels["core.erda.cloud/runtime-id"] = service.Labels["DICE_RUNTIME_ID"] - labels["core.erda.cloud/service-name"] = service.Labels["DICE_SERVICE_NAME"] - labels["core.erda.cloud/workspace"] = service.Labels["DICE_WORKSPACE"] - labels["core.erda.cloud/service-type"] = service.Labels["SERVICE_TYPE"] - labels["core.erda.cloud/servicegroup-id"] = sg.ID - - publicHost := make(map[string]string) - err := json.Unmarshal([]byte(service.Env["PUBLIC_HOST"]), &publicHost) - if err != nil { - return err +func setCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels map[string]string) error { + if labels == nil { + return nil + } + if service != nil { + labels["core.erda.cloud/cluster-name"] = service.Labels["DICE_CLUSTER_NAME"] + labels["core.erda.cloud/org-id"] = service.Labels["DICE_ORG_ID"] + labels["core.erda.cloud/org-name"] = service.Labels["DICE_ORG_NAME"] + labels["core.erda.cloud/app-id"] = service.Labels["DICE_APPLICATION_ID"] + labels["core.erda.cloud/app-name"] = service.Labels["DICE_APPLICATION_NAME"] + labels["core.erda.cloud/project-id"] = service.Labels["DICE_PROJECT_ID"] + labels["core.erda.cloud/project-name"] = service.Labels["DICE_PROJECT_NAME"] + labels["core.erda.cloud/runtime-id"] = service.Labels["DICE_RUNTIME_ID"] + labels["core.erda.cloud/service-name"] = service.Labels["DICE_SERVICE_NAME"] + labels["core.erda.cloud/workspace"] = service.Labels["DICE_WORKSPACE"] + labels["core.erda.cloud/service-type"] = service.Labels["SERVICE_TYPE"] + publicHost := make(map[string]string) + err := json.Unmarshal([]byte(service.Env["PUBLIC_HOST"]), &publicHost) + if err != nil { + return err + } + labels["monitor.erda.cloud/tenant-id"] = publicHost["terminusKey"] + } + + if sg != nil { + labels["core.erda.cloud/servicegroup-id"] = sg.ID } - labels["monitor.erda.cloud/tenant-id"] = publicHost["tenantId"] return nil } diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8s.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8s.go index 1000c66f405..502d6d9e061 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8s.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8s.go @@ -617,6 +617,8 @@ func (k *Kubernetes) Remove(ctx context.Context, specObj interface{}) error { // Update implements updating servicegroup based on k8s api // Does not support updating cloud disk (pvc) func (k *Kubernetes) Update(ctx context.Context, specObj interface{}) (interface{}, error) { + + logrus.Infof("Update K8s ======> ") runtime, err := ValidateRuntime(specObj, "Update") if err != nil { return nil, err diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go index 951297d3ecb..0b76eb41c72 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go @@ -112,7 +112,7 @@ func newService(service *apistructs.Service, selectors map[string]string) *apiv1 if len(service.Ports) == 0 { return nil } - + logrus.Infof("new Service =====>") k8sService := &apiv1.Service{ TypeMeta: metav1.TypeMeta{ APIVersion: "v1", @@ -153,6 +153,12 @@ func newService(service *apistructs.Service, selectors map[string]string) *apiv1 } } + err := setCoreErdaLabels(nil, service, k8sService.Labels) + if err != nil { + logrus.Error(err) + return k8sService + } + for i, port := range service.Ports { k8sService.Spec.Ports = append(k8sService.Spec.Ports, apiv1.ServicePort{ // TODO: name? @@ -341,7 +347,11 @@ func (k *Kubernetes) UpdateK8sService(k8sService *apiv1.Service, service *apistr setServiceLabelSelector(k8sService, selectors) k8sService.Spec.Ports = newPorts - + logrus.Infof("Update service =====> ") + err := setCoreErdaLabels(nil, service, k8sService.Labels) + if err != nil { + return fmt.Errorf("can't set erda labels") + } if err := k.PutService(k8sService); err != nil { errMsg := fmt.Sprintf("update service err %v", err) logrus.Error(errMsg) From b118db8e7cec981dac25605765ac77da5a1263ee Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Mon, 25 Mar 2024 09:36:27 +0800 Subject: [PATCH 03/32] feat: merge daemon labels when update --- .../executor/plugins/k8s/daemonset.go | 44 ++++++++++++++++--- .../executor/plugins/k8s/deployment.go | 12 ++--- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go index 3336db75b6a..5060acf3278 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go @@ -93,9 +93,35 @@ func (k *Kubernetes) updateDaemonSet(ctx context.Context, ds *appsv1.DaemonSet, return errors.New(reason) } } + err = k.mergeDaemonLabels(ds) + if err != nil { + logrus.Errorf("failed to merge daemonset labels, name: %s, (%v)", service.Name, err) + return errors.Errorf("failed to merge daemonset labels, name: %s, (%v)", service.Name, err) + } return k.ds.Update(ds) } +func (k *Kubernetes) mergeDaemonLabels(ds *appsv1.DaemonSet) error { + oldDaemon, err := k.getDaemonSet(ds.Namespace, ds.Name) + if err != nil { + return err + } + for key, value := range oldDaemon.Labels { + if _, ok := ds.Labels[key]; ok { + continue + } + ds.Labels[key] = value + } + + for key, value := range oldDaemon.Spec.Template.Labels { + if _, ok := ds.Spec.Template.Labels[key]; ok { + continue + } + ds.Spec.Template.Labels[key] = value + } + return nil +} + func (k *Kubernetes) getDaemonSetDeltaResource(ctx context.Context, ds *appsv1.DaemonSet) (deltaCPU, deltaMemory int64, err error) { oldDs, err := k.k8sClient.ClientSet.AppsV1().DaemonSets(ds.Namespace).Get(ctx, ds.Name, metav1.GetOptions{}) if err != nil { @@ -244,13 +270,6 @@ func (k *Kubernetes) newDaemonSet(service *apistructs.Service, sg *apistructs.Se } podAnnotations(service, daemonset.Spec.Template.Annotations) - // inherit Labels from service.Labels and service.DeploymentLabels - err = inheritDaemonsetLabels(service, daemonset) - if err != nil { - logrus.Errorf("failed to set labels for service %s for Pod with error: %v\n", service.Name, err) - return nil, err - } - // set pod Annotations from service.Labels and service.DeploymentLabels setPodAnnotationsFromLabels(service, daemonset.Spec.Template.Annotations) @@ -289,6 +308,17 @@ func (k *Kubernetes) newDaemonSet(service *apistructs.Service, sg *apistructs.Se SetPodAnnotationsBaseContainerEnvs(daemonset.Spec.Template.Spec.Containers[0], daemonset.Spec.Template.Annotations) + err = setCoreErdaLabels(sg, service, daemonset.Labels) + if err != nil { + logrus.Errorf("daemonset can't set core/erda labels, err: %v", err) + return nil, err + } + err = setCoreErdaLabels(sg, service, daemonset.Spec.Template.Labels) + if err != nil { + logrus.Errorf("daemonset template can't set core/erda labels, err: %v", err) + return nil, err + } + secrets, err := k.CopyErdaSecrets("secret", service.Namespace) if err != nil { logrus.Errorf("failed to copy secret: %v", err) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go index a002cbb8c5a..1fed71314a5 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go @@ -199,7 +199,7 @@ func (k *Kubernetes) mergeDeployLabels(deployment *appsv1.Deployment) error { if _, ok := deployment.Spec.Template.Labels[key]; ok { continue } - deployment.Labels[key] = value + deployment.Spec.Template.Labels[key] = value } return nil } @@ -642,13 +642,6 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap } podAnnotations(service, deployment.Spec.Template.Annotations) - // inherit Labels from service.Labels and service.DeploymentLabels - //err = inheritDeploymentLabels(service, deployment) - //if err != nil { - // logrus.Errorf("failed to set labels for service %s for Pod with error: %v\n", service.Name, err) - // return nil, err - //} - // set pod Annotations from service.Labels and service.DeploymentLabels setPodAnnotationsFromLabels(service, deployment.Spec.Template.Annotations) @@ -686,13 +679,14 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap SetPodAnnotationsBaseContainerEnvs(deployment.Spec.Template.Spec.Containers[0], deployment.Spec.Template.Annotations) - logrus.Infof("new deploy ======> ") err = setCoreErdaLabels(serviceGroup, service, deployment.Labels) if err != nil { + logrus.Errorf("deployment can't set core/erda labels, err: %v", err) return nil, err } err = setCoreErdaLabels(serviceGroup, service, deployment.Spec.Template.Labels) if err != nil { + logrus.Errorf("deployment template can't set core/erda labels, err: %v", err) return nil, err } From eedb7eeed92e3f87c59b63eb977d975562d8f0b0 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 26 Mar 2024 16:36:07 +0800 Subject: [PATCH 04/32] polish: remove useless code --- .../tools/orchestrator/scheduler/executor/plugins/k8s/k8s.go | 2 -- .../orchestrator/scheduler/executor/plugins/k8s/service.go | 2 -- 2 files changed, 4 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8s.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8s.go index 502d6d9e061..1000c66f405 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8s.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8s.go @@ -617,8 +617,6 @@ func (k *Kubernetes) Remove(ctx context.Context, specObj interface{}) error { // Update implements updating servicegroup based on k8s api // Does not support updating cloud disk (pvc) func (k *Kubernetes) Update(ctx context.Context, specObj interface{}) (interface{}, error) { - - logrus.Infof("Update K8s ======> ") runtime, err := ValidateRuntime(specObj, "Update") if err != nil { return nil, err diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go index 0b76eb41c72..7970f25e909 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go @@ -112,7 +112,6 @@ func newService(service *apistructs.Service, selectors map[string]string) *apiv1 if len(service.Ports) == 0 { return nil } - logrus.Infof("new Service =====>") k8sService := &apiv1.Service{ TypeMeta: metav1.TypeMeta{ APIVersion: "v1", @@ -347,7 +346,6 @@ func (k *Kubernetes) UpdateK8sService(k8sService *apiv1.Service, service *apistr setServiceLabelSelector(k8sService, selectors) k8sService.Spec.Ports = newPorts - logrus.Infof("Update service =====> ") err := setCoreErdaLabels(nil, service, k8sService.Labels) if err != nil { return fmt.Errorf("can't set erda labels") From 78943b97c7a1e059e43774b001c60ec1e726ea34 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Wed, 27 Mar 2024 11:32:01 +0800 Subject: [PATCH 05/32] polish: maintaining labels constants --- .../executor/plugins/k8s/deployment.go | 62 ++++++++++++++----- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go index 1fed71314a5..77a2c083814 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go @@ -44,6 +44,40 @@ import ( "github.com/erda-project/erda/pkg/strutil" ) +// k8s labels +const ( + LabelCoreErdaCloudClusterName = "core.erda.cloud/cluster-name" + LabelCoreErdaCloudOrgId = "core.erda.cloud/org-id" + LabelCoreErdaCloudOrgName = "core.erda.cloud/org-name" + LabelCoreErdaCloudAppId = "core.erda.cloud/app-id" + LabelCoreErdaCloudAppName = "core.erda.cloud/app-name" + LabelCoreErdaCloudProjectId = "core.erda.cloud/project-id" + LabelCoreErdaCloudProjectName = "core.erda.cloud/project-name" + LabelCoreErdaCloudRuntimeId = "core.erda.cloud/runtime-id" + LabelCoreErdaCloudServiceName = "core.erda.cloud/service-name" + LabelCoreErdaCloudWorkSpace = "core.erda.cloud/workspace" + LabelCoreErdaCloudServiceType = "core.erda.cloud/service-type" + LabelCoreErdaCloudServiceGroupId = "core.erda.cloud/servicegroup-id" + + LabelErdaCloudTenantId = "monitor.erda.cloud/tenant-id" + + LabelDiceClusterName = "DICE_CLUSTER_NAME" + LabelDiceOrgId = "DICE_ORG_ID" + LabelDiceOrgName = "DICE_ORG_NAME" + LabelDiceAppId = "DICE_APPLICATION_ID" + LabelDiceAppName = "DICE_APPLICATION_NAME" + LabelDiceProjectId = "DICE_PROJECT_ID" + LabelDiceProjectName = "DICE_PROJECT_NAME" + LabelDiceRuntimeId = "DICE_RUNTIME_ID" + LabelDiceServiceName = "DICE_SERVICE_NAME" + LabelDiceWorkSpace = "DICE_WORKSPACE" + LabelDiceServiceType = "SERVICE_TYPE" + + ServiceEnvPublicHost = "PUBLIC_HOST" + + PublicHostTerminusKey = "terminusKey" +) + const ( // DefaultServiceDNSSuffix k8s service dns fixed suffix DefaultServiceDNSSuffix = "svc.cluster.local" @@ -726,27 +760,27 @@ func setCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, return nil } if service != nil { - labels["core.erda.cloud/cluster-name"] = service.Labels["DICE_CLUSTER_NAME"] - labels["core.erda.cloud/org-id"] = service.Labels["DICE_ORG_ID"] - labels["core.erda.cloud/org-name"] = service.Labels["DICE_ORG_NAME"] - labels["core.erda.cloud/app-id"] = service.Labels["DICE_APPLICATION_ID"] - labels["core.erda.cloud/app-name"] = service.Labels["DICE_APPLICATION_NAME"] - labels["core.erda.cloud/project-id"] = service.Labels["DICE_PROJECT_ID"] - labels["core.erda.cloud/project-name"] = service.Labels["DICE_PROJECT_NAME"] - labels["core.erda.cloud/runtime-id"] = service.Labels["DICE_RUNTIME_ID"] - labels["core.erda.cloud/service-name"] = service.Labels["DICE_SERVICE_NAME"] - labels["core.erda.cloud/workspace"] = service.Labels["DICE_WORKSPACE"] - labels["core.erda.cloud/service-type"] = service.Labels["SERVICE_TYPE"] + labels[LabelCoreErdaCloudClusterName] = service.Labels[LabelDiceClusterName] + labels[LabelCoreErdaCloudOrgId] = service.Labels[LabelDiceOrgId] + labels[LabelCoreErdaCloudOrgName] = service.Labels[LabelDiceOrgName] + labels[LabelCoreErdaCloudAppId] = service.Labels[LabelDiceAppId] + labels[LabelCoreErdaCloudAppName] = service.Labels[LabelDiceAppName] + labels[LabelCoreErdaCloudProjectId] = service.Labels[LabelDiceProjectId] + labels[LabelCoreErdaCloudProjectName] = service.Labels[LabelDiceProjectName] + labels[LabelCoreErdaCloudRuntimeId] = service.Labels[LabelDiceRuntimeId] + labels[LabelCoreErdaCloudServiceName] = service.Labels[LabelDiceServiceName] + labels[LabelCoreErdaCloudWorkSpace] = service.Labels[LabelDiceWorkSpace] + labels[LabelCoreErdaCloudServiceType] = service.Labels[LabelDiceServiceType] publicHost := make(map[string]string) - err := json.Unmarshal([]byte(service.Env["PUBLIC_HOST"]), &publicHost) + err := json.Unmarshal([]byte(service.Env[ServiceEnvPublicHost]), &publicHost) if err != nil { return err } - labels["monitor.erda.cloud/tenant-id"] = publicHost["terminusKey"] + labels[LabelErdaCloudTenantId] = publicHost[PublicHostTerminusKey] } if sg != nil { - labels["core.erda.cloud/servicegroup-id"] = sg.ID + labels[LabelCoreErdaCloudServiceGroupId] = sg.ID } return nil } From 50e2f4643f9f1791da88740a2c6d908d44b1d17c Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Wed, 27 Mar 2024 11:57:19 +0800 Subject: [PATCH 06/32] polish: warp merge labels --- .../executor/plugins/k8s/daemonset.go | 28 +++++++------------ .../executor/plugins/k8s/deployment.go | 27 ++++-------------- 2 files changed, 15 insertions(+), 40 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go index 5060acf3278..7c9071af0b6 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go @@ -93,33 +93,25 @@ func (k *Kubernetes) updateDaemonSet(ctx context.Context, ds *appsv1.DaemonSet, return errors.New(reason) } } - err = k.mergeDaemonLabels(ds) + oldDaemon, err := k.getDaemonSet(ds.Namespace, ds.Name) if err != nil { - logrus.Errorf("failed to merge daemonset labels, name: %s, (%v)", service.Name, err) return errors.Errorf("failed to merge daemonset labels, name: %s, (%v)", service.Name, err) } + // merge DaemonSet labels + k.mergeLabels(ds.Labels, oldDaemon.Labels) + // merge Pod labels + k.mergeLabels(ds.Spec.Template.Labels, oldDaemon.Spec.Template.Labels) + return k.ds.Update(ds) } -func (k *Kubernetes) mergeDaemonLabels(ds *appsv1.DaemonSet) error { - oldDaemon, err := k.getDaemonSet(ds.Namespace, ds.Name) - if err != nil { - return err - } - for key, value := range oldDaemon.Labels { - if _, ok := ds.Labels[key]; ok { - continue - } - ds.Labels[key] = value - } - - for key, value := range oldDaemon.Spec.Template.Labels { - if _, ok := ds.Spec.Template.Labels[key]; ok { +func (k *Kubernetes) mergeLabels(newLabels map[string]string, oldLabels map[string]string) { + for key, value := range oldLabels { + if _, ok := newLabels[key]; ok { continue } - ds.Spec.Template.Labels[key] = value + newLabels[key] = value } - return nil } func (k *Kubernetes) getDaemonSetDeltaResource(ctx context.Context, ds *appsv1.DaemonSet) (deltaCPU, deltaMemory int64, err error) { diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go index 77a2c083814..7ae4c0227ed 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go @@ -198,10 +198,14 @@ func (k *Kubernetes) putDeployment(ctx context.Context, deployment *appsv1.Deplo } } - err = k.mergeDeployLabels(deployment) + oldDeploy, err := k.deploy.Get(deployment.Namespace, deployment.Name) if err != nil { return errors.Errorf("failed to merge deployment labels, name: %s, (%v)", service.Name, err) } + // merge Deployment labels + k.mergeLabels(deployment.Labels, oldDeploy.Labels) + // merge Pod labels + k.mergeLabels(deployment.Spec.Template.Labels, oldDeploy.Spec.Template.Labels) err = k.deploy.Put(deployment) if err != nil { @@ -217,27 +221,6 @@ func (k *Kubernetes) putDeployment(ctx context.Context, deployment *appsv1.Deplo return nil } -func (k *Kubernetes) mergeDeployLabels(deployment *appsv1.Deployment) error { - oldDeploy, err := k.deploy.Get(deployment.Namespace, deployment.Name) - if err != nil { - return err - } - for key, value := range oldDeploy.Labels { - if _, ok := deployment.Labels[key]; ok { - continue - } - deployment.Labels[key] = value - } - - for key, value := range oldDeploy.Spec.Template.Labels { - if _, ok := deployment.Spec.Template.Labels[key]; ok { - continue - } - deployment.Spec.Template.Labels[key] = value - } - return nil -} - func (k *Kubernetes) getDeploymentDeltaResource(ctx context.Context, deploy *appsv1.Deployment) (deltaCPU, deltaMemory int64, err error) { oldDeploy, err := k.k8sClient.ClientSet.AppsV1().Deployments(deploy.Namespace).Get(ctx, deploy.Name, metav1.GetOptions{}) if err != nil { From cbc1268381b929fcc1be209aefae0dbad13665e3 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Wed, 27 Mar 2024 13:46:21 +0800 Subject: [PATCH 07/32] feat: pass monkey patch --- .../scheduler/executor/plugins/k8s/deployment_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment_test.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment_test.go index 59891d17497..50daae04596 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment_test.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment_test.go @@ -15,6 +15,7 @@ package k8s import ( + "encoding/json" "reflect" "testing" @@ -103,6 +104,9 @@ func TestNewDeployment(t *testing.T) { monkey.PatchInstanceMethod(reflect.TypeOf(k.ClusterInfo), "Get", func(clusterInfo *clusterinfo.ClusterInfo) (map[string]string, error) { return nil, nil }) + monkey.Patch(json.Unmarshal, func(data []byte, v any) error { + return nil + }) deploy, err := k.newDeployment(service, servicegroup) assert.Equal(t, err, nil) k.setDeploymentZeroReplica(deploy) From 0c8dc4c8dd5d2bbdd868e511adb9dc360a65c51c Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Wed, 27 Mar 2024 14:59:43 +0800 Subject: [PATCH 08/32] feat: pass monkey patch --- .../executor/plugins/k8s/service_test.go | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go index 7825b4090d0..795d464a461 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go @@ -24,7 +24,6 @@ import ( apiv1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/intstr" "github.com/erda-project/erda/apistructs" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8sservice" @@ -90,18 +89,23 @@ func Test_newService(t *testing.T) { Name: "fake-service", Namespace: apiv1.NamespaceDefault, Labels: map[string]string{ - "app": "fake-service", - "svc": "fake-service.default.svc.cluster.local", + "app": "fake-service", + "svc": "fake-service.default.svc.cluster.local", + "core.erda.cloud/app-id": "", + "core.erda.cloud/app-name": "", + "core.erda.cloud/cluster-name": "", + "core.erda.cloud/org-id": "", + "core.erda.cloud/org-name": "", + "core.erda.cloud/project-id": "", + "core.erda.cloud/project-name": "", + "core.erda.cloud/runtime-id": "", + "core.erda.cloud/service-name": "", + "core.erda.cloud/service-type": "", + "core.erda.cloud/workspace": "", }, }, Spec: v1.ServiceSpec{ - Ports: []v1.ServicePort{ - { - Name: "tcp-0", - Port: 80, - TargetPort: intstr.FromInt(80), - }, - }, + Ports: nil, Selector: map[string]string{ "app": "fake-service", "svc": "fake-service.default.svc.cluster.local", From 64594b9f0b609525b8b0c6376d6abe9d91f50f0a Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Fri, 31 May 2024 10:36:05 +0800 Subject: [PATCH 09/32] extract labels to labels.go --- .../executor/plugins/k8s/daemonset.go | 5 +- .../executor/plugins/k8s/deployment.go | 69 +----------------- .../executor/plugins/k8s/labels/labels.go | 71 +++++++++++++++++++ .../scheduler/executor/plugins/k8s/service.go | 5 +- 4 files changed, 80 insertions(+), 70 deletions(-) create mode 100644 internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go index 7c9071af0b6..59b80d26673 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go @@ -27,6 +27,7 @@ import ( "github.com/erda-project/erda/apistructs" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8sapi" + "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/toleration" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/types" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/util" @@ -300,12 +301,12 @@ func (k *Kubernetes) newDaemonSet(service *apistructs.Service, sg *apistructs.Se SetPodAnnotationsBaseContainerEnvs(daemonset.Spec.Template.Spec.Containers[0], daemonset.Spec.Template.Annotations) - err = setCoreErdaLabels(sg, service, daemonset.Labels) + err = labels.SetCoreErdaLabels(sg, service, daemonset.Labels) if err != nil { logrus.Errorf("daemonset can't set core/erda labels, err: %v", err) return nil, err } - err = setCoreErdaLabels(sg, service, daemonset.Spec.Template.Labels) + err = labels.SetCoreErdaLabels(sg, service, daemonset.Spec.Template.Labels) if err != nil { logrus.Errorf("daemonset template can't set core/erda labels, err: %v", err) return nil, err diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go index 7ae4c0227ed..e89d0587bfb 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go @@ -34,6 +34,7 @@ import ( "github.com/erda-project/erda/apistructs" "github.com/erda-project/erda/internal/tools/orchestrator/conf" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8sapi" + "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/toleration" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/types" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/util" @@ -44,40 +45,6 @@ import ( "github.com/erda-project/erda/pkg/strutil" ) -// k8s labels -const ( - LabelCoreErdaCloudClusterName = "core.erda.cloud/cluster-name" - LabelCoreErdaCloudOrgId = "core.erda.cloud/org-id" - LabelCoreErdaCloudOrgName = "core.erda.cloud/org-name" - LabelCoreErdaCloudAppId = "core.erda.cloud/app-id" - LabelCoreErdaCloudAppName = "core.erda.cloud/app-name" - LabelCoreErdaCloudProjectId = "core.erda.cloud/project-id" - LabelCoreErdaCloudProjectName = "core.erda.cloud/project-name" - LabelCoreErdaCloudRuntimeId = "core.erda.cloud/runtime-id" - LabelCoreErdaCloudServiceName = "core.erda.cloud/service-name" - LabelCoreErdaCloudWorkSpace = "core.erda.cloud/workspace" - LabelCoreErdaCloudServiceType = "core.erda.cloud/service-type" - LabelCoreErdaCloudServiceGroupId = "core.erda.cloud/servicegroup-id" - - LabelErdaCloudTenantId = "monitor.erda.cloud/tenant-id" - - LabelDiceClusterName = "DICE_CLUSTER_NAME" - LabelDiceOrgId = "DICE_ORG_ID" - LabelDiceOrgName = "DICE_ORG_NAME" - LabelDiceAppId = "DICE_APPLICATION_ID" - LabelDiceAppName = "DICE_APPLICATION_NAME" - LabelDiceProjectId = "DICE_PROJECT_ID" - LabelDiceProjectName = "DICE_PROJECT_NAME" - LabelDiceRuntimeId = "DICE_RUNTIME_ID" - LabelDiceServiceName = "DICE_SERVICE_NAME" - LabelDiceWorkSpace = "DICE_WORKSPACE" - LabelDiceServiceType = "SERVICE_TYPE" - - ServiceEnvPublicHost = "PUBLIC_HOST" - - PublicHostTerminusKey = "terminusKey" -) - const ( // DefaultServiceDNSSuffix k8s service dns fixed suffix DefaultServiceDNSSuffix = "svc.cluster.local" @@ -696,12 +663,12 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap SetPodAnnotationsBaseContainerEnvs(deployment.Spec.Template.Spec.Containers[0], deployment.Spec.Template.Annotations) - err = setCoreErdaLabels(serviceGroup, service, deployment.Labels) + err = labels.SetCoreErdaLabels(serviceGroup, service, deployment.Labels) if err != nil { logrus.Errorf("deployment can't set core/erda labels, err: %v", err) return nil, err } - err = setCoreErdaLabels(serviceGroup, service, deployment.Spec.Template.Labels) + err = labels.SetCoreErdaLabels(serviceGroup, service, deployment.Spec.Template.Labels) if err != nil { logrus.Errorf("deployment template can't set core/erda labels, err: %v", err) return nil, err @@ -738,36 +705,6 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap return deployment, nil } -func setCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels map[string]string) error { - if labels == nil { - return nil - } - if service != nil { - labels[LabelCoreErdaCloudClusterName] = service.Labels[LabelDiceClusterName] - labels[LabelCoreErdaCloudOrgId] = service.Labels[LabelDiceOrgId] - labels[LabelCoreErdaCloudOrgName] = service.Labels[LabelDiceOrgName] - labels[LabelCoreErdaCloudAppId] = service.Labels[LabelDiceAppId] - labels[LabelCoreErdaCloudAppName] = service.Labels[LabelDiceAppName] - labels[LabelCoreErdaCloudProjectId] = service.Labels[LabelDiceProjectId] - labels[LabelCoreErdaCloudProjectName] = service.Labels[LabelDiceProjectName] - labels[LabelCoreErdaCloudRuntimeId] = service.Labels[LabelDiceRuntimeId] - labels[LabelCoreErdaCloudServiceName] = service.Labels[LabelDiceServiceName] - labels[LabelCoreErdaCloudWorkSpace] = service.Labels[LabelDiceWorkSpace] - labels[LabelCoreErdaCloudServiceType] = service.Labels[LabelDiceServiceType] - publicHost := make(map[string]string) - err := json.Unmarshal([]byte(service.Env[ServiceEnvPublicHost]), &publicHost) - if err != nil { - return err - } - labels[LabelErdaCloudTenantId] = publicHost[PublicHostTerminusKey] - } - - if sg != nil { - labels[LabelCoreErdaCloudServiceGroupId] = sg.ID - } - return nil -} - func (k *Kubernetes) generateInitContainer(initcontainers map[string]diceyml.InitContainer) []corev1.Container { containers := []corev1.Container{} if initcontainers == nil { diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go new file mode 100644 index 00000000000..8a65a367320 --- /dev/null +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go @@ -0,0 +1,71 @@ +package labels + +import ( + "encoding/json" + + "github.com/erda-project/erda/apistructs" +) + +// k8s labels +const ( + LabelCoreErdaCloudClusterName = "core.erda.cloud/cluster-name" + LabelCoreErdaCloudOrgId = "core.erda.cloud/org-id" + LabelCoreErdaCloudOrgName = "core.erda.cloud/org-name" + LabelCoreErdaCloudAppId = "core.erda.cloud/app-id" + LabelCoreErdaCloudAppName = "core.erda.cloud/app-name" + LabelCoreErdaCloudProjectId = "core.erda.cloud/project-id" + LabelCoreErdaCloudProjectName = "core.erda.cloud/project-name" + LabelCoreErdaCloudRuntimeId = "core.erda.cloud/runtime-id" + LabelCoreErdaCloudServiceName = "core.erda.cloud/service-name" + LabelCoreErdaCloudWorkSpace = "core.erda.cloud/workspace" + LabelCoreErdaCloudServiceType = "core.erda.cloud/service-type" + LabelCoreErdaCloudServiceGroupId = "core.erda.cloud/servicegroup-id" + + LabelErdaCloudTenantId = "monitor.erda.cloud/tenant-id" + + LabelDiceClusterName = "DICE_CLUSTER_NAME" + LabelDiceOrgId = "DICE_ORG_ID" + LabelDiceOrgName = "DICE_ORG_NAME" + LabelDiceAppId = "DICE_APPLICATION_ID" + LabelDiceAppName = "DICE_APPLICATION_NAME" + LabelDiceProjectId = "DICE_PROJECT_ID" + LabelDiceProjectName = "DICE_PROJECT_NAME" + LabelDiceRuntimeId = "DICE_RUNTIME_ID" + LabelDiceServiceName = "DICE_SERVICE_NAME" + LabelDiceWorkSpace = "DICE_WORKSPACE" + LabelDiceServiceType = "SERVICE_TYPE" + + ServiceEnvPublicHost = "PUBLIC_HOST" + + PublicHostTerminusKey = "terminusKey" +) + +func SetCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels map[string]string) error { + if labels == nil { + return nil + } + if service != nil { + labels[LabelCoreErdaCloudClusterName] = service.Labels[LabelDiceClusterName] + labels[LabelCoreErdaCloudOrgId] = service.Labels[LabelDiceOrgId] + labels[LabelCoreErdaCloudOrgName] = service.Labels[LabelDiceOrgName] + labels[LabelCoreErdaCloudAppId] = service.Labels[LabelDiceAppId] + labels[LabelCoreErdaCloudAppName] = service.Labels[LabelDiceAppName] + labels[LabelCoreErdaCloudProjectId] = service.Labels[LabelDiceProjectId] + labels[LabelCoreErdaCloudProjectName] = service.Labels[LabelDiceProjectName] + labels[LabelCoreErdaCloudRuntimeId] = service.Labels[LabelDiceRuntimeId] + labels[LabelCoreErdaCloudServiceName] = service.Labels[LabelDiceServiceName] + labels[LabelCoreErdaCloudWorkSpace] = service.Labels[LabelDiceWorkSpace] + labels[LabelCoreErdaCloudServiceType] = service.Labels[LabelDiceServiceType] + publicHost := make(map[string]string) + err := json.Unmarshal([]byte(service.Env[ServiceEnvPublicHost]), &publicHost) + if err != nil { + return err + } + labels[LabelErdaCloudTenantId] = publicHost[PublicHostTerminusKey] + } + + if sg != nil { + labels[LabelCoreErdaCloudServiceGroupId] = sg.ID + } + return nil +} diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go index 7970f25e909..a92c4b6d127 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go @@ -30,6 +30,7 @@ import ( "github.com/erda-project/erda/apistructs" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8serror" + "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels" "github.com/erda-project/erda/pkg/istioctl" "github.com/erda-project/erda/pkg/strutil" ) @@ -152,7 +153,7 @@ func newService(service *apistructs.Service, selectors map[string]string) *apiv1 } } - err := setCoreErdaLabels(nil, service, k8sService.Labels) + err := labels.SetCoreErdaLabels(nil, service, k8sService.Labels) if err != nil { logrus.Error(err) return k8sService @@ -346,7 +347,7 @@ func (k *Kubernetes) UpdateK8sService(k8sService *apiv1.Service, service *apistr setServiceLabelSelector(k8sService, selectors) k8sService.Spec.Ports = newPorts - err := setCoreErdaLabels(nil, service, k8sService.Labels) + err := labels.SetCoreErdaLabels(nil, service, k8sService.Labels) if err != nil { return fmt.Errorf("can't set erda labels") } From a09b3e7047c1cf7ea31d3369a19b5262d23001f7 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Fri, 31 May 2024 14:36:13 +0800 Subject: [PATCH 10/32] feat: add service group id for service --- .../executor/plugins/k8s/labels/labels.go | 48 ++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go index 8a65a367320..adb8969d8e6 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go @@ -34,34 +34,50 @@ const ( LabelDiceServiceName = "DICE_SERVICE_NAME" LabelDiceWorkSpace = "DICE_WORKSPACE" LabelDiceServiceType = "SERVICE_TYPE" + LabelServiceGroupId = "servicegroup-id" ServiceEnvPublicHost = "PUBLIC_HOST" PublicHostTerminusKey = "terminusKey" ) +var labelMappings = map[string]string{ + LabelCoreErdaCloudClusterName: LabelDiceClusterName, + LabelCoreErdaCloudOrgId: LabelDiceOrgId, + LabelCoreErdaCloudOrgName: LabelDiceOrgName, + LabelCoreErdaCloudAppId: LabelDiceAppId, + LabelCoreErdaCloudAppName: LabelDiceAppName, + LabelCoreErdaCloudProjectId: LabelDiceProjectId, + LabelCoreErdaCloudProjectName: LabelDiceProjectName, + LabelCoreErdaCloudRuntimeId: LabelDiceRuntimeId, + LabelCoreErdaCloudServiceName: LabelDiceServiceName, + LabelCoreErdaCloudWorkSpace: LabelDiceWorkSpace, + LabelCoreErdaCloudServiceType: LabelDiceServiceType, +} + func SetCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels map[string]string) error { if labels == nil { return nil } if service != nil { - labels[LabelCoreErdaCloudClusterName] = service.Labels[LabelDiceClusterName] - labels[LabelCoreErdaCloudOrgId] = service.Labels[LabelDiceOrgId] - labels[LabelCoreErdaCloudOrgName] = service.Labels[LabelDiceOrgName] - labels[LabelCoreErdaCloudAppId] = service.Labels[LabelDiceAppId] - labels[LabelCoreErdaCloudAppName] = service.Labels[LabelDiceAppName] - labels[LabelCoreErdaCloudProjectId] = service.Labels[LabelDiceProjectId] - labels[LabelCoreErdaCloudProjectName] = service.Labels[LabelDiceProjectName] - labels[LabelCoreErdaCloudRuntimeId] = service.Labels[LabelDiceRuntimeId] - labels[LabelCoreErdaCloudServiceName] = service.Labels[LabelDiceServiceName] - labels[LabelCoreErdaCloudWorkSpace] = service.Labels[LabelDiceWorkSpace] - labels[LabelCoreErdaCloudServiceType] = service.Labels[LabelDiceServiceType] - publicHost := make(map[string]string) - err := json.Unmarshal([]byte(service.Env[ServiceEnvPublicHost]), &publicHost) - if err != nil { - return err + for coreLabel, diceLabel := range labelMappings { + if value, exists := service.Labels[diceLabel]; exists { + labels[coreLabel] = value + } + } + if publicHost, exists := service.Env[ServiceEnvPublicHost]; exists { + var publicHostMap map[string]string + if err := json.Unmarshal([]byte(publicHost), &publicHostMap); err != nil { + return err + } + if terminusKey, exists := publicHostMap[PublicHostTerminusKey]; exists { + labels[LabelErdaCloudTenantId] = terminusKey + } } - labels[LabelErdaCloudTenantId] = publicHost[PublicHostTerminusKey] + } + + if sgId, exists := labels[LabelServiceGroupId]; exists { + labels[LabelCoreErdaCloudServiceGroupId] = sgId } if sg != nil { From 201b63ed2fb86dce636701fb31ec234e4f1a3da2 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Fri, 31 May 2024 14:37:28 +0800 Subject: [PATCH 11/32] polish: improve unit testing --- .../executor/plugins/k8s/service_test.go | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go index 795d464a461..d4ab776918f 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go @@ -91,17 +91,17 @@ func Test_newService(t *testing.T) { Labels: map[string]string{ "app": "fake-service", "svc": "fake-service.default.svc.cluster.local", - "core.erda.cloud/app-id": "", - "core.erda.cloud/app-name": "", - "core.erda.cloud/cluster-name": "", - "core.erda.cloud/org-id": "", - "core.erda.cloud/org-name": "", - "core.erda.cloud/project-id": "", - "core.erda.cloud/project-name": "", - "core.erda.cloud/runtime-id": "", - "core.erda.cloud/service-name": "", - "core.erda.cloud/service-type": "", - "core.erda.cloud/workspace": "", + "core.erda.cloud/app-id": "11972", + "core.erda.cloud/app-name": "fake-service", + "core.erda.cloud/cluster-name": "erda-jicheng", + "core.erda.cloud/org-id": "100060", + "core.erda.cloud/org-name": "erda", + "core.erda.cloud/project-id": "387", + "core.erda.cloud/project-name": "erda-project", + "core.erda.cloud/runtime-id": "25160", + "core.erda.cloud/service-name": "fake-server", + "core.erda.cloud/service-type": "STATELESS", + "core.erda.cloud/workspace": "test", }, }, Spec: v1.ServiceSpec{ From c4a0c68952008d18cc05dd9483c479c512d08039 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Fri, 31 May 2024 14:40:03 +0800 Subject: [PATCH 12/32] polish: add license --- .../executor/plugins/k8s/labels/labels.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go index adb8969d8e6..fb656313914 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go @@ -1,3 +1,17 @@ +// Copyright (c) 2021 Terminus, Inc. +// +// 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 labels import ( From f70758506d4e51908c582402c997777ea83ee16c Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 4 Jun 2024 09:55:14 +0800 Subject: [PATCH 13/32] polish: pass test action --- .../executor/plugins/k8s/service_test.go | 72 +++++++++++++------ 1 file changed, 52 insertions(+), 20 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go index d4ab776918f..ff3a9b924ad 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go @@ -15,6 +15,7 @@ package k8s import ( + "encoding/json" "reflect" "testing" @@ -24,9 +25,11 @@ import ( apiv1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" "github.com/erda-project/erda/apistructs" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8sservice" + "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels" "github.com/erda-project/erda/pkg/parser/diceyml" ) @@ -74,10 +77,24 @@ func Test_newService(t *testing.T) { }, }, labels: map[string]string{ - "app": "fake-service", - "svc": "fake-service.default.svc.cluster.local", - // invalid label, value must be 63 characters or less and must be empty or begin and end with an alphanumeric character ([a-z0-9A-Z]) - "invalid": "manager.addon-idxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.erda.cloud", + "app": "fake-service", + "svc": "fake-service.default.svc.cluster.local", + labels.LabelCoreErdaCloudAppId: "11972", + labels.LabelCoreErdaCloudAppName: "fake-service", + labels.LabelCoreErdaCloudClusterName: "erda-jicheng", + labels.LabelCoreErdaCloudOrgId: "100060", + labels.LabelCoreErdaCloudOrgName: "erda", + labels.LabelCoreErdaCloudProjectId: "387", + labels.LabelCoreErdaCloudProjectName: "erda-project", + labels.LabelCoreErdaCloudRuntimeId: "25160", + labels.LabelCoreErdaCloudServiceName: "fake-server", + labels.LabelCoreErdaCloudServiceType: "STATELESS", + labels.LabelCoreErdaCloudWorkSpace: "test", + //"app": "fake-service", + //"svc": "fake-service.default.svc.cluster.local", + //// invalid label, value must be 63 characters or less and must be empty or begin and end with an alphanumeric character ([a-z0-9A-Z]) + ////"invalid": "manager.addon-idxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.erda.cloud", + //"invalid": "manager.addon-id.erda.cloud", }, }, want: &v1.Service{ @@ -89,26 +106,37 @@ func Test_newService(t *testing.T) { Name: "fake-service", Namespace: apiv1.NamespaceDefault, Labels: map[string]string{ - "app": "fake-service", - "svc": "fake-service.default.svc.cluster.local", - "core.erda.cloud/app-id": "11972", - "core.erda.cloud/app-name": "fake-service", - "core.erda.cloud/cluster-name": "erda-jicheng", - "core.erda.cloud/org-id": "100060", - "core.erda.cloud/org-name": "erda", - "core.erda.cloud/project-id": "387", - "core.erda.cloud/project-name": "erda-project", - "core.erda.cloud/runtime-id": "25160", - "core.erda.cloud/service-name": "fake-server", - "core.erda.cloud/service-type": "STATELESS", - "core.erda.cloud/workspace": "test", + "app": "fake-service", + "svc": "fake-service.default.svc.cluster.local", + labels.LabelCoreErdaCloudAppId: "11972", + labels.LabelCoreErdaCloudAppName: "fake-service", + labels.LabelCoreErdaCloudClusterName: "erda-jicheng", + labels.LabelCoreErdaCloudOrgId: "100060", + labels.LabelCoreErdaCloudOrgName: "erda", + labels.LabelCoreErdaCloudProjectId: "387", + labels.LabelCoreErdaCloudProjectName: "erda-project", + labels.LabelCoreErdaCloudRuntimeId: "25160", + labels.LabelCoreErdaCloudServiceName: "fake-server", + labels.LabelCoreErdaCloudServiceType: "STATELESS", + labels.LabelCoreErdaCloudWorkSpace: "test", }, }, Spec: v1.ServiceSpec{ - Ports: nil, + Ports: []v1.ServicePort{{Name: "tcp-0", Port: 80, TargetPort: intstr.IntOrString{IntVal: 80}}}, Selector: map[string]string{ - "app": "fake-service", - "svc": "fake-service.default.svc.cluster.local", + "app": "fake-service", + "svc": "fake-service.default.svc.cluster.local", + labels.LabelCoreErdaCloudAppId: "11972", + labels.LabelCoreErdaCloudAppName: "fake-service", + labels.LabelCoreErdaCloudClusterName: "erda-jicheng", + labels.LabelCoreErdaCloudOrgId: "100060", + labels.LabelCoreErdaCloudOrgName: "erda", + labels.LabelCoreErdaCloudProjectId: "387", + labels.LabelCoreErdaCloudProjectName: "erda-project", + labels.LabelCoreErdaCloudRuntimeId: "25160", + labels.LabelCoreErdaCloudServiceName: "fake-server", + labels.LabelCoreErdaCloudServiceType: "STATELESS", + labels.LabelCoreErdaCloudWorkSpace: "test", }, }, }, @@ -118,6 +146,10 @@ func Test_newService(t *testing.T) { t.Run(tt.name, func(t *testing.T) { got := newService(tt.args.service, tt.args.labels) if d := cmp.Diff(got, tt.want); d != "" { + gotBytes, _ := json.Marshal(got) + wantBytes, _ := json.Marshal(tt.want) + t.Logf("%s\n", string(gotBytes)) + t.Logf("%s\n", string(wantBytes)) t.Errorf("newService() mismatch (-want +got):\n%s", d) } }) From 93fcd91ad5d9bcfd17be5fbfa47c1d7ca55fd911 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 4 Jun 2024 09:55:48 +0800 Subject: [PATCH 14/32] polish: pass test action --- .../scheduler/executor/plugins/k8s/service_test.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go index ff3a9b924ad..ca0b22cbf22 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go @@ -15,7 +15,6 @@ package k8s import ( - "encoding/json" "reflect" "testing" @@ -146,10 +145,6 @@ func Test_newService(t *testing.T) { t.Run(tt.name, func(t *testing.T) { got := newService(tt.args.service, tt.args.labels) if d := cmp.Diff(got, tt.want); d != "" { - gotBytes, _ := json.Marshal(got) - wantBytes, _ := json.Marshal(tt.want) - t.Logf("%s\n", string(gotBytes)) - t.Logf("%s\n", string(wantBytes)) t.Errorf("newService() mismatch (-want +got):\n%s", d) } }) From 8b2cc71c1d667dea4ce07040e8dc8dc463aa7415 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 11 Jun 2024 13:30:47 +0800 Subject: [PATCH 15/32] polish: move the labels.go to the orchestrator directory --- .../plugins/k8s => }/labels/labels.go | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) rename internal/tools/orchestrator/{scheduler/executor/plugins/k8s => }/labels/labels.go (84%) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go b/internal/tools/orchestrator/labels/labels.go similarity index 84% rename from internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go rename to internal/tools/orchestrator/labels/labels.go index fb656313914..0da3fa90905 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels/labels.go +++ b/internal/tools/orchestrator/labels/labels.go @@ -18,6 +18,7 @@ import ( "encoding/json" "github.com/erda-project/erda/apistructs" + "github.com/erda-project/erda/internal/tools/orchestrator/dbclient" ) // k8s labels @@ -55,6 +56,12 @@ const ( PublicHostTerminusKey = "terminusKey" ) +const ( + LabelAddonErdaCloudId = "addon.erda.cloud/id" + LabelAddonErdaCloudScope = "addon.erda.cloud/scope" + LabelAddonErdaCloudName = "addon.erda.cloud/name" +) + var labelMappings = map[string]string{ LabelCoreErdaCloudClusterName: LabelDiceClusterName, LabelCoreErdaCloudOrgId: LabelDiceOrgId, @@ -69,6 +76,20 @@ var labelMappings = map[string]string{ LabelCoreErdaCloudServiceType: LabelDiceServiceType, } +func MergeAddonCoreErdaLabels(target map[string]string, source map[string]string) { + for core, dice := range labelMappings { + if v, exist := source[dice]; exist { + target[core] = v + } + } +} + +func SetAddonErdaLabels(labels map[string]string, ins *dbclient.AddonInstance) { + labels[LabelAddonErdaCloudId] = ins.ID + labels[LabelAddonErdaCloudScope] = ins.ShareScope + labels[LabelAddonErdaCloudName] = ins.AddonName +} + func SetCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels map[string]string) error { if labels == nil { return nil @@ -94,7 +115,7 @@ func SetCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels[LabelCoreErdaCloudServiceGroupId] = sgId } - if sg != nil { + if sg != nil && sg.ID != "" { labels[LabelCoreErdaCloudServiceGroupId] = sg.ID } return nil From 9181e05156cae916d09852acec66653023ba34ec Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 11 Jun 2024 13:32:32 +0800 Subject: [PATCH 16/32] polish: move the labels.go to the orchestrator directory --- .../scheduler/executor/plugins/k8s/daemonset.go | 2 +- .../scheduler/executor/plugins/k8s/deployment.go | 2 +- .../scheduler/executor/plugins/k8s/service.go | 2 +- .../scheduler/executor/plugins/k8s/service_test.go | 2 +- .../scheduler/executor/plugins/k8s/statefulset.go | 9 ++++++++- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go index 59b80d26673..8b125dbeec5 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go @@ -26,8 +26,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/erda-project/erda/apistructs" + "github.com/erda-project/erda/internal/tools/orchestrator/labels" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8sapi" - "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/toleration" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/types" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/util" diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go index e89d0587bfb..2ea6c8024f7 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go @@ -33,8 +33,8 @@ import ( "github.com/erda-project/erda/apistructs" "github.com/erda-project/erda/internal/tools/orchestrator/conf" + "github.com/erda-project/erda/internal/tools/orchestrator/labels" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8sapi" - "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/toleration" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/types" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/util" diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go index a92c4b6d127..bed7048c79d 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go @@ -29,8 +29,8 @@ import ( "k8s.io/apimachinery/pkg/util/validation" "github.com/erda-project/erda/apistructs" + "github.com/erda-project/erda/internal/tools/orchestrator/labels" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8serror" - "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels" "github.com/erda-project/erda/pkg/istioctl" "github.com/erda-project/erda/pkg/strutil" ) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go index ca0b22cbf22..0baa7943b26 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go @@ -27,8 +27,8 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" "github.com/erda-project/erda/apistructs" + "github.com/erda-project/erda/internal/tools/orchestrator/labels" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8sservice" - "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/labels" "github.com/erda-project/erda/pkg/parser/diceyml" ) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go index 5d4b64e90f7..661f88983c9 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go @@ -32,6 +32,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/erda-project/erda/apistructs" + "github.com/erda-project/erda/internal/tools/orchestrator/labels" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/k8sapi" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/toleration" "github.com/erda-project/erda/internal/tools/orchestrator/scheduler/executor/plugins/k8s/types" @@ -112,8 +113,14 @@ func (k *Kubernetes) createStatefulSet(ctx context.Context, info types.Statefuls }, } + logrus.Infof("set core erda labels") + err := labels.SetCoreErdaLabels(info.Sg, service, set.Labels) + if err != nil { + return errors.Errorf("StatefulSet can't set core/erda labels, err: %v", err) + } + hasHostPath := serviceHasHostpath(service) - err := setPodLabelsFromService(hasHostPath, service.Labels, set.Labels) + err = setPodLabelsFromService(hasHostPath, service.Labels, set.Labels) if err != nil { return errors.Errorf("error in service.Labels: %v for statefulset %v in namesapce %v", err, set.Name, set.Namespace) } From af8dd17022a4321b3d0ec03e542371d9293280ef Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 11 Jun 2024 13:34:20 +0800 Subject: [PATCH 17/32] feat: adding new labels to the base addon --- internal/tools/orchestrator/services/addon/addon_deploy.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/internal/tools/orchestrator/services/addon/addon_deploy.go b/internal/tools/orchestrator/services/addon/addon_deploy.go index 038eaebd888..06d76eff661 100644 --- a/internal/tools/orchestrator/services/addon/addon_deploy.go +++ b/internal/tools/orchestrator/services/addon/addon_deploy.go @@ -30,6 +30,7 @@ import ( "github.com/erda-project/erda/internal/tools/orchestrator/conf" "github.com/erda-project/erda/internal/tools/orchestrator/dbclient" "github.com/erda-project/erda/internal/tools/orchestrator/i18n" + "github.com/erda-project/erda/internal/tools/orchestrator/labels" "github.com/erda-project/erda/pkg/discover" "github.com/erda-project/erda/pkg/mysqlhelper" "github.com/erda-project/erda/pkg/parser/diceyml" @@ -673,6 +674,12 @@ func (a *Addon) BuildAddonRequestGroup(params *apistructs.AddonHandlerCreateItem ser.Envs[k] = v } } + + for _, svc := range addonDice.Services { + labels.MergeAddonCoreErdaLabels(svc.Labels, addonDeployGroup.GroupLabels) + labels.SetAddonErdaLabels(svc.Labels, addonIns) + } + addonDeployGroup.DiceYml = *addonDice return &addonDeployGroup, nil From 58cee3b81e8795aeb2bd9ec2b0d3b870ce79a256 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 11 Jun 2024 13:34:35 +0800 Subject: [PATCH 18/32] feat: adding new labels to the cluster addons --- .../msp/resource/deploy/handlers/handler.go | 2 + internal/apps/msp/resource/utils/common.go | 62 +++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/internal/apps/msp/resource/deploy/handlers/handler.go b/internal/apps/msp/resource/deploy/handlers/handler.go index 25b2b228dab..ccc385f96aa 100644 --- a/internal/apps/msp/resource/deploy/handlers/handler.go +++ b/internal/apps/msp/resource/deploy/handlers/handler.go @@ -588,6 +588,8 @@ func (h *DefaultDeployHandler) BuildServiceGroupRequest(resourceInfo *ResourceIn service.Labels = make(map[string]string) } utils.SetlabelsFromOptions(options, service.Labels) + utils.MergeAddonCoreErdaLabels(service.Labels, labels) + utils.SetAddonErdaLabels(service.Labels, req, resourceInfo) } return &req diff --git a/internal/apps/msp/resource/utils/common.go b/internal/apps/msp/resource/utils/common.go index 056e1e57621..d844de3a417 100644 --- a/internal/apps/msp/resource/utils/common.go +++ b/internal/apps/msp/resource/utils/common.go @@ -23,6 +23,7 @@ import ( "time" "github.com/erda-project/erda/apistructs" + "github.com/erda-project/erda/internal/apps/msp/resource/deploy/handlers" "github.com/erda-project/erda/pkg/crypto/uuid" "github.com/erda-project/erda/pkg/kms/kmscrypto" "github.com/erda-project/erda/pkg/parser/diceyml" @@ -109,3 +110,64 @@ func SetlabelsFromOptions(options, labels map[string]string) { labels[apistructs.AlibabaECILabel] = options[apistructs.AlibabaECILabel] } } + +// k8s labels +const ( + LabelCoreErdaCloudClusterName = "core.erda.cloud/cluster-name" + LabelCoreErdaCloudOrgId = "core.erda.cloud/org-id" + LabelCoreErdaCloudOrgName = "core.erda.cloud/org-name" + LabelCoreErdaCloudAppId = "core.erda.cloud/app-id" + LabelCoreErdaCloudAppName = "core.erda.cloud/app-name" + LabelCoreErdaCloudProjectId = "core.erda.cloud/project-id" + LabelCoreErdaCloudProjectName = "core.erda.cloud/project-name" + LabelCoreErdaCloudRuntimeId = "core.erda.cloud/runtime-id" + LabelCoreErdaCloudServiceName = "core.erda.cloud/service-name" + LabelCoreErdaCloudWorkSpace = "core.erda.cloud/workspace" + LabelCoreErdaCloudServiceType = "core.erda.cloud/service-type" + + LabelDiceClusterName = "DICE_CLUSTER_NAME" + LabelDiceOrgId = "DICE_ORG_ID" + LabelDiceOrgName = "DICE_ORG_NAME" + LabelDiceAppId = "DICE_APPLICATION_ID" + LabelDiceAppName = "DICE_APPLICATION_NAME" + LabelDiceProjectId = "DICE_PROJECT_ID" + LabelDiceProjectName = "DICE_PROJECT_NAME" + LabelDiceRuntimeId = "DICE_RUNTIME_ID" + LabelDiceServiceName = "DICE_SERVICE_NAME" + LabelDiceWorkSpace = "DICE_WORKSPACE" + LabelDiceServiceType = "SERVICE_TYPE" +) + +const ( + LabelAddonErdaCloudId = "addon.erda.cloud/id" + LabelAddonErdaCloudScope = "addon.erda.cloud/scope" + LabelAddonErdaCloudName = "addon.erda.cloud/name" +) + +var labelMappings = map[string]string{ + LabelCoreErdaCloudClusterName: LabelDiceClusterName, + LabelCoreErdaCloudOrgId: LabelDiceOrgId, + LabelCoreErdaCloudOrgName: LabelDiceOrgName, + LabelCoreErdaCloudAppId: LabelDiceAppId, + LabelCoreErdaCloudAppName: LabelDiceAppName, + LabelCoreErdaCloudProjectId: LabelDiceProjectId, + LabelCoreErdaCloudProjectName: LabelDiceProjectName, + LabelCoreErdaCloudRuntimeId: LabelDiceRuntimeId, + LabelCoreErdaCloudServiceName: LabelDiceServiceName, + LabelCoreErdaCloudWorkSpace: LabelDiceWorkSpace, + LabelCoreErdaCloudServiceType: LabelDiceServiceType, +} + +func MergeAddonCoreErdaLabels(target map[string]string, source map[string]string) { + for core, dice := range labelMappings { + if v, exist := source[dice]; exist { + target[core] = v + } + } +} + +func SetAddonErdaLabels(labels map[string]string, req apistructs.ServiceGroupCreateV2Request, info *handlers.ResourceInfo) { + labels[LabelAddonErdaCloudId] = req.ID + labels[LabelAddonErdaCloudScope] = info.Spec.SubCategory + labels[LabelAddonErdaCloudName] = info.Spec.Name +} From 42bca212e900b678e5b73aff6ef23399eada6f1c Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 11 Jun 2024 14:54:23 +0800 Subject: [PATCH 19/32] polish: solve circular references --- .../apps/msp/resource/deploy/handlers/handler.go | 4 ++-- internal/apps/msp/resource/utils/common.go | 14 +++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/internal/apps/msp/resource/deploy/handlers/handler.go b/internal/apps/msp/resource/deploy/handlers/handler.go index ccc385f96aa..eff0d62928b 100644 --- a/internal/apps/msp/resource/deploy/handlers/handler.go +++ b/internal/apps/msp/resource/deploy/handlers/handler.go @@ -588,8 +588,8 @@ func (h *DefaultDeployHandler) BuildServiceGroupRequest(resourceInfo *ResourceIn service.Labels = make(map[string]string) } utils.SetlabelsFromOptions(options, service.Labels) - utils.MergeAddonCoreErdaLabels(service.Labels, labels) - utils.SetAddonErdaLabels(service.Labels, req, resourceInfo) + utils.MergeAddonCoreErdaLabels(service.Labels, labels, req) + utils.SetAddonErdaLabels(service.Labels, req, resourceInfo.Spec) } return &req diff --git a/internal/apps/msp/resource/utils/common.go b/internal/apps/msp/resource/utils/common.go index d844de3a417..e4df9cd17cd 100644 --- a/internal/apps/msp/resource/utils/common.go +++ b/internal/apps/msp/resource/utils/common.go @@ -23,7 +23,6 @@ import ( "time" "github.com/erda-project/erda/apistructs" - "github.com/erda-project/erda/internal/apps/msp/resource/deploy/handlers" "github.com/erda-project/erda/pkg/crypto/uuid" "github.com/erda-project/erda/pkg/kms/kmscrypto" "github.com/erda-project/erda/pkg/parser/diceyml" @@ -158,16 +157,21 @@ var labelMappings = map[string]string{ LabelCoreErdaCloudServiceType: LabelDiceServiceType, } -func MergeAddonCoreErdaLabels(target map[string]string, source map[string]string) { +func MergeAddonCoreErdaLabels(target map[string]string, source map[string]string, req apistructs.ServiceGroupCreateV2Request) { for core, dice := range labelMappings { if v, exist := source[dice]; exist { target[core] = v } } + setCoreErdaLabels(target, req) } -func SetAddonErdaLabels(labels map[string]string, req apistructs.ServiceGroupCreateV2Request, info *handlers.ResourceInfo) { +func setCoreErdaLabels(labels map[string]string, req apistructs.ServiceGroupCreateV2Request) { + labels[LabelCoreErdaCloudClusterName] = req.ClusterName +} + +func SetAddonErdaLabels(labels map[string]string, req apistructs.ServiceGroupCreateV2Request, spec *apistructs.AddonExtension) { labels[LabelAddonErdaCloudId] = req.ID - labels[LabelAddonErdaCloudScope] = info.Spec.SubCategory - labels[LabelAddonErdaCloudName] = info.Spec.Name + labels[LabelAddonErdaCloudScope] = spec.SubCategory + labels[LabelAddonErdaCloudName] = spec.Name } From c367c1ea98ef4376c4894ed893828aa975dbfcca Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 11 Jun 2024 17:38:09 +0800 Subject: [PATCH 20/32] feat: set tenant-id label for addons --- apistructs/addon.go | 2 ++ internal/tools/orchestrator/labels/labels.go | 3 ++- internal/tools/orchestrator/services/addon/addon.go | 12 ++++++++++++ .../orchestrator/services/addon/addon_deploy.go | 2 +- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/apistructs/addon.go b/apistructs/addon.go index 14ce444d803..ac7c2e44783 100644 --- a/apistructs/addon.go +++ b/apistructs/addon.go @@ -1019,6 +1019,8 @@ type AddonHandlerCreateItem struct { InsideAddon string `json:"insideAddon"` // ShareScope 是否为内部依赖addon,N:否,Y:是 ShareScope string `json:"shareScope"` + // TenantId 租户Id + TenantId string `json:"tenantId,omitempty"` } // AddonExtension addon extension对象信息 diff --git a/internal/tools/orchestrator/labels/labels.go b/internal/tools/orchestrator/labels/labels.go index 0da3fa90905..f311ab2428b 100644 --- a/internal/tools/orchestrator/labels/labels.go +++ b/internal/tools/orchestrator/labels/labels.go @@ -76,12 +76,13 @@ var labelMappings = map[string]string{ LabelCoreErdaCloudServiceType: LabelDiceServiceType, } -func MergeAddonCoreErdaLabels(target map[string]string, source map[string]string) { +func MergeAddonCoreErdaLabels(target map[string]string, source map[string]string, params *apistructs.AddonHandlerCreateItem) { for core, dice := range labelMappings { if v, exist := source[dice]; exist { target[core] = v } } + target[LabelErdaCloudTenantId] = params.TenantId } func SetAddonErdaLabels(labels map[string]string, ins *dbclient.AddonInstance) { diff --git a/internal/tools/orchestrator/services/addon/addon.go b/internal/tools/orchestrator/services/addon/addon.go index 62dab41d4c2..ef068293ca7 100644 --- a/internal/tools/orchestrator/services/addon/addon.go +++ b/internal/tools/orchestrator/services/addon/addon.go @@ -2998,6 +2998,17 @@ func (a *Addon) checkCreateParams(req *apistructs.AddonCreateRequest) error { // deployAddons addons 部署 func (a *Addon) deployAddons(req *apistructs.AddonCreateRequest, deploys []dbclient.AddonPrebuild) error { needDeployAddons := []apistructs.AddonHandlerCreateItem{} + //terminusKey + tenantResp, err := a.tenantSvc.GetTenant(context.Background(), &tenantpb.GetTenantRequest{ + ProjectID: fmt.Sprintf("%v", req.ProjectID), + TenantType: tenantpb.Type_DOP.String(), + Workspace: req.Workspace, + }) + tenantId := tenantResp.Data.Id + + if err != nil { + return errors.Errorf("can't get tenant id from tenant service , %v", err.Error()) + } for _, v := range deploys { if _, ok := AddonInfos.Load(v.AddonName); !ok { errStr := i18n2.OrgSprintf(strconv.FormatUint(req.OrgID, 10), "AddonTypeDoseNoExist", v.AddonName) @@ -3020,6 +3031,7 @@ func (a *Addon) deployAddons(req *apistructs.AddonCreateRequest, deploys []dbcli RuntimeID: strconv.FormatUint(req.RuntimeID, 10), RuntimeName: req.RuntimeName, OperatorID: req.Operator, + TenantId: tenantId, } if len(createItem.Options) == 0 { createItem.Options = map[string]string{} diff --git a/internal/tools/orchestrator/services/addon/addon_deploy.go b/internal/tools/orchestrator/services/addon/addon_deploy.go index 06d76eff661..26be7afbba3 100644 --- a/internal/tools/orchestrator/services/addon/addon_deploy.go +++ b/internal/tools/orchestrator/services/addon/addon_deploy.go @@ -676,7 +676,7 @@ func (a *Addon) BuildAddonRequestGroup(params *apistructs.AddonHandlerCreateItem } for _, svc := range addonDice.Services { - labels.MergeAddonCoreErdaLabels(svc.Labels, addonDeployGroup.GroupLabels) + labels.MergeAddonCoreErdaLabels(svc.Labels, addonDeployGroup.GroupLabels, params) labels.SetAddonErdaLabels(svc.Labels, addonIns) } From 440eeec727ac2ad07e824ff00bc150940dc27466 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 11 Jun 2024 17:42:14 +0800 Subject: [PATCH 21/32] polish: remove useless code --- internal/apps/msp/resource/utils/common.go | 27 ---------------------- 1 file changed, 27 deletions(-) diff --git a/internal/apps/msp/resource/utils/common.go b/internal/apps/msp/resource/utils/common.go index e4df9cd17cd..26f6ee3d683 100644 --- a/internal/apps/msp/resource/utils/common.go +++ b/internal/apps/msp/resource/utils/common.go @@ -113,27 +113,9 @@ func SetlabelsFromOptions(options, labels map[string]string) { // k8s labels const ( LabelCoreErdaCloudClusterName = "core.erda.cloud/cluster-name" - LabelCoreErdaCloudOrgId = "core.erda.cloud/org-id" - LabelCoreErdaCloudOrgName = "core.erda.cloud/org-name" - LabelCoreErdaCloudAppId = "core.erda.cloud/app-id" - LabelCoreErdaCloudAppName = "core.erda.cloud/app-name" - LabelCoreErdaCloudProjectId = "core.erda.cloud/project-id" - LabelCoreErdaCloudProjectName = "core.erda.cloud/project-name" - LabelCoreErdaCloudRuntimeId = "core.erda.cloud/runtime-id" - LabelCoreErdaCloudServiceName = "core.erda.cloud/service-name" - LabelCoreErdaCloudWorkSpace = "core.erda.cloud/workspace" LabelCoreErdaCloudServiceType = "core.erda.cloud/service-type" LabelDiceClusterName = "DICE_CLUSTER_NAME" - LabelDiceOrgId = "DICE_ORG_ID" - LabelDiceOrgName = "DICE_ORG_NAME" - LabelDiceAppId = "DICE_APPLICATION_ID" - LabelDiceAppName = "DICE_APPLICATION_NAME" - LabelDiceProjectId = "DICE_PROJECT_ID" - LabelDiceProjectName = "DICE_PROJECT_NAME" - LabelDiceRuntimeId = "DICE_RUNTIME_ID" - LabelDiceServiceName = "DICE_SERVICE_NAME" - LabelDiceWorkSpace = "DICE_WORKSPACE" LabelDiceServiceType = "SERVICE_TYPE" ) @@ -145,15 +127,6 @@ const ( var labelMappings = map[string]string{ LabelCoreErdaCloudClusterName: LabelDiceClusterName, - LabelCoreErdaCloudOrgId: LabelDiceOrgId, - LabelCoreErdaCloudOrgName: LabelDiceOrgName, - LabelCoreErdaCloudAppId: LabelDiceAppId, - LabelCoreErdaCloudAppName: LabelDiceAppName, - LabelCoreErdaCloudProjectId: LabelDiceProjectId, - LabelCoreErdaCloudProjectName: LabelDiceProjectName, - LabelCoreErdaCloudRuntimeId: LabelDiceRuntimeId, - LabelCoreErdaCloudServiceName: LabelDiceServiceName, - LabelCoreErdaCloudWorkSpace: LabelDiceWorkSpace, LabelCoreErdaCloudServiceType: LabelDiceServiceType, } From 793082d0f644a6ea9ffcb48fd7e8ff4ba5ea8b22 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Wed, 12 Jun 2024 11:25:33 +0800 Subject: [PATCH 22/32] feat: setting tenant-id for manually added Addons --- .../tools/orchestrator/dbclient/msp_tenant.go | 43 +++++++++++++++++++ internal/tools/orchestrator/labels/labels.go | 4 +- .../services/addon/addon_handler.go | 18 ++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 internal/tools/orchestrator/dbclient/msp_tenant.go diff --git a/internal/tools/orchestrator/dbclient/msp_tenant.go b/internal/tools/orchestrator/dbclient/msp_tenant.go new file mode 100644 index 00000000000..05322f9f48b --- /dev/null +++ b/internal/tools/orchestrator/dbclient/msp_tenant.go @@ -0,0 +1,43 @@ +// Copyright (c) 2021 Terminus, Inc. +// +// 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 dbclient + +import "time" + +const ( + TableMSPTenant = "msp_tenant" +) + +type MSPTenant struct { + Id string `gorm:"column:id" db:"id" json:"id" form:"id"` // Tenant id + Type string `gorm:"column:type" db:"type" json:"type" form:"type"` // Tenant type(dop 、msp) + RelatedProjectId string `gorm:"column:related_project_id" db:"related_project_id" json:"related_project_id" form:"related_project_id"` // Project id + RelatedWorkspace string `gorm:"column:related_workspace" db:"related_workspace" json:"related_workspace" form:"related_workspace"` // Workspace( DEV、TEST、STAGING、PROD、DEFAULT) + CreatedAt time.Time `gorm:"column:created_at" db:"created_at" json:"create_time" form:"create_time"` // Create time + UpdatedAt time.Time `gorm:"column:updated_at" db:"updated_at" json:"update_time" form:"update_time"` // Update time + IsDeleted bool `gorm:"column:is_deleted" db:"is_deleted" json:"is_deleted" form:"is_deleted"` // Delete or not +} + +func (MSPTenant) TableName() string { return TableMSPTenant } + +func (db *DBClient) QueryTenantByProjectIDAndWorkspace(projectId, workSpace string) (*MSPTenant, error) { + tenant := MSPTenant{} + err := db. + Model(&tenant). + Where("`related_project_id` = ?", projectId). + Where("`related_workspace` = ?", workSpace). + Find(&tenant).Error + return &tenant, err +} diff --git a/internal/tools/orchestrator/labels/labels.go b/internal/tools/orchestrator/labels/labels.go index f311ab2428b..2b4b0ac5b0e 100644 --- a/internal/tools/orchestrator/labels/labels.go +++ b/internal/tools/orchestrator/labels/labels.go @@ -82,7 +82,9 @@ func MergeAddonCoreErdaLabels(target map[string]string, source map[string]string target[core] = v } } - target[LabelErdaCloudTenantId] = params.TenantId + if params.TenantId != "" { + target[LabelErdaCloudTenantId] = params.TenantId + } } func SetAddonErdaLabels(labels map[string]string, ins *dbclient.AddonInstance) { diff --git a/internal/tools/orchestrator/services/addon/addon_handler.go b/internal/tools/orchestrator/services/addon/addon_handler.go index 28811521961..7c8da0a5052 100644 --- a/internal/tools/orchestrator/services/addon/addon_handler.go +++ b/internal/tools/orchestrator/services/addon/addon_handler.go @@ -16,6 +16,8 @@ package addon import ( "context" + "crypto/md5" + "encoding/hex" "encoding/json" "fmt" "math/rand" @@ -268,6 +270,21 @@ func (a *Addon) AddonDelete(req apistructs.AddonDirectDeleteRequest) error { return nil } +func generateTenantID(projectID string, tenantType, workspace string) string { + md5H := md5.New() + hStr := fmt.Sprintf("%v-%s-%s", projectID, tenantType, workspace) + md5H.Write([]byte(hStr)) + return hex.EncodeToString(md5H.Sum(nil)) +} + +func (a *Addon) getTenantId(projectID string, tenantType, workspace string) string { + tenant, err := a.db.QueryTenantByProjectIDAndWorkspace(projectID, workspace) + if err != nil { + return generateTenantID(projectID, tenantType, workspace) + } + return tenant.Id +} + func (a *Addon) AddonCreate(req apistructs.AddonDirectCreateRequest) (string, error) { if len(req.Addons) != 1 { return "", fmt.Errorf("len(req.Addons) != 1") @@ -298,6 +315,7 @@ func (a *Addon) AddonCreate(req apistructs.AddonDirectCreateRequest) (string, er InsideAddon: "N", ShareScope: req.ShareScope, Options: baseAddons[0].Options, + TenantId: a.getTenantId(strconv.FormatUint(req.ProjectID, 10), pb.Type_DOP.String(), req.Workspace), } addonSpec, addonDice, err := a.GetAddonExtention(&addonItem) if err != nil { From a2c159a2dbbfe09a8a91ef88483e84f0080f3ab6 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Mon, 24 Jun 2024 15:49:26 +0800 Subject: [PATCH 23/32] feat: addon 'type' and 'version' labels --- internal/apps/msp/resource/utils/common.go | 10 ++++++---- internal/tools/orchestrator/labels/labels.go | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/internal/apps/msp/resource/utils/common.go b/internal/apps/msp/resource/utils/common.go index 26f6ee3d683..8399fecca25 100644 --- a/internal/apps/msp/resource/utils/common.go +++ b/internal/apps/msp/resource/utils/common.go @@ -120,9 +120,10 @@ const ( ) const ( - LabelAddonErdaCloudId = "addon.erda.cloud/id" - LabelAddonErdaCloudScope = "addon.erda.cloud/scope" - LabelAddonErdaCloudName = "addon.erda.cloud/name" + LabelAddonErdaCloudId = "addon.erda.cloud/id" + LabelAddonErdaCloudScope = "addon.erda.cloud/scope" + LabelAddonErdaCloudType = "addon.erda.cloud/type" + LabelAddonErdaCloudVersion = "addon.erda.cloud/version" ) var labelMappings = map[string]string{ @@ -146,5 +147,6 @@ func setCoreErdaLabels(labels map[string]string, req apistructs.ServiceGroupCrea func SetAddonErdaLabels(labels map[string]string, req apistructs.ServiceGroupCreateV2Request, spec *apistructs.AddonExtension) { labels[LabelAddonErdaCloudId] = req.ID labels[LabelAddonErdaCloudScope] = spec.SubCategory - labels[LabelAddonErdaCloudName] = spec.Name + labels[LabelAddonErdaCloudType] = spec.Name + labels[LabelAddonErdaCloudVersion] = spec.Version } diff --git a/internal/tools/orchestrator/labels/labels.go b/internal/tools/orchestrator/labels/labels.go index 2b4b0ac5b0e..0e3979629c1 100644 --- a/internal/tools/orchestrator/labels/labels.go +++ b/internal/tools/orchestrator/labels/labels.go @@ -57,9 +57,10 @@ const ( ) const ( - LabelAddonErdaCloudId = "addon.erda.cloud/id" - LabelAddonErdaCloudScope = "addon.erda.cloud/scope" - LabelAddonErdaCloudName = "addon.erda.cloud/name" + LabelAddonErdaCloudId = "addon.erda.cloud/id" + LabelAddonErdaCloudScope = "addon.erda.cloud/scope" + LabelAddonErdaCloudType = "addon.erda.cloud/type" + LabelAddonErdaCloudVersion = "addon.erda.cloud/version" ) var labelMappings = map[string]string{ @@ -90,7 +91,8 @@ func MergeAddonCoreErdaLabels(target map[string]string, source map[string]string func SetAddonErdaLabels(labels map[string]string, ins *dbclient.AddonInstance) { labels[LabelAddonErdaCloudId] = ins.ID labels[LabelAddonErdaCloudScope] = ins.ShareScope - labels[LabelAddonErdaCloudName] = ins.AddonName + labels[LabelAddonErdaCloudType] = ins.AddonName + labels[LabelAddonErdaCloudVersion] = ins.Version } func SetCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels map[string]string) error { From 994efc463d9e30ea408633cb6c127a913a22d9c8 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Mon, 1 Jul 2024 11:24:48 +0800 Subject: [PATCH 24/32] fix: tenantResp.Data may be nil --- internal/tools/orchestrator/services/addon/addon.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/tools/orchestrator/services/addon/addon.go b/internal/tools/orchestrator/services/addon/addon.go index ef068293ca7..d273c00d348 100644 --- a/internal/tools/orchestrator/services/addon/addon.go +++ b/internal/tools/orchestrator/services/addon/addon.go @@ -3004,7 +3004,11 @@ func (a *Addon) deployAddons(req *apistructs.AddonCreateRequest, deploys []dbcli TenantType: tenantpb.Type_DOP.String(), Workspace: req.Workspace, }) - tenantId := tenantResp.Data.Id + + var tenantId string + if tenantResp != nil && tenantResp.Data != nil { + tenantId = tenantResp.Data.Id + } if err != nil { return errors.Errorf("can't get tenant id from tenant service , %v", err.Error()) From 76c506f552fe94be8fa86c6ef65a7c538d56b250 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Mon, 1 Jul 2024 13:32:37 +0800 Subject: [PATCH 25/32] polish: remove useless code --- .../scheduler/executor/plugins/k8s/deployment_test.go | 4 ---- .../scheduler/executor/plugins/k8s/service_test.go | 5 ----- .../scheduler/executor/plugins/k8s/statefulset.go | 1 - 3 files changed, 10 deletions(-) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment_test.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment_test.go index 50daae04596..59891d17497 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment_test.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment_test.go @@ -15,7 +15,6 @@ package k8s import ( - "encoding/json" "reflect" "testing" @@ -104,9 +103,6 @@ func TestNewDeployment(t *testing.T) { monkey.PatchInstanceMethod(reflect.TypeOf(k.ClusterInfo), "Get", func(clusterInfo *clusterinfo.ClusterInfo) (map[string]string, error) { return nil, nil }) - monkey.Patch(json.Unmarshal, func(data []byte, v any) error { - return nil - }) deploy, err := k.newDeployment(service, servicegroup) assert.Equal(t, err, nil) k.setDeploymentZeroReplica(deploy) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go index 0baa7943b26..b65f75f75c6 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go @@ -89,11 +89,6 @@ func Test_newService(t *testing.T) { labels.LabelCoreErdaCloudServiceName: "fake-server", labels.LabelCoreErdaCloudServiceType: "STATELESS", labels.LabelCoreErdaCloudWorkSpace: "test", - //"app": "fake-service", - //"svc": "fake-service.default.svc.cluster.local", - //// invalid label, value must be 63 characters or less and must be empty or begin and end with an alphanumeric character ([a-z0-9A-Z]) - ////"invalid": "manager.addon-idxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.erda.cloud", - //"invalid": "manager.addon-id.erda.cloud", }, }, want: &v1.Service{ diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go index 661f88983c9..40f7ae1b763 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go @@ -113,7 +113,6 @@ func (k *Kubernetes) createStatefulSet(ctx context.Context, info types.Statefuls }, } - logrus.Infof("set core erda labels") err := labels.SetCoreErdaLabels(info.Sg, service, set.Labels) if err != nil { return errors.Errorf("StatefulSet can't set core/erda labels, err: %v", err) From f901870e6f33a9d2a86eb7d163332a1cd08a6a5f Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Mon, 1 Jul 2024 13:57:50 +0800 Subject: [PATCH 26/32] polish: move 'GenerateTenantID' to the utils package --- .../services/addon/addon_handler.go | 11 +------- .../tools/orchestrator/utils/addon_utils.go | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 internal/tools/orchestrator/utils/addon_utils.go diff --git a/internal/tools/orchestrator/services/addon/addon_handler.go b/internal/tools/orchestrator/services/addon/addon_handler.go index 7c8da0a5052..92f78bdbf8c 100644 --- a/internal/tools/orchestrator/services/addon/addon_handler.go +++ b/internal/tools/orchestrator/services/addon/addon_handler.go @@ -16,8 +16,6 @@ package addon import ( "context" - "crypto/md5" - "encoding/hex" "encoding/json" "fmt" "math/rand" @@ -270,17 +268,10 @@ func (a *Addon) AddonDelete(req apistructs.AddonDirectDeleteRequest) error { return nil } -func generateTenantID(projectID string, tenantType, workspace string) string { - md5H := md5.New() - hStr := fmt.Sprintf("%v-%s-%s", projectID, tenantType, workspace) - md5H.Write([]byte(hStr)) - return hex.EncodeToString(md5H.Sum(nil)) -} - func (a *Addon) getTenantId(projectID string, tenantType, workspace string) string { tenant, err := a.db.QueryTenantByProjectIDAndWorkspace(projectID, workspace) if err != nil { - return generateTenantID(projectID, tenantType, workspace) + return utils.GenerateTenantID(projectID, tenantType, workspace) } return tenant.Id } diff --git a/internal/tools/orchestrator/utils/addon_utils.go b/internal/tools/orchestrator/utils/addon_utils.go new file mode 100644 index 00000000000..1c697b155a7 --- /dev/null +++ b/internal/tools/orchestrator/utils/addon_utils.go @@ -0,0 +1,28 @@ +// Copyright (c) 2021 Terminus, Inc. +// +// 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 utils + +import ( + "crypto/md5" + "encoding/hex" + "fmt" +) + +func GenerateTenantID(projectID string, tenantType, workspace string) string { + md5H := md5.New() + hStr := fmt.Sprintf("%v-%s-%s", projectID, tenantType, workspace) + md5H.Write([]byte(hStr)) + return hex.EncodeToString(md5H.Sum(nil)) +} From b56562078467523524db62c920a29f95a24be431 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Mon, 1 Jul 2024 15:35:04 +0800 Subject: [PATCH 27/32] feat: patch QueryTenantByProjectIDAndWorkspace method to pass test --- internal/tools/orchestrator/services/addon/addon_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/tools/orchestrator/services/addon/addon_test.go b/internal/tools/orchestrator/services/addon/addon_test.go index f0e372bbb52..503adfd8057 100644 --- a/internal/tools/orchestrator/services/addon/addon_test.go +++ b/internal/tools/orchestrator/services/addon/addon_test.go @@ -980,6 +980,9 @@ func TestAddon2(t *testing.T) { return nil, nil, errors.New("error") }, ) + monkey.PatchInstanceMethod(reflect.TypeOf(a.db), "QueryTenantByProjectIDAndWorkspace", func(db *dbclient.DBClient, projectId, workSpace string) (*dbclient.MSPTenant, error) { + return nil, errors.New("error") + }) a.AddonCreate(apistructs.AddonDirectCreateRequest{ Addons: diceyml.AddOns{ "mysql": &diceyml.AddOn{ From 58ca7971f1cc3533ce8e9c1f0e14356e3400b0e1 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Fri, 5 Jul 2024 10:17:58 +0800 Subject: [PATCH 28/32] fix: cluster addon sharescope label --- internal/apps/msp/resource/utils/common.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/apps/msp/resource/utils/common.go b/internal/apps/msp/resource/utils/common.go index 8399fecca25..4fd0de8779d 100644 --- a/internal/apps/msp/resource/utils/common.go +++ b/internal/apps/msp/resource/utils/common.go @@ -145,8 +145,10 @@ func setCoreErdaLabels(labels map[string]string, req apistructs.ServiceGroupCrea } func SetAddonErdaLabels(labels map[string]string, req apistructs.ServiceGroupCreateV2Request, spec *apistructs.AddonExtension) { + if spec.ShareScopes != nil && len(spec.ShareScopes) > 0 { + labels[LabelAddonErdaCloudScope] = spec.ShareScopes[0] + } labels[LabelAddonErdaCloudId] = req.ID - labels[LabelAddonErdaCloudScope] = spec.SubCategory labels[LabelAddonErdaCloudType] = spec.Name labels[LabelAddonErdaCloudVersion] = spec.Version } From 541063d038e288fca3de17e08bf740f25f072199 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Fri, 23 Aug 2024 11:13:21 +0800 Subject: [PATCH 29/32] feat: merge tenantId --- .../tools/orchestrator/services/addon/addon.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/internal/tools/orchestrator/services/addon/addon.go b/internal/tools/orchestrator/services/addon/addon.go index fe37913fbf9..8e901b7a7cb 100644 --- a/internal/tools/orchestrator/services/addon/addon.go +++ b/internal/tools/orchestrator/services/addon/addon.go @@ -3054,7 +3054,24 @@ func (a *Addon) checkCreateParams(req *apistructs.AddonCreateRequest) error { // deployAddons addons 部署 func (a *Addon) deployAddons(req *apistructs.AddonCreateRequest, deploys []dbclient.AddonPrebuild) error { needDeployAddons := []apistructs.AddonHandlerCreateItem{} + //terminusKey + tenantResp, err := a.tenantSvc.GetTenant(context.Background(), &tenantpb.GetTenantRequest{ + ProjectID: fmt.Sprintf("%v", req.ProjectID), + TenantType: tenantpb.Type_DOP.String(), + Workspace: req.Workspace, + }) + + var tenantId string + if tenantResp != nil && tenantResp.Data != nil { + tenantId = tenantResp.Data.Id + } + + if err != nil { + return errors.Errorf("can't get tenant id from tenant service , %v", err.Error()) + } + var regVersion, confVersion string + for _, v := range deploys { if _, ok := AddonInfos.Load(v.AddonName); !ok { errStr := i18n2.OrgSprintf(strconv.FormatUint(req.OrgID, 10), "AddonTypeDoseNoExist", v.AddonName) @@ -3077,6 +3094,7 @@ func (a *Addon) deployAddons(req *apistructs.AddonCreateRequest, deploys []dbcli RuntimeID: strconv.FormatUint(req.RuntimeID, 10), RuntimeName: req.RuntimeName, OperatorID: req.Operator, + TenantId: tenantId, } if len(createItem.Options) == 0 { createItem.Options = map[string]string{} From 1dc74de451e60dd55520c6e2131d9e7b40d79bfd Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 27 Aug 2024 11:24:44 +0800 Subject: [PATCH 30/32] feat: erda label setter --- .../msp/resource/deploy/handlers/handler.go | 2 +- internal/apps/msp/resource/utils/common.go | 15 ++- internal/tools/orchestrator/labels/labels.go | 121 +++++++++++++----- .../executor/plugins/k8s/daemonset.go | 17 +-- .../executor/plugins/k8s/deployment.go | 17 +-- .../scheduler/executor/plugins/k8s/service.go | 15 +-- .../executor/plugins/k8s/statefulset.go | 13 +- .../services/addon/addon_deploy.go | 6 +- 8 files changed, 131 insertions(+), 75 deletions(-) diff --git a/internal/apps/msp/resource/deploy/handlers/handler.go b/internal/apps/msp/resource/deploy/handlers/handler.go index b18426a1b28..262f7fc8e8e 100644 --- a/internal/apps/msp/resource/deploy/handlers/handler.go +++ b/internal/apps/msp/resource/deploy/handlers/handler.go @@ -602,7 +602,7 @@ func (h *DefaultDeployHandler) BuildServiceGroupRequest(resourceInfo *ResourceIn service.Labels = make(map[string]string) } utils.SetlabelsFromOptions(options, service.Labels) - utils.MergeAddonCoreErdaLabels(service.Labels, labels, req) + utils.SetCoreErdaLabels(service.Labels, labels, req) utils.SetAddonErdaLabels(service.Labels, req, resourceInfo.Spec) } diff --git a/internal/apps/msp/resource/utils/common.go b/internal/apps/msp/resource/utils/common.go index 4fd0de8779d..a8d14f88b7a 100644 --- a/internal/apps/msp/resource/utils/common.go +++ b/internal/apps/msp/resource/utils/common.go @@ -110,7 +110,7 @@ func SetlabelsFromOptions(options, labels map[string]string) { } } -// k8s labels +// k8s labels for cluster addons const ( LabelCoreErdaCloudClusterName = "core.erda.cloud/cluster-name" LabelCoreErdaCloudServiceType = "core.erda.cloud/service-type" @@ -131,20 +131,23 @@ var labelMappings = map[string]string{ LabelCoreErdaCloudServiceType: LabelDiceServiceType, } -func MergeAddonCoreErdaLabels(target map[string]string, source map[string]string, req apistructs.ServiceGroupCreateV2Request) { +func SetCoreErdaLabels(target map[string]string, source map[string]string, req apistructs.ServiceGroupCreateV2Request) { + if target == nil || source == nil { + return + } for core, dice := range labelMappings { if v, exist := source[dice]; exist { target[core] = v } } - setCoreErdaLabels(target, req) -} -func setCoreErdaLabels(labels map[string]string, req apistructs.ServiceGroupCreateV2Request) { - labels[LabelCoreErdaCloudClusterName] = req.ClusterName + target[LabelCoreErdaCloudClusterName] = req.ClusterName } func SetAddonErdaLabels(labels map[string]string, req apistructs.ServiceGroupCreateV2Request, spec *apistructs.AddonExtension) { + if labels == nil && spec == nil { + return + } if spec.ShareScopes != nil && len(spec.ShareScopes) > 0 { labels[LabelAddonErdaCloudScope] = spec.ShareScopes[0] } diff --git a/internal/tools/orchestrator/labels/labels.go b/internal/tools/orchestrator/labels/labels.go index 0e3979629c1..86ee0f52e16 100644 --- a/internal/tools/orchestrator/labels/labels.go +++ b/internal/tools/orchestrator/labels/labels.go @@ -16,9 +16,9 @@ package labels import ( "encoding/json" - "github.com/erda-project/erda/apistructs" "github.com/erda-project/erda/internal/tools/orchestrator/dbclient" + "github.com/sirupsen/logrus" ) // k8s labels @@ -36,7 +36,9 @@ const ( LabelCoreErdaCloudServiceType = "core.erda.cloud/service-type" LabelCoreErdaCloudServiceGroupId = "core.erda.cloud/servicegroup-id" - LabelErdaCloudTenantId = "monitor.erda.cloud/tenant-id" + LabelMonitorErdaCloudTenantId = "monitor.erda.cloud/tenant-id" + LabelMonitorErdaCloudEnabled = "monitor.erda.cloud/enabled" + LabelMonitorErdaCloudExporter = "monitor.erda.cloud/exporter" LabelDiceClusterName = "DICE_CLUSTER_NAME" LabelDiceOrgId = "DICE_ORG_ID" @@ -77,51 +79,106 @@ var labelMappings = map[string]string{ LabelCoreErdaCloudServiceType: LabelDiceServiceType, } -func MergeAddonCoreErdaLabels(target map[string]string, source map[string]string, params *apistructs.AddonHandlerCreateItem) { +// AddonLabelSetter Set labels for addon +type AddonLabelSetter struct { + target map[string]string + source map[string]string + instance *dbclient.AddonInstance + params *apistructs.AddonHandlerCreateItem +} + +func NewAddonLabelSetter(target map[string]string, source map[string]string, ins *dbclient.AddonInstance, params *apistructs.AddonHandlerCreateItem) *AddonLabelSetter { + return &AddonLabelSetter{target: target, source: source, instance: ins, params: params} +} + +func (a *AddonLabelSetter) SetCoreErdaLabels() *AddonLabelSetter { + if a.source == nil || a.target == nil { + return a + } for core, dice := range labelMappings { - if v, exist := source[dice]; exist { - target[core] = v + if v, exist := a.source[dice]; exist { + a.target[core] = v } } - if params.TenantId != "" { - target[LabelErdaCloudTenantId] = params.TenantId + return a +} + +func (a *AddonLabelSetter) SetAddonErdaLabels() *AddonLabelSetter { + if a.instance == nil || a.target == nil { + return a } + a.target[LabelAddonErdaCloudId] = a.instance.ID + a.target[LabelAddonErdaCloudScope] = a.instance.ShareScope + a.target[LabelAddonErdaCloudType] = a.instance.AddonName + a.target[LabelAddonErdaCloudVersion] = a.instance.Version + return a +} + +func (a *AddonLabelSetter) SetMonitorErdaCloudLabels() *AddonLabelSetter { + if a.target == nil { + return a + } + if a.params != nil && a.params.TenantId != "" { + a.target[LabelMonitorErdaCloudTenantId] = a.params.TenantId + } + a.target[LabelMonitorErdaCloudEnabled] = "true" + a.target[LabelMonitorErdaCloudExporter] = "true" + return nil +} + +// RuntimeLabelSetter Set labels for runtime +type RuntimeLabelSetter struct { + service *apistructs.Service + sg *apistructs.ServiceGroup + labels map[string]string } -func SetAddonErdaLabels(labels map[string]string, ins *dbclient.AddonInstance) { - labels[LabelAddonErdaCloudId] = ins.ID - labels[LabelAddonErdaCloudScope] = ins.ShareScope - labels[LabelAddonErdaCloudType] = ins.AddonName - labels[LabelAddonErdaCloudVersion] = ins.Version +func NewRuntimeLabelSetter(service *apistructs.Service, sg *apistructs.ServiceGroup, labels map[string]string) *RuntimeLabelSetter { + return &RuntimeLabelSetter{service: service, sg: sg, labels: labels} } -func SetCoreErdaLabels(sg *apistructs.ServiceGroup, service *apistructs.Service, labels map[string]string) error { - if labels == nil { - return nil +func (r *RuntimeLabelSetter) SetMonitorErdaCloudLabels() *RuntimeLabelSetter { + if r.labels == nil { + r.labels = make(map[string]string) } - if service != nil { - for coreLabel, diceLabel := range labelMappings { - if value, exists := service.Labels[diceLabel]; exists { - labels[coreLabel] = value - } + r.labels[LabelMonitorErdaCloudEnabled] = "true" + r.labels[LabelMonitorErdaCloudExporter] = "true" + + if r.service == nil { + return r + } + + if publicHost, exists := r.service.Env[ServiceEnvPublicHost]; exists { + var publicHostMap map[string]string + if err := json.Unmarshal([]byte(publicHost), &publicHostMap); err != nil { + logrus.Errorf("failed to unmarshal public host map for service: %v, err: %v", r.service.Name, err) } - if publicHost, exists := service.Env[ServiceEnvPublicHost]; exists { - var publicHostMap map[string]string - if err := json.Unmarshal([]byte(publicHost), &publicHostMap); err != nil { - return err - } - if terminusKey, exists := publicHostMap[PublicHostTerminusKey]; exists { - labels[LabelErdaCloudTenantId] = terminusKey + if terminusKey, exists := publicHostMap[PublicHostTerminusKey]; exists { + r.labels[LabelMonitorErdaCloudTenantId] = terminusKey + } + } + return r +} + +func (r *RuntimeLabelSetter) SetCoreErdaLabels() *RuntimeLabelSetter { + if r.labels == nil { + r.labels = make(map[string]string) + } + if r.service != nil { + for coreLabel, diceLabel := range labelMappings { + if value, exists := r.service.Labels[diceLabel]; exists { + r.labels[coreLabel] = value } } } - if sgId, exists := labels[LabelServiceGroupId]; exists { - labels[LabelCoreErdaCloudServiceGroupId] = sgId + if sgId, exists := r.labels[LabelServiceGroupId]; exists { + r.labels[LabelCoreErdaCloudServiceGroupId] = sgId } - if sg != nil && sg.ID != "" { - labels[LabelCoreErdaCloudServiceGroupId] = sg.ID + if r.sg != nil && r.sg.ID != "" { + r.labels[LabelCoreErdaCloudServiceGroupId] = r.sg.ID } - return nil + + return r } diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go index 8b125dbeec5..2cdf53fa51e 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/daemonset.go @@ -301,16 +301,13 @@ func (k *Kubernetes) newDaemonSet(service *apistructs.Service, sg *apistructs.Se SetPodAnnotationsBaseContainerEnvs(daemonset.Spec.Template.Spec.Containers[0], daemonset.Spec.Template.Annotations) - err = labels.SetCoreErdaLabels(sg, service, daemonset.Labels) - if err != nil { - logrus.Errorf("daemonset can't set core/erda labels, err: %v", err) - return nil, err - } - err = labels.SetCoreErdaLabels(sg, service, daemonset.Spec.Template.Labels) - if err != nil { - logrus.Errorf("daemonset template can't set core/erda labels, err: %v", err) - return nil, err - } + labels.NewRuntimeLabelSetter(service, sg, daemonset.Labels). + SetCoreErdaLabels(). + SetMonitorErdaCloudLabels() + + labels.NewRuntimeLabelSetter(service, sg, daemonset.Spec.Template.Labels). + SetCoreErdaLabels(). + SetMonitorErdaCloudLabels() secrets, err := k.CopyErdaSecrets("secret", service.Namespace) if err != nil { diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go index e607d68f47d..c1342e5984a 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/deployment.go @@ -663,16 +663,13 @@ func (k *Kubernetes) newDeployment(service *apistructs.Service, serviceGroup *ap SetPodAnnotationsBaseContainerEnvs(deployment.Spec.Template.Spec.Containers[0], deployment.Spec.Template.Annotations) - err = labels.SetCoreErdaLabels(serviceGroup, service, deployment.Labels) - if err != nil { - logrus.Errorf("deployment can't set core/erda labels, err: %v", err) - return nil, err - } - err = labels.SetCoreErdaLabels(serviceGroup, service, deployment.Spec.Template.Labels) - if err != nil { - logrus.Errorf("deployment template can't set core/erda labels, err: %v", err) - return nil, err - } + labels.NewRuntimeLabelSetter(service, serviceGroup, deployment.Labels). + SetCoreErdaLabels(). + SetMonitorErdaCloudLabels() + + labels.NewRuntimeLabelSetter(service, serviceGroup, deployment.Spec.Template.Labels). + SetCoreErdaLabels(). + SetMonitorErdaCloudLabels() // TODO: Delete this logic //Mobil temporary demand: diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go index bed7048c79d..d179be9553d 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service.go @@ -153,11 +153,9 @@ func newService(service *apistructs.Service, selectors map[string]string) *apiv1 } } - err := labels.SetCoreErdaLabels(nil, service, k8sService.Labels) - if err != nil { - logrus.Error(err) - return k8sService - } + labels.NewRuntimeLabelSetter(service, nil, k8sService.Labels). + SetCoreErdaLabels(). + SetMonitorErdaCloudLabels() for i, port := range service.Ports { k8sService.Spec.Ports = append(k8sService.Spec.Ports, apiv1.ServicePort{ @@ -347,10 +345,9 @@ func (k *Kubernetes) UpdateK8sService(k8sService *apiv1.Service, service *apistr setServiceLabelSelector(k8sService, selectors) k8sService.Spec.Ports = newPorts - err := labels.SetCoreErdaLabels(nil, service, k8sService.Labels) - if err != nil { - return fmt.Errorf("can't set erda labels") - } + labels.NewRuntimeLabelSetter(service, nil, k8sService.Labels). + SetCoreErdaLabels(). + SetMonitorErdaCloudLabels() if err := k.PutService(k8sService); err != nil { errMsg := fmt.Sprintf("update service err %v", err) logrus.Error(errMsg) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go index 6cc9e1077ab..56433f50b41 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/statefulset.go @@ -113,13 +113,16 @@ func (k *Kubernetes) createStatefulSet(ctx context.Context, info types.Statefuls }, } - err := labels.SetCoreErdaLabels(info.Sg, service, set.Labels) - if err != nil { - return errors.Errorf("StatefulSet can't set core/erda labels, err: %v", err) - } + labels.NewRuntimeLabelSetter(service, info.Sg, set.Labels). + SetCoreErdaLabels(). + SetMonitorErdaCloudLabels() + + labels.NewRuntimeLabelSetter(service, info.Sg, set.Spec.Template.Labels). + SetCoreErdaLabels(). + SetMonitorErdaCloudLabels() hasHostPath := serviceHasHostpath(service) - err = setPodLabelsFromService(hasHostPath, service.Labels, set.Labels) + err := setPodLabelsFromService(hasHostPath, service.Labels, set.Labels) if err != nil { return errors.Errorf("error in service.Labels: %v for statefulset %v in namesapce %v", err, set.Name, set.Namespace) } diff --git a/internal/tools/orchestrator/services/addon/addon_deploy.go b/internal/tools/orchestrator/services/addon/addon_deploy.go index 26be7afbba3..1d23c525fa9 100644 --- a/internal/tools/orchestrator/services/addon/addon_deploy.go +++ b/internal/tools/orchestrator/services/addon/addon_deploy.go @@ -676,8 +676,10 @@ func (a *Addon) BuildAddonRequestGroup(params *apistructs.AddonHandlerCreateItem } for _, svc := range addonDice.Services { - labels.MergeAddonCoreErdaLabels(svc.Labels, addonDeployGroup.GroupLabels, params) - labels.SetAddonErdaLabels(svc.Labels, addonIns) + labels.NewAddonLabelSetter(svc.Labels, addonDeployGroup.GroupLabels, addonIns, params). + SetCoreErdaLabels(). + SetAddonErdaLabels(). + SetMonitorErdaCloudLabels() } addonDeployGroup.DiceYml = *addonDice From 470db8c29a67f68566e056db27b6d8171acb96c8 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 27 Aug 2024 11:38:19 +0800 Subject: [PATCH 31/32] feat: sort imports --- internal/tools/orchestrator/labels/labels.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/tools/orchestrator/labels/labels.go b/internal/tools/orchestrator/labels/labels.go index 86ee0f52e16..4919a1f62fb 100644 --- a/internal/tools/orchestrator/labels/labels.go +++ b/internal/tools/orchestrator/labels/labels.go @@ -16,9 +16,11 @@ package labels import ( "encoding/json" + + "github.com/sirupsen/logrus" + "github.com/erda-project/erda/apistructs" "github.com/erda-project/erda/internal/tools/orchestrator/dbclient" - "github.com/sirupsen/logrus" ) // k8s labels From f6fb151dc49c850c5fdef9a2dc9669d2b5536eb8 Mon Sep 17 00:00:00 2001 From: CeerDecy <1748788674@qq.com> Date: Tue, 27 Aug 2024 13:25:19 +0800 Subject: [PATCH 32/32] feat: pass test --- .../orchestrator/scheduler/executor/plugins/k8s/service_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go index b65f75f75c6..c0a4c70a9e1 100644 --- a/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go +++ b/internal/tools/orchestrator/scheduler/executor/plugins/k8s/service_test.go @@ -113,6 +113,8 @@ func Test_newService(t *testing.T) { labels.LabelCoreErdaCloudServiceName: "fake-server", labels.LabelCoreErdaCloudServiceType: "STATELESS", labels.LabelCoreErdaCloudWorkSpace: "test", + labels.LabelMonitorErdaCloudExporter: "true", + labels.LabelMonitorErdaCloudEnabled: "true", }, }, Spec: v1.ServiceSpec{