Skip to content

Commit 0fdcff7

Browse files
committed
implement MCP namespace
1 parent b65fc52 commit 0fdcff7

File tree

6 files changed

+143
-41
lines changed

6 files changed

+143
-41
lines changed

api/clusters/v1alpha1/constants/reasons.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ const (
1111
ReasonConfigurationProblem = "ConfigurationProblem"
1212
// ReasonInternalError indicates that something went wrong internally.
1313
ReasonInternalError = "InternalError"
14+
// ReasonWaitingForNamespaceDeletion indicates that something is waiting for a namespace to be deleted.
15+
ReasonWaitingForNamespaceDeletion = "WaitingForNamespaceDeletion"
1416
// ReasonWaitingForClusterRequest indicates that something is waiting for a ClusterRequest to become ready.
1517
ReasonWaitingForClusterRequest = "WaitingForClusterRequest"
1618
// ReasonWaitingForClusterRequestDeletion indicates that something is waiting for a ClusterRequest to be deleted.

api/core/v2alpha1/constants.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ const (
66
)
77

88
const (
9-
MCPLabel = GroupName + "/mcp"
9+
MCPNameLabel = GroupName + "/mcp-name"
10+
MCPNamespaceLabel = GroupName + "/mcp-namespace"
1011
OIDCProviderLabel = GroupName + "/oidc-provider"
1112

12-
MCPFinalizer = MCPLabel
13+
MCPFinalizer = GroupName + "/mcp"
1314

1415
// ServiceDependencyFinalizerPrefix is the prefix for the dependency finalizers that are added to MCP resources by associated services.
1516
ServiceDependencyFinalizerPrefix = "services.openmcp.cloud/"

internal/controllers/managedcontrolplane/access.go

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,18 @@ import (
2121
commonapi "github.com/openmcp-project/openmcp-operator/api/common"
2222
apiconst "github.com/openmcp-project/openmcp-operator/api/constants"
2323
corev2alpha1 "github.com/openmcp-project/openmcp-operator/api/core/v2alpha1"
24-
libutils "github.com/openmcp-project/openmcp-operator/lib/utils"
2524
)
2625

2726
// manageAccessRequests aligns the existing AccessRequests for the MCP with the currently configured OIDC providers.
2827
// It uses the given createCon function to create conditions for AccessRequests and returns a set of conditions that should be removed from the MCP status.
2928
// The bool return value specifies whether everything related to MCP access is in the desired state or not. If 'false', it is recommended to requeue the MCP.
30-
func (r *ManagedControlPlaneReconciler) manageAccessRequests(ctx context.Context, mcp *corev2alpha1.ManagedControlPlaneV2, cr *clustersv1alpha1.ClusterRequest, createCon func(conType string, status metav1.ConditionStatus, reason, message string)) (bool, sets.Set[string], errutils.ReasonableError) {
31-
updatedAccessRequests, rerr := r.createOrUpdateDesiredAccessRequests(ctx, mcp, cr, createCon)
29+
func (r *ManagedControlPlaneReconciler) manageAccessRequests(ctx context.Context, mcp *corev2alpha1.ManagedControlPlaneV2, platformNamespace string, cr *clustersv1alpha1.ClusterRequest, createCon func(conType string, status metav1.ConditionStatus, reason, message string)) (bool, sets.Set[string], errutils.ReasonableError) {
30+
updatedAccessRequests, rerr := r.createOrUpdateDesiredAccessRequests(ctx, mcp, platformNamespace, cr, createCon)
3231
if rerr != nil {
3332
return false, nil, rerr
3433
}
3534

36-
accessRequestsInDeletion, rerr := r.deleteUndesiredAccessRequests(ctx, mcp, updatedAccessRequests, createCon)
35+
accessRequestsInDeletion, rerr := r.deleteUndesiredAccessRequests(ctx, mcp, platformNamespace, updatedAccessRequests, createCon)
3736
if rerr != nil {
3837
return false, nil, rerr
3938
}
@@ -82,10 +81,9 @@ func (r *ManagedControlPlaneReconciler) manageAccessRequests(ctx context.Context
8281
// createOrUpdateDesiredAccessRequests creates/updates all AccessRequests that are desired according to the ManagedControlPlane's configured OIDC providers.
8382
// It returns a mapping from OIDC provider names to the corresponding AccessRequests.
8483
// If the ManagedControlPlane has a non-zero DeletionTimestamp, no AccessRequests will be created or updated and the returned map will be empty.
85-
func (r *ManagedControlPlaneReconciler) createOrUpdateDesiredAccessRequests(ctx context.Context, mcp *corev2alpha1.ManagedControlPlaneV2, cr *clustersv1alpha1.ClusterRequest, createCon func(conType string, status metav1.ConditionStatus, reason, message string)) (map[string]*clustersv1alpha1.AccessRequest, errutils.ReasonableError) {
84+
func (r *ManagedControlPlaneReconciler) createOrUpdateDesiredAccessRequests(ctx context.Context, mcp *corev2alpha1.ManagedControlPlaneV2, platformNamespace string, cr *clustersv1alpha1.ClusterRequest, createCon func(conType string, status metav1.ConditionStatus, reason, message string)) (map[string]*clustersv1alpha1.AccessRequest, errutils.ReasonableError) {
8685
log := logging.FromContextOrPanic(ctx)
8786

88-
namespace := libutils.StableRequestNamespace(mcp.Namespace)
8987
updatedAccessRequests := map[string]*clustersv1alpha1.AccessRequest{}
9088
var oidcProviders []*commonapi.OIDCProviderConfig
9189

@@ -104,10 +102,10 @@ func (r *ManagedControlPlaneReconciler) createOrUpdateDesiredAccessRequests(ctx
104102

105103
for _, oidc := range oidcProviders {
106104
log.Debug("Creating/updating AccessRequest for OIDC provider", "oidcProviderName", oidc.Name)
107-
arName := ctrlutils.K8sNameHash(mcp.Name, oidc.Name)
105+
arName := ctrlutils.K8sNameUUIDUnsafe(mcp.Name, oidc.Name)
108106
ar := &clustersv1alpha1.AccessRequest{}
109107
ar.Name = arName
110-
ar.Namespace = namespace
108+
ar.Namespace = platformNamespace
111109
if _, err := controllerutil.CreateOrUpdate(ctx, r.PlatformCluster.Client(), ar, func() error {
112110
ar.Spec.RequestRef = &commonapi.ObjectReference{
113111
Name: cr.Name,
@@ -119,7 +117,8 @@ func (r *ManagedControlPlaneReconciler) createOrUpdateDesiredAccessRequests(ctx
119117
if ar.Labels == nil {
120118
ar.Labels = map[string]string{}
121119
}
122-
ar.Labels[corev2alpha1.MCPLabel] = mcp.Name
120+
ar.Labels[corev2alpha1.MCPNameLabel] = mcp.Name
121+
ar.Labels[corev2alpha1.MCPNamespaceLabel] = mcp.Namespace
123122
ar.Labels[apiconst.ManagedByLabel] = ControllerName
124123
ar.Labels[corev2alpha1.OIDCProviderLabel] = oidc.Name
125124

@@ -139,17 +138,17 @@ func (r *ManagedControlPlaneReconciler) createOrUpdateDesiredAccessRequests(ctx
139138
// deleteUndesiredAccessRequests deletes all AccessRequests that belong to the given ManagedControlPlane, but are not in the updatedAccessRequests map.
140139
// These are AccessRequests that have been created for a previous version of the ManagedControlPlane and are not needed anymore.
141140
// It returns a set of OIDC provider names for which the AccessRequests are still in deletion. If the set is empty, all undesired AccessRequests have been deleted.
142-
func (r *ManagedControlPlaneReconciler) deleteUndesiredAccessRequests(ctx context.Context, mcp *corev2alpha1.ManagedControlPlaneV2, updatedAccessRequests map[string]*clustersv1alpha1.AccessRequest, createCon func(conType string, status metav1.ConditionStatus, reason, message string)) (sets.Set[string], errutils.ReasonableError) {
141+
func (r *ManagedControlPlaneReconciler) deleteUndesiredAccessRequests(ctx context.Context, mcp *corev2alpha1.ManagedControlPlaneV2, platformNamespace string, updatedAccessRequests map[string]*clustersv1alpha1.AccessRequest, createCon func(conType string, status metav1.ConditionStatus, reason, message string)) (sets.Set[string], errutils.ReasonableError) {
143142
log := logging.FromContextOrPanic(ctx)
144143

145-
namespace := libutils.StableRequestNamespace(mcp.Namespace)
146144
accessRequestsInDeletion := sets.New[string]()
147145

148146
// delete all AccessRequests that have previously been created for this ManagedControlPlane but are not needed anymore
149147
oidcARs := &clustersv1alpha1.AccessRequestList{}
150-
if err := r.PlatformCluster.Client().List(ctx, oidcARs, client.InNamespace(namespace), client.HasLabels{corev2alpha1.OIDCProviderLabel}, client.MatchingLabels{
151-
corev2alpha1.MCPLabel: mcp.Name,
152-
apiconst.ManagedByLabel: ControllerName,
148+
if err := r.PlatformCluster.Client().List(ctx, oidcARs, client.InNamespace(platformNamespace), client.HasLabels{corev2alpha1.OIDCProviderLabel}, client.MatchingLabels{
149+
corev2alpha1.MCPNameLabel: mcp.Name,
150+
corev2alpha1.MCPNamespaceLabel: mcp.Namespace,
151+
apiconst.ManagedByLabel: ControllerName,
153152
}); err != nil {
154153
rerr := errutils.WithReason(fmt.Errorf("error listing AccessRequests for ManagedControlPlane '%s/%s': %w", mcp.Namespace, mcp.Name, err), cconst.ReasonPlatformClusterInteractionProblem)
155154
createCon(corev2alpha1.ConditionAllAccessReady, metav1.ConditionFalse, rerr.Reason(), rerr.Error())
@@ -197,8 +196,9 @@ func (r *ManagedControlPlaneReconciler) deleteUndesiredAccessSecrets(ctx context
197196
// delete all AccessRequest secrets that have been copied to the Onboarding cluster and belong to AccessRequests that are no longer needed
198197
mcpSecrets := &corev1.SecretList{}
199198
if err := r.OnboardingCluster.Client().List(ctx, mcpSecrets, client.InNamespace(mcp.Namespace), client.HasLabels{corev2alpha1.OIDCProviderLabel}, client.MatchingLabels{
200-
corev2alpha1.MCPLabel: mcp.Name,
201-
apiconst.ManagedByLabel: ControllerName,
199+
corev2alpha1.MCPNameLabel: mcp.Name,
200+
corev2alpha1.MCPNamespaceLabel: mcp.Namespace,
201+
apiconst.ManagedByLabel: ControllerName,
202202
}); err != nil {
203203
rerr := errutils.WithReason(fmt.Errorf("error listing secrets for ManagedControlPlane '%s/%s': %w", mcp.Namespace, mcp.Name, err), cconst.ReasonOnboardingClusterInteractionProblem)
204204
createCon(corev2alpha1.ConditionAllAccessReady, metav1.ConditionFalse, rerr.Reason(), rerr.Error())
@@ -268,14 +268,15 @@ func (r *ManagedControlPlaneReconciler) syncAccessSecrets(ctx context.Context, m
268268
return false, rerr
269269
}
270270
mcpSecret := &corev1.Secret{}
271-
mcpSecret.Name = ctrlutils.K8sNameHash(mcp.Name, providerName)
271+
mcpSecret.Name = ctrlutils.K8sNameUUIDUnsafe(mcp.Name, providerName)
272272
mcpSecret.Namespace = mcp.Namespace
273273
if _, err := controllerutil.CreateOrUpdate(ctx, r.OnboardingCluster.Client(), mcpSecret, func() error {
274274
mcpSecret.Data = arSecret.Data
275275
if mcpSecret.Labels == nil {
276276
mcpSecret.Labels = map[string]string{}
277277
}
278-
mcpSecret.Labels[corev2alpha1.MCPLabel] = mcp.Name
278+
mcpSecret.Labels[corev2alpha1.MCPNameLabel] = mcp.Name
279+
mcpSecret.Labels[corev2alpha1.MCPNamespaceLabel] = mcp.Namespace
279280
mcpSecret.Labels[corev2alpha1.OIDCProviderLabel] = providerName
280281
mcpSecret.Labels[apiconst.ManagedByLabel] = ControllerName
281282

internal/controllers/managedcontrolplane/clusters.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ import (
1515
clustersv1alpha1 "github.com/openmcp-project/openmcp-operator/api/clusters/v1alpha1"
1616
cconst "github.com/openmcp-project/openmcp-operator/api/clusters/v1alpha1/constants"
1717
corev2alpha1 "github.com/openmcp-project/openmcp-operator/api/core/v2alpha1"
18-
libutils "github.com/openmcp-project/openmcp-operator/lib/utils"
1918
)
2019

21-
func (r *ManagedControlPlaneReconciler) deleteRelatedClusterRequests(ctx context.Context, mcp *corev2alpha1.ManagedControlPlaneV2) (sets.Set[string], errutils.ReasonableError) {
20+
func (r *ManagedControlPlaneReconciler) deleteRelatedClusterRequests(ctx context.Context, mcp *corev2alpha1.ManagedControlPlaneV2, platformNamespace string) (sets.Set[string], errutils.ReasonableError) {
2221
log := logging.FromContextOrPanic(ctx)
2322

2423
// delete depending cluster requests, if any
@@ -42,16 +41,15 @@ func (r *ManagedControlPlaneReconciler) deleteRelatedClusterRequests(ctx context
4241
}
4342

4443
// fetch cluster requests, if any exist
45-
namespace := libutils.StableRequestNamespace(mcp.Namespace)
4644
resources := map[string]*clustersv1alpha1.ClusterRequest{}
4745
errs := errutils.NewReasonableErrorList()
4846
for crName := range crNames {
4947
cr := &clustersv1alpha1.ClusterRequest{}
5048
cr.SetName(crName)
51-
cr.SetNamespace(namespace)
49+
cr.SetNamespace(platformNamespace)
5250
if err := r.PlatformCluster.Client().Get(ctx, client.ObjectKeyFromObject(cr), cr); err != nil {
5351
if !apierrors.IsNotFound(err) {
54-
errs.Append(errutils.WithReason(fmt.Errorf("error getting ClusterRequest '%s/%s': %w", namespace, crName, err), cconst.ReasonPlatformClusterInteractionProblem))
52+
errs.Append(errutils.WithReason(fmt.Errorf("error getting ClusterRequest '%s/%s': %w", platformNamespace, crName, err), cconst.ReasonPlatformClusterInteractionProblem))
5553
}
5654
continue
5755
}
@@ -78,7 +76,7 @@ func (r *ManagedControlPlaneReconciler) deleteRelatedClusterRequests(ctx context
7876
log.Info("Deleting ClusterRequest", "crName", crName, "namespace", cr.GetNamespace())
7977
if err := r.PlatformCluster.Client().Delete(ctx, cr); err != nil {
8078
if !apierrors.IsNotFound(err) {
81-
errs.Append(errutils.WithReason(fmt.Errorf("error deleting ClusterRequest '%s/%s': %w", namespace, crName, err), cconst.ReasonPlatformClusterInteractionProblem))
79+
errs.Append(errutils.WithReason(fmt.Errorf("error deleting ClusterRequest '%s/%s': %w", platformNamespace, crName, err), cconst.ReasonPlatformClusterInteractionProblem))
8280
} else {
8381
log.Debug("ClusterRequest not found during deletion", "crName", crName, "namespace", cr.GetNamespace())
8482
delete(resources, crName) // remove from resources if not found

internal/controllers/managedcontrolplane/controller.go

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77
"time"
88

9+
corev1 "k8s.io/api/core/v1"
910
apierrors "k8s.io/apimachinery/pkg/api/errors"
1011
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1112
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -20,6 +21,7 @@ import (
2021
"sigs.k8s.io/controller-runtime/pkg/reconcile"
2122
"sigs.k8s.io/controller-runtime/pkg/source"
2223

24+
"github.com/openmcp-project/controller-utils/pkg/clusteraccess"
2325
"github.com/openmcp-project/controller-utils/pkg/clusters"
2426
"github.com/openmcp-project/controller-utils/pkg/collections"
2527
"github.com/openmcp-project/controller-utils/pkg/collections/filters"
@@ -182,14 +184,32 @@ func (r *ManagedControlPlaneReconciler) handleCreateOrUpdate(ctx context.Context
182184
return rr
183185
}
184186
}
187+
188+
// ensure that the MCP namespace on the platform cluster exists
189+
mcpLabels := map[string]string{
190+
corev2alpha1.MCPNameLabel: mcp.Name,
191+
corev2alpha1.MCPNamespaceLabel: mcp.Namespace,
192+
apiconst.ManagedByLabel: ControllerName,
193+
}
194+
platformNamespace, err := libutils.StableMCPNamespace(mcp.Name, mcp.Namespace)
195+
if err != nil {
196+
rr.ReconcileError = errutils.WithReason(err, cconst.ReasonInternalError)
197+
createCon(corev2alpha1.ConditionMeta, metav1.ConditionFalse, rr.ReconcileError.Reason(), rr.ReconcileError.Error())
198+
return rr
199+
}
200+
_, err = clusteraccess.EnsureNamespace(ctx, r.PlatformCluster.Client(), platformNamespace, pairs.MapToPairs(mcpLabels)...)
201+
if err != nil {
202+
rr.ReconcileError = errutils.WithReason(fmt.Errorf("error ensuring namespace '%s' on platform cluster: %w", platformNamespace, err), cconst.ReasonPlatformClusterInteractionProblem)
203+
createCon(corev2alpha1.ConditionMeta, metav1.ConditionFalse, rr.ReconcileError.Reason(), rr.ReconcileError.Error())
204+
return rr
205+
}
185206
createCon(corev2alpha1.ConditionMeta, metav1.ConditionTrue, "", "")
186207

187208
// ensure that the ClusterRequest exists
188209
// since ClusterRequests are basically immutable, updating them is not required
189-
namespace := libutils.StableRequestNamespace(mcp.Namespace)
190210
cr := &clustersv1alpha1.ClusterRequest{}
191211
cr.Name = mcp.Name
192-
cr.Namespace = namespace
212+
cr.Namespace = platformNamespace
193213
if err := r.PlatformCluster.Client().Get(ctx, client.ObjectKeyFromObject(cr), cr); err != nil {
194214
if !apierrors.IsNotFound(err) {
195215
rr.ReconcileError = errutils.WithReason(fmt.Errorf("unable to get ClusterRequest '%s/%s': %w", cr.Namespace, cr.Name, err), cconst.ReasonPlatformClusterInteractionProblem)
@@ -198,6 +218,7 @@ func (r *ManagedControlPlaneReconciler) handleCreateOrUpdate(ctx context.Context
198218
}
199219

200220
log.Info("ClusterRequest not found, creating it", "clusterRequestName", cr.Name, "clusterRequestNamespace", cr.Namespace, "purpose", r.Config.MCPClusterPurpose)
221+
cr.Labels = mcpLabels
201222
cr.Spec = clustersv1alpha1.ClusterRequestSpec{
202223
Purpose: r.Config.MCPClusterPurpose,
203224
WaitForClusterDeletion: ptr.To(true),
@@ -222,7 +243,7 @@ func (r *ManagedControlPlaneReconciler) handleCreateOrUpdate(ctx context.Context
222243
createCon(corev2alpha1.ConditionClusterRequestReady, metav1.ConditionTrue, "", "ClusterRequest is ready")
223244

224245
// manage AccessRequests
225-
allAccessReady, removeConditions, rerr := r.manageAccessRequests(ctx, mcp, cr, createCon)
246+
allAccessReady, removeConditions, rerr := r.manageAccessRequests(ctx, mcp, platformNamespace, cr, createCon)
226247
rr.ConditionsToRemove = removeConditions.UnsortedList()
227248
if rerr != nil {
228249
rr.ReconcileError = rerr
@@ -281,7 +302,13 @@ func (r *ManagedControlPlaneReconciler) handleDelete(ctx context.Context, mcp *c
281302
log.Debug("All service resources deleted")
282303

283304
// delete AccessRequests and related secrets
284-
accessReady, removeConditions, rerr := r.manageAccessRequests(ctx, mcp, nil, createCon)
305+
platformNamespace, err := libutils.StableMCPNamespace(mcp.Name, mcp.Namespace)
306+
if err != nil {
307+
rr.ReconcileError = errutils.WithReason(err, cconst.ReasonInternalError)
308+
createCon(corev2alpha1.ConditionMeta, metav1.ConditionFalse, rr.ReconcileError.Reason(), rr.ReconcileError.Error())
309+
return rr
310+
}
311+
accessReady, removeConditions, rerr := r.manageAccessRequests(ctx, mcp, platformNamespace, nil, createCon)
285312
rr.ConditionsToRemove = removeConditions.UnsortedList()
286313
if rerr != nil {
287314
rr.ReconcileError = rerr
@@ -298,7 +325,7 @@ func (r *ManagedControlPlaneReconciler) handleDelete(ctx context.Context, mcp *c
298325
log.Debug("All AccessRequests deleted")
299326

300327
// delete cluster requests related to this MCP
301-
remainingCRs, rerr := r.deleteRelatedClusterRequests(ctx, mcp)
328+
remainingCRs, rerr := r.deleteRelatedClusterRequests(ctx, mcp, platformNamespace)
302329
if rerr != nil {
303330
rr.ReconcileError = rerr
304331
createCon(corev2alpha1.ConditionAllClusterRequestsDeleted, metav1.ConditionFalse, rr.ReconcileError.Reason(), rr.ReconcileError.Error())
@@ -339,6 +366,40 @@ func (r *ManagedControlPlaneReconciler) handleDelete(ctx context.Context, mcp *c
339366
createCon(corev2alpha1.ConditionAllClusterRequestsDeleted, metav1.ConditionTrue, "", "All ClusterRequests have been deleted")
340367
log.Debug("All ClusterRequests deleted")
341368

369+
// delete MCP namespace on the platform cluster
370+
ns := &corev1.Namespace{}
371+
ns.Name = platformNamespace
372+
if err := r.PlatformCluster.Client().Get(ctx, client.ObjectKeyFromObject(ns), ns); err != nil {
373+
if !apierrors.IsNotFound(err) {
374+
rr.ReconcileError = errutils.WithReason(fmt.Errorf("error getting namespace '%s' on platform cluster: %w", platformNamespace, err), cconst.ReasonPlatformClusterInteractionProblem)
375+
createCon(corev2alpha1.ConditionMeta, metav1.ConditionFalse, rr.ReconcileError.Reason(), rr.ReconcileError.Error())
376+
return rr
377+
}
378+
log.Debug("Namespace already deleted", "namespace", platformNamespace)
379+
ns = nil
380+
} else {
381+
if ns.Labels[corev2alpha1.MCPNameLabel] != mcp.Name || ns.Labels[corev2alpha1.MCPNamespaceLabel] != mcp.Namespace || ns.Labels[apiconst.ManagedByLabel] != ControllerName {
382+
log.Debug("Labels on MCP namespace on platform cluster do not match expected labels, skipping deletion", "platformNamespace", ns.Name)
383+
} else {
384+
if !ns.DeletionTimestamp.IsZero() {
385+
log.Debug("MCP namespace already marked for deletion", "platformNamespace", ns.Name)
386+
} else {
387+
log.Debug("Deleting MCP namespace on platform cluster", "platformNamespace", ns.Name)
388+
if err := r.PlatformCluster.Client().Delete(ctx, ns); err != nil {
389+
rr.ReconcileError = errutils.WithReason(fmt.Errorf("error deleting namespace '%s' on platform cluster: %w", platformNamespace, err), cconst.ReasonPlatformClusterInteractionProblem)
390+
createCon(corev2alpha1.ConditionMeta, metav1.ConditionFalse, rr.ReconcileError.Reason(), rr.ReconcileError.Error())
391+
return rr
392+
}
393+
}
394+
}
395+
}
396+
if ns != nil {
397+
log.Info("Waiting for MCP namespace to be deleted", "platformNamespace", ns.Name)
398+
createCon(corev2alpha1.ConditionMeta, metav1.ConditionFalse, cconst.ReasonWaitingForNamespaceDeletion, fmt.Sprintf("Waiting for namespace '%s' to be deleted", platformNamespace))
399+
rr.SmartRequeue = ctrlutils.SR_BACKOFF
400+
return rr
401+
}
402+
342403
// remove MCP finalizer
343404
if controllerutil.RemoveFinalizer(mcp, corev2alpha1.MCPFinalizer) {
344405
log.Debug("Removing MCP finalizer")

0 commit comments

Comments
 (0)