remove work label on the member cluster resource

Signed-off-by: changzhen <changzhen5@huawei.com>
This commit is contained in:
changzhen 2024-03-28 11:19:11 +08:00
parent ff7322acf2
commit 0e60af8ee2
7 changed files with 44 additions and 45 deletions

View File

@ -25,7 +25,6 @@ import (
configv1alpha1 "github.com/karmada-io/karmada/pkg/apis/config/v1alpha1" configv1alpha1 "github.com/karmada-io/karmada/pkg/apis/config/v1alpha1"
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1" policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
workv1alpha1 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha1"
workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2" workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2"
"github.com/karmada-io/karmada/pkg/resourceinterpreter" "github.com/karmada-io/karmada/pkg/resourceinterpreter"
"github.com/karmada-io/karmada/pkg/util" "github.com/karmada-io/karmada/pkg/util"
@ -109,7 +108,7 @@ func ensureWork(
klog.Errorf("Failed to apply overrides for %s/%s/%s, err is: %v", clonedWorkload.GetKind(), clonedWorkload.GetNamespace(), clonedWorkload.GetName(), err) klog.Errorf("Failed to apply overrides for %s/%s/%s, err is: %v", clonedWorkload.GetKind(), clonedWorkload.GetNamespace(), clonedWorkload.GetName(), err)
return err return err
} }
workLabel := mergeLabel(clonedWorkload, workNamespace, binding, scope) workLabel := mergeLabel(clonedWorkload, binding, scope)
annotations := mergeAnnotations(clonedWorkload, workNamespace, binding, scope) annotations := mergeAnnotations(clonedWorkload, workNamespace, binding, scope)
annotations = mergeConflictResolution(clonedWorkload, conflictResolutionInBinding, annotations) annotations = mergeConflictResolution(clonedWorkload, conflictResolutionInBinding, annotations)
@ -153,10 +152,8 @@ func mergeTargetClusters(targetClusters []workv1alpha2.TargetCluster, requiredBy
return targetClusters return targetClusters
} }
func mergeLabel(workload *unstructured.Unstructured, workNamespace string, binding metav1.Object, scope apiextensionsv1.ResourceScope) map[string]string { func mergeLabel(workload *unstructured.Unstructured, binding metav1.Object, scope apiextensionsv1.ResourceScope) map[string]string {
var workLabel = make(map[string]string) var workLabel = make(map[string]string)
util.MergeLabel(workload, workv1alpha1.WorkNamespaceLabel, workNamespace)
util.MergeLabel(workload, workv1alpha1.WorkNameLabel, names.GenerateWorkName(workload.GetKind(), workload.GetName(), workload.GetNamespace()))
util.MergeLabel(workload, util.ManagedByKarmadaLabel, util.ManagedByKarmadaLabelValue) util.MergeLabel(workload, util.ManagedByKarmadaLabel, util.ManagedByKarmadaLabelValue)
if scope == apiextensionsv1.NamespaceScoped { if scope == apiextensionsv1.NamespaceScoped {
bindingID := util.GetLabelValue(binding.GetLabels(), workv1alpha2.ResourceBindingPermanentIDLabel) bindingID := util.GetLabelValue(binding.GetLabels(), workv1alpha2.ResourceBindingPermanentIDLabel)

View File

@ -108,7 +108,6 @@ func Test_mergeLabel(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
workload *unstructured.Unstructured workload *unstructured.Unstructured
workNamespace string
binding metav1.Object binding metav1.Object
scope v1.ResourceScope scope v1.ResourceScope
want map[string]string want map[string]string
@ -125,7 +124,6 @@ func Test_mergeLabel(t *testing.T) {
}, },
}, },
}, },
workNamespace: namespace,
binding: &workv1alpha2.ClusterResourceBinding{ binding: &workv1alpha2.ClusterResourceBinding{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: bindingName, Name: bindingName,
@ -169,7 +167,7 @@ func Test_mergeLabel(t *testing.T) {
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
if got := mergeLabel(tt.workload, tt.workNamespace, tt.binding, tt.scope); !reflect.DeepEqual(got, tt.want) { if got := mergeLabel(tt.workload, tt.binding, tt.scope); !reflect.DeepEqual(got, tt.want) {
t.Errorf("mergeLabel() = %v, want %v", got, tt.want) t.Errorf("mergeLabel() = %v, want %v", got, tt.want)
} }
}) })

