@@ -414,9 +414,9 @@ func ResolveNamespace(nsClient corev1client.NamespacesGetter) ReconcileStepFunc
414414 l .V (1 ).Info ("validating user-provided namespace exists" , "namespace" , ext .Spec .Namespace )
415415 _ , err := nsClient .Namespaces ().Get (ctx , ext .Spec .Namespace , metav1.GetOptions {})
416416 if apierrors .IsNotFound (err ) {
417- err := fmt .Errorf ("namespace %q not found; spec.namespace must reference an existing namespace" , ext .Spec .Namespace )
418- setStatusProgressing (ext , reconcile . TerminalError ( err ) )
419- return nil , err
417+ termErr := reconcile . TerminalError ( fmt .Errorf ("namespace %q not found; spec.namespace must reference an existing namespace" , ext .Spec .Namespace ) )
418+ setStatusProgressing (ext , termErr )
419+ return nil , termErr
420420 }
421421 if err != nil {
422422 return nil , fmt .Errorf ("error checking namespace %q: %w" , ext .Spec .Namespace , err )
@@ -426,8 +426,14 @@ func ResolveNamespace(nsClient corev1client.NamespacesGetter) ReconcileStepFunc
426426 return nil , nil
427427 }
428428
429- // Managed mode: resolve name from bundle annotations
429+ // Managed mode: resolve name from bundle annotations.
430+ // If imageFS is nil (fallback path), preserve the previously resolved namespace
431+ // from status to avoid wiping it in later steps.
430432 if state .imageFS == nil {
433+ if ext .Status .Namespace != "" {
434+ state .resolvedNamespace = ext .Status .Namespace
435+ state .namespaceManaged = true
436+ }
431437 return nil , nil
432438 }
433439
@@ -439,15 +445,15 @@ func ResolveNamespace(nsClient corev1client.NamespacesGetter) ReconcileStepFunc
439445 packageName := getPackageName (ext )
440446 resolvedName , template , err := applier .ResolveNamespaceName (bundleAnnotations , packageName )
441447 if err != nil {
442- err := fmt .Errorf ("error resolving namespace from bundle annotations: %w" , err )
443- setStatusProgressing (ext , reconcile . TerminalError ( err ) )
444- return nil , err
448+ termErr := reconcile . TerminalError ( fmt .Errorf ("error resolving namespace from bundle annotations: %w" , err ) )
449+ setStatusProgressing (ext , termErr )
450+ return nil , termErr
445451 }
446452
447453 if ext .Status .Namespace != "" && ext .Status .Namespace != resolvedName {
448- err := fmt .Errorf ("bundle upgrade changes managed namespace from %q to %q; this is not supported" , ext .Status .Namespace , resolvedName )
449- setStatusProgressing (ext , reconcile . TerminalError ( err ) )
450- return nil , err
454+ termErr := reconcile . TerminalError ( fmt .Errorf ("bundle upgrade changes managed namespace from %q to %q; this is not supported" , ext .Status .Namespace , resolvedName ) )
455+ setStatusProgressing (ext , termErr )
456+ return nil , termErr
451457 }
452458
453459 // On first install, verify managed namespace does not already exist.
@@ -456,9 +462,9 @@ func ResolveNamespace(nsClient corev1client.NamespacesGetter) ReconcileStepFunc
456462 l .V (1 ).Info ("checking managed namespace does not already exist" , "namespace" , resolvedName )
457463 _ , getErr := nsClient .Namespaces ().Get (ctx , resolvedName , metav1.GetOptions {})
458464 if getErr == nil {
459- err := fmt .Errorf ("managed namespace %q already exists; use spec.namespace to install into an existing namespace" , resolvedName )
460- setStatusProgressing (ext , reconcile . TerminalError ( err ) )
461- return nil , err
465+ termErr := reconcile . TerminalError ( fmt .Errorf ("managed namespace %q already exists; use spec.namespace to install into an existing namespace" , resolvedName ) )
466+ setStatusProgressing (ext , termErr )
467+ return nil , termErr
462468 }
463469 if ! apierrors .IsNotFound (getErr ) {
464470 return nil , fmt .Errorf ("error checking namespace %q: %w" , resolvedName , getErr )
0 commit comments