Deprecate create by label from manifests (#191)

Signed-off-by: RainbowMango <renhongcai@huawei.com>
This commit is contained in:
Hongcai Ren 2021-03-06 09:28:01 +08:00 committed by GitHub
parent 7a8eca1bfb
commit 288d24c7b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 48 deletions

View File

@ -203,6 +203,18 @@ func (c *PropagationBindingController) ensureWork(workload *unstructured.Unstruc
return err
}
workNamespace, err := names.GenerateExecutionSpaceName(clusterName)
if err != nil {
klog.Errorf("Failed to ensure Work for cluster: %s. Error: %v.", clusterName, err)
return err
}
workName := binding.Name
util.MergeLabel(clonedWorkload, util.ResourceBindingNamespaceLabel, binding.Namespace)
util.MergeLabel(clonedWorkload, util.ResourceBindingNameLabel, binding.Name)
util.MergeLabel(clonedWorkload, util.WorkNamespaceLabel, workNamespace)
util.MergeLabel(clonedWorkload, util.WorkNameLabel, workName)
workloadJSON, err := clonedWorkload.MarshalJSON()
if err != nil {
klog.Errorf("Failed to marshal workload, kind: %s, namespace: %s, name: %s. Error: %v",
@ -210,16 +222,10 @@ func (c *PropagationBindingController) ensureWork(workload *unstructured.Unstruc
return err
}
executionSpace, err := names.GenerateExecutionSpaceName(clusterName)
if err != nil {
klog.Errorf("Failed to ensure Work for cluster: %s. Error: %v.", clusterName, err)
return err
}
work := &v1alpha1.Work{
ObjectMeta: metav1.ObjectMeta{
Name: binding.Name,
Namespace: executionSpace,
Name: workName,
Namespace: workNamespace,
Finalizers: []string{util.ExecutionControllerFinalizer},
OwnerReferences: []metav1.OwnerReference{
*metav1.NewControllerRef(binding, controllerKind),

View File

@ -180,8 +180,6 @@ func (c *Controller) syncToClusters(cluster *v1alpha1.Cluster, work *policyv1alp
return err
}
util.MergeLabel(workload, util.OwnerLabel, names.GenerateOwnerLabelValue(work.GetNamespace(), work.GetName()))
applied := c.isResourceApplied(&work.Status)
if applied {
// todo: get clusterObj from cache

View File

@ -116,28 +116,22 @@ func (c *WorkStatusController) syncWorkStatus(key util.QueueKey) error {
klog.V(2).Infof("Ignore the event key %s which not managed by karmada.", key)
return nil
}
owner := util.GetLabelValue(obj.GetLabels(), util.OwnerLabel)
if len(owner) == 0 {
// Ignore the object which not managed by karmada.
// TODO(RainbowMango): Consider to add event filter to informer event handler to skip event from enqueue.
klog.V(2).Infof("Ignore the event of %s(%s/%s) which not managed by karmada.", obj.GetKind(), obj.GetNamespace(), obj.GetName())
workNamespace := util.GetLabelValue(obj.GetLabels(), util.WorkNamespaceLabel)
workName := util.GetLabelValue(obj.GetLabels(), util.WorkNameLabel)
if len(workNamespace) == 0 || len(workName) == 0 {
klog.Infof("Ignore object(%s) which not managed by karmada.", keyStr)
return nil
}
ownerNamespace, ownerName, err := names.GetNamespaceAndName(owner)
if err != nil {
klog.Errorf("Failed to parse object(%s/%s) owner by label: %s", obj.GetNamespace(), obj.GetName(), owner)
return err
}
workObject := &v1alpha1.Work{}
if err := c.Client.Get(context.TODO(), client.ObjectKey{Namespace: ownerNamespace, Name: ownerName}, workObject); err != nil {
if err := c.Client.Get(context.TODO(), client.ObjectKey{Namespace: workNamespace, Name: workName}, workObject); err != nil {
// Stop processing if resource no longer exist.
if errors.IsNotFound(err) {
return nil
}
klog.Errorf("Failed to get Work(%s/%s) from cache: %v", ownerNamespace, ownerName, err)
klog.Errorf("Failed to get Work(%s/%s) from cache: %v", workNamespace, workName, err)
return err
}
@ -147,9 +141,7 @@ func (c *WorkStatusController) syncWorkStatus(key util.QueueKey) error {
return err
}
util.MergeLabel(desireObj, util.OwnerLabel, names.GenerateOwnerLabelValue(workObject.GetNamespace(), workObject.GetName()))
clusterName, err := names.GetClusterName(ownerNamespace)
clusterName, err := names.GetClusterName(workNamespace)
if err != nil {
klog.Errorf("Failed to get member cluster name: %v", err)
return err
@ -165,7 +157,7 @@ func (c *WorkStatusController) syncWorkStatus(key util.QueueKey) error {
return c.ObjectWatcher.Update(clusterName, desireObj, obj)
}
klog.Infof("reflecting %s(%s/%s) status of to Work(%s/%s)", obj.GetKind(), obj.GetNamespace(), obj.GetName(), ownerNamespace, ownerName)
klog.Infof("reflecting %s(%s/%s) status to Work(%s/%s)", obj.GetKind(), obj.GetNamespace(), obj.GetName(), workNamespace, workName)
return c.reflectStatus(workObject, obj)
}
@ -213,9 +205,6 @@ func (c *WorkStatusController) recreateResourceIfNeeded(work *v1alpha1.Work, clu
if reflect.DeepEqual(desiredGVK, clusterWorkload.GVK) &&
manifest.GetNamespace() == clusterWorkload.Namespace &&
manifest.GetName() == clusterWorkload.Name {
util.MergeLabel(manifest, util.OwnerLabel, names.GenerateOwnerLabelValue(work.GetNamespace(), work.GetName()))
klog.Infof("recreating %s/%s/%s in member cluster %s", clusterWorkload.GVK.Kind, clusterWorkload.Namespace, clusterWorkload.Name, clusterWorkload.Cluster)
return c.ObjectWatcher.Create(clusterWorkload.Cluster, manifest)
}

View File

@ -19,6 +19,12 @@ const (
// ClusterResourceBindingLabel is added to objects to specify associated ClusterResourceBinding.
ClusterResourceBindingLabel = "clusterresourcebinding.karmada.io/name"
// WorkNamespaceLabel is added to objects to specify associated Work's namespace.
WorkNamespaceLabel = "work.karmada.io/namespace"
// WorkNameLabel is added to objects to specify associated Work's name.
WorkNameLabel = "work.karmada.io/name"
// OwnerLabel will set in karmada CRDs, indicates that who created it.
// We can use labelSelector to find who created it quickly.
// example1: set it in propagationBinding, the label value is propagationPolicy.

View File

@ -106,26 +106,14 @@ func GenerateKey(obj interface{}) (QueueKey, error) {
// getClusterNameFromLabel gets cluster name from ownerLabel, if label not exist, means resource is not created by karmada.
func getClusterNameFromLabel(resource *unstructured.Unstructured) (string, error) {
workloadLabels := resource.GetLabels()
if workloadLabels == nil {
klog.V(2).Infof("Resource %s/%s/%s is not created by karmada.", resource.GetKind(),
resource.GetNamespace(), resource.GetName())
return "", nil
workNamespace := GetLabelValue(resource.GetLabels(), WorkNamespaceLabel)
if len(workNamespace) == 0 {
klog.Infof("Resource(%s/%s/%s) not created by karmada", resource.GetKind(), resource.GetNamespace(), resource.GetName())
}
value, exist := workloadLabels[OwnerLabel]
if !exist {
klog.V(2).Infof("Resource %s/%s/%s is not created by karmada.", resource.GetKind(),
resource.GetNamespace(), resource.GetName())
return "", nil
}
executionNamespace, _, err := names.GetNamespaceAndName(value)
cluster, err := names.GetClusterName(workNamespace)
if err != nil {
klog.Errorf("Failed to get executionNamespace from label %s", value)
return "", err
}
cluster, err := names.GetClusterName(executionNamespace)
if err != nil {
klog.Errorf("Failed to get member cluster name by %s. Error: %v.", value, err)
klog.Errorf("Failed to get cluster name from work namespace: %s, error: %v.", workNamespace, err)
return "", err
}
return cluster, nil