View File

@ -170,7 +170,7 @@ func (c *Controller) tryDeleteWorkload(clusterName string, work *workv1alpha1.Wo
} }
// Avoid deleting resources that not managed by karmada. // Avoid deleting resources that not managed by karmada.
if util.GetLabelValue(clusterObj.GetLabels(), workv1alpha1.WorkNameLabel) != util.GetLabelValue(workload.GetLabels(), workv1alpha1.WorkNameLabel) { if util.GetLabelValue(clusterObj.GetLabels(), util.ManagedByKarmadaLabel) != util.ManagedByKarmadaLabelValue {
klog.Infof("Abort deleting the resource(kind=%s, %s/%s) exists in cluster %v but not managed by karmada", clusterObj.GetKind(), clusterObj.GetNamespace(), clusterObj.GetName(), clusterName) klog.Infof("Abort deleting the resource(kind=%s, %s/%s) exists in cluster %v but not managed by karmada", clusterObj.GetKind(), clusterObj.GetNamespace(), clusterObj.GetName(), clusterName)
return nil return nil
} }

View File

@ -37,6 +37,7 @@ import (
clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1" clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1"
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1" policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
workv1alpha1 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha1" workv1alpha1 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha1"
workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2"
"github.com/karmada-io/karmada/pkg/events" "github.com/karmada-io/karmada/pkg/events"
"github.com/karmada-io/karmada/pkg/util" "github.com/karmada-io/karmada/pkg/util"
"github.com/karmada-io/karmada/pkg/util/helper" "github.com/karmada-io/karmada/pkg/util/helper"
@ -168,10 +169,12 @@ func (c *SyncController) buildWorks(quota *policyv1alpha1.FederatedResourceQuota
resourceQuota.Namespace = quota.Namespace resourceQuota.Namespace = quota.Namespace
resourceQuota.Name = quota.Name resourceQuota.Name = quota.Name
resourceQuota.Labels = map[string]string{ resourceQuota.Labels = map[string]string{
workv1alpha1.WorkNamespaceLabel: workNamespace,
workv1alpha1.WorkNameLabel: workName,
util.ManagedByKarmadaLabel: util.ManagedByKarmadaLabelValue, util.ManagedByKarmadaLabel: util.ManagedByKarmadaLabelValue,
} }
resourceQuota.Annotations = map[string]string{
workv1alpha2.WorkNamespaceAnnotation: workNamespace,
workv1alpha2.WorkNameAnnotation: workName,
}
resourceQuota.Spec.Hard = extractClusterHardResourceList(quota.Spec, cluster.Name) resourceQuota.Spec.Hard = extractClusterHardResourceList(quota.Spec, cluster.Name)
resourceQuotaObj, err := helper.ToUnstructured(resourceQuota) resourceQuotaObj, err := helper.ToUnstructured(resourceQuota)

View File

@ -39,6 +39,7 @@ import (
clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1" clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1"
workv1alpha1 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha1" workv1alpha1 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha1"
workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2"
"github.com/karmada-io/karmada/pkg/events" "github.com/karmada-io/karmada/pkg/events"
"github.com/karmada-io/karmada/pkg/resourceinterpreter" "github.com/karmada-io/karmada/pkg/resourceinterpreter"
"github.com/karmada-io/karmada/pkg/sharedcli/ratelimiterflag" "github.com/karmada-io/karmada/pkg/sharedcli/ratelimiterflag"
@ -165,8 +166,8 @@ func generateKey(obj interface{}) (util.QueueKey, error) {
// getClusterNameFromLabel gets cluster name from ownerLabel, if label not exist, means resource is not created by karmada. // getClusterNameFromLabel gets cluster name from ownerLabel, if label not exist, means resource is not created by karmada.
func getClusterNameFromLabel(resource *unstructured.Unstructured) (string, error) { func getClusterNameFromLabel(resource *unstructured.Unstructured) (string, error) {
workNamespace := util.GetLabelValue(resource.GetLabels(), workv1alpha1.WorkNamespaceLabel) workNamespace, exist := resource.GetAnnotations()[workv1alpha2.WorkNamespaceAnnotation]
if len(workNamespace) == 0 { if !exist {
klog.V(4).Infof("Ignore resource(%s/%s/%s) which not managed by karmada", resource.GetKind(), resource.GetNamespace(), resource.GetName()) klog.V(4).Infof("Ignore resource(%s/%s/%s) which not managed by karmada", resource.GetKind(), resource.GetNamespace(), resource.GetName())
return "", nil return "", nil
} }
@ -195,9 +196,9 @@ func (c *WorkStatusController) syncWorkStatus(key util.QueueKey) error {
return err return err
} }
workNamespace := util.GetLabelValue(observedObj.GetLabels(), workv1alpha1.WorkNamespaceLabel) workNamespace, nsExist := observedObj.GetAnnotations()[workv1alpha2.WorkNamespaceAnnotation]
workName := util.GetLabelValue(observedObj.GetLabels(), workv1alpha1.WorkNameLabel) workName, nameExist := observedObj.GetAnnotations()[workv1alpha2.WorkNameAnnotation]
if len(workNamespace) == 0 || len(workName) == 0 { if !nsExist || !nameExist {
klog.Infof("Ignore object(%s) which not managed by karmada.", fedKey.String()) klog.Infof("Ignore object(%s) which not managed by karmada.", fedKey.String())
return nil return nil
} }

View File

@ -40,6 +40,7 @@ import (
clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1" clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1"
workv1alpha1 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha1" workv1alpha1 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha1"
workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2"
"github.com/karmada-io/karmada/pkg/resourceinterpreter" "github.com/karmada-io/karmada/pkg/resourceinterpreter"
"github.com/karmada-io/karmada/pkg/sharedcli/ratelimiterflag" "github.com/karmada-io/karmada/pkg/sharedcli/ratelimiterflag"
"github.com/karmada-io/karmada/pkg/util" "github.com/karmada-io/karmada/pkg/util"
@ -371,8 +372,8 @@ func TestGenerateKey(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "test", "name": "test",
"namespace": "default", "namespace": "default",
"labels": map[string]interface{}{ "annotations": map[string]interface{}{
workv1alpha1.WorkNamespaceLabel: "karmada-es-cluster", workv1alpha2.WorkNamespaceAnnotation: "karmada-es-cluster",
}, },
}, },
}, },
@ -389,8 +390,8 @@ func TestGenerateKey(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "test", "name": "test",
"namespace": "default", "namespace": "default",
"labels": map[string]interface{}{ "annotations": map[string]interface{}{
workv1alpha1.WorkNamespaceLabel: "karmada-cluster", workv1alpha2.WorkNamespaceAnnotation: "karmada-cluster",
}, },
}, },
}, },
@ -452,8 +453,8 @@ func TestGetClusterNameFromLabel(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "test", "name": "test",
"namespace": "default", "namespace": "default",
"labels": map[string]interface{}{ "annotations": map[string]interface{}{
workv1alpha1.WorkNamespaceLabel: "karmada-es-cluster", workv1alpha2.WorkNamespaceAnnotation: "karmada-es-cluster",
}, },
}, },
}, },
@ -488,8 +489,8 @@ func TestGetClusterNameFromLabel(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "test", "name": "test",
"namespace": "default", "namespace": "default",
"labels": map[string]interface{}{ "annotations": map[string]interface{}{
workv1alpha1.WorkNamespaceLabel: "karmada-cluster", workv1alpha2.WorkNamespaceAnnotation: "karmada-cluster",
}, },
}, },
}, },
@ -520,9 +521,9 @@ func newPodObj(namespace string) *unstructured.Unstructured {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "pod", "name": "pod",
"namespace": "default", "namespace": "default",
"labels": map[string]interface{}{ "annotations": map[string]interface{}{
workv1alpha1.WorkNamespaceLabel: namespace, workv1alpha2.WorkNamespaceAnnotation: namespace,
workv1alpha1.WorkNameLabel: "work-name", workv1alpha2.WorkNameAnnotation: "work-name",
}, },
}, },
}, },
@ -530,16 +531,16 @@ func newPodObj(namespace string) *unstructured.Unstructured {
return obj return obj
} }
func newPod(workNs, workName string, wrongLabel ...bool) *corev1.Pod { func newPod(workNs, workName string, wrongAnnotations ...bool) *corev1.Pod {
var pod *corev1.Pod var pod *corev1.Pod
if len(wrongLabel) > 0 && wrongLabel[0] == true { if len(wrongAnnotations) > 0 && wrongAnnotations[0] == true {
pod = &corev1.Pod{ pod = &corev1.Pod{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "pod", Name: "pod",
Namespace: "default", Namespace: "default",
Labels: map[string]string{ Annotations: map[string]string{
"test": workNs, "test": workNs,
workv1alpha1.WorkNameLabel: workName, workv1alpha2.WorkNameAnnotation: workName,
}, },
}, },
} }
@ -548,9 +549,9 @@ func newPod(workNs, workName string, wrongLabel ...bool) *corev1.Pod {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "pod", Name: "pod",
Namespace: "default", Namespace: "default",
Labels: map[string]string{ Annotations: map[string]string{
workv1alpha1.WorkNamespaceLabel: workNs, workv1alpha2.WorkNamespaceAnnotation: workNs,
workv1alpha1.WorkNameLabel: workName, workv1alpha2.WorkNameAnnotation: workName,
}, },
}, },
} }
@ -850,8 +851,8 @@ func TestWorkStatusController_recreateResourceIfNeeded(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "pod1", "name": "pod1",
"namespace": "default", "namespace": "default",
"labels": map[string]interface{}{ "annotations": map[string]interface{}{
workv1alpha1.WorkNamespaceLabel: "karmada-es-cluster", workv1alpha2.WorkNamespaceAnnotation: "karmada-es-cluster",
}, },
}, },
}, },

