From b7f0ce44f22ce3289c7fb406ede3ecb93e4a3817 Mon Sep 17 00:00:00 2001 From: hongming Date: Wed, 31 Mar 2021 14:59:54 +0800 Subject: [PATCH] Fix owner reference conflict Signed-off-by: hongming --- .../namespace/namespace_controller.go | 20 ++++++++++++------- .../workspace/workspace_controller.go | 6 ++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/pkg/controller/namespace/namespace_controller.go b/pkg/controller/namespace/namespace_controller.go index 0971fe128..ecbdd3771 100644 --- a/pkg/controller/namespace/namespace_controller.go +++ b/pkg/controller/namespace/namespace_controller.go @@ -133,13 +133,19 @@ func (r *Reconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { // Bind to workspace if the namespace created by kubesphere _, hasWorkspaceLabel := namespace.Labels[tenantv1alpha1.WorkspaceLabel] - if hasWorkspaceLabel { - if err := r.bindWorkspace(rootCtx, logger, namespace); err != nil { - return ctrl.Result{}, err - } - } else { - if err := r.unbindWorkspace(rootCtx, logger, namespace); err != nil { - return ctrl.Result{}, err + // if the namespace doesn't have a label like kubefed.io/managed: "true" (single cluster environment) + // or it has a label like kubefed.io/managed: "false"(multi-cluster environment), we set the owner reference filed. + // Otherwise, kubefed controller will remove owner reference. + kubefedManaged := namespace.Labels[constants.KubefedManagedLabel] == "true" + if !kubefedManaged { + if hasWorkspaceLabel { + if err := r.bindWorkspace(rootCtx, logger, namespace); err != nil { + return ctrl.Result{}, err + } + } else { + if err := r.unbindWorkspace(rootCtx, logger, namespace); err != nil { + return ctrl.Result{}, err + } } } // Initialize roles for devops/project namespaces if created by kubesphere diff --git a/pkg/controller/workspace/workspace_controller.go b/pkg/controller/workspace/workspace_controller.go index 2b5bad3b2..8051ec894 100644 --- a/pkg/controller/workspace/workspace_controller.go +++ b/pkg/controller/workspace/workspace_controller.go @@ -126,6 +126,12 @@ func (r *Reconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { return ctrl.Result{}, err } else { for _, namespace := range namespaces.Items { + // managed by kubefed-controller-manager + kubefedManaged := namespace.Labels[constants.KubefedManagedLabel] == "true" + if kubefedManaged { + continue + } + // managed by workspace if err := r.bindWorkspace(rootCtx, logger, &namespace, workspace); err != nil { return ctrl.Result{}, err }