View File

@ -29,7 +29,6 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client"
configv1alpha1 "github.com/karmada-io/karmada/pkg/apis/config/v1alpha1" configv1alpha1 "github.com/karmada-io/karmada/pkg/apis/config/v1alpha1"
workv1alpha1 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha1"
workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2" workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2"
"github.com/karmada-io/karmada/pkg/resourceinterpreter" "github.com/karmada-io/karmada/pkg/resourceinterpreter"
"github.com/karmada-io/karmada/pkg/util" "github.com/karmada-io/karmada/pkg/util"
@ -283,7 +282,7 @@ func (o *objectWatcherImpl) NeedsUpdate(clusterName string, desiredObj, clusterO
func (o *objectWatcherImpl) allowUpdate(clusterName string, desiredObj, clusterObj *unstructured.Unstructured) bool { func (o *objectWatcherImpl) allowUpdate(clusterName string, desiredObj, clusterObj *unstructured.Unstructured) bool {
// If the existing resource is managed by Karmada, then the updating is allowed. // If the existing resource is managed by Karmada, then the updating is allowed.
if util.GetLabelValue(desiredObj.GetLabels(), workv1alpha1.WorkNameLabel) == util.GetLabelValue(clusterObj.GetLabels(), workv1alpha1.WorkNameLabel) { if util.GetLabelValue(clusterObj.GetLabels(), util.ManagedByKarmadaLabel) == util.ManagedByKarmadaLabelValue {
return true return true
} }