@@ -297,7 +297,7 @@ func (a *Operator) ensureRBACInTargetNamespace(csv *v1alpha1.ClusterServiceVersi
297297 strategyDetailsDeployment .ClusterPermissions = append (strategyDetailsDeployment .ClusterPermissions , p )
298298 }
299299 strategyDetailsDeployment .Permissions = nil
300- permMet , _ , err := a .permissionStatus (strategyDetailsDeployment , ruleChecker , corev1 .NamespaceAll )
300+ permMet , _ , err := a .permissionStatus (strategyDetailsDeployment , ruleChecker , corev1 .NamespaceAll , csv . GetNamespace () )
301301 if err != nil {
302302 return err
303303 }
@@ -321,15 +321,21 @@ func (a *Operator) ensureRBACInTargetNamespace(csv *v1alpha1.ClusterServiceVersi
321321 continue
322322 }
323323
324- permMet , _ , err := a .permissionStatus (strategyDetailsDeployment , ruleChecker , ns )
324+ permMet , _ , err := a .permissionStatus (strategyDetailsDeployment , ruleChecker , ns , csv . GetNamespace () )
325325 if err != nil {
326+ logger .WithError (err ).Debug ("permission status" )
326327 return err
327328 }
329+ logger .WithField ("target" , ns ).WithField ("permMet" , permMet ).Debug ("permission status" )
330+
328331 // operator already has access in the target namespace
329332 if permMet {
330- return nil
333+ logger .Debug ("operator has access" )
334+ continue
331335 }
336+
332337 if err := a .ensureTenantRBAC (operatorGroup .GetNamespace (), ns , csv ); err != nil {
338+ logger .WithError (err ).Debug ("ensuring tenant rbac" )
333339 return err
334340 }
335341 }
@@ -408,6 +414,10 @@ func (a *Operator) ensureSingletonRBAC(operatorNamespace string, csv *v1alpha1.C
408414}
409415
410416func (a * Operator ) ensureTenantRBAC (operatorNamespace , targetNamespace string , csv * v1alpha1.ClusterServiceVersion ) error {
417+ if operatorNamespace == targetNamespace {
418+ return nil
419+ }
420+
411421 targetCSV , err := a .lister .OperatorsV1alpha1 ().ClusterServiceVersionLister ().ClusterServiceVersions (targetNamespace ).Get (csv .GetName ())
412422 if err != nil {
413423 return err
@@ -418,6 +428,10 @@ func (a *Operator) ensureTenantRBAC(operatorNamespace, targetNamespace string, c
418428 return err
419429 }
420430
431+ if len (ownedRoles ) == 0 {
432+ return fmt .Errorf ("owned roles not found in cache" )
433+ }
434+
421435 targetRoles , err := a .lister .RbacV1 ().RoleLister ().Roles (targetNamespace ).List (ownerutil .CSVOwnerSelector (targetCSV ))
422436 if err != nil {
423437 return err
@@ -448,13 +462,15 @@ func (a *Operator) ensureTenantRBAC(operatorNamespace, targetNamespace string, c
448462
449463 // role doesn't exist, create it
450464 // TODO: we can work around error cases here; if there's an un-owned role with a matching name we should generate instead
451- ownedRole .SetNamespace (targetNamespace )
452- ownedRole .SetOwnerReferences ([]metav1.OwnerReference {ownerutil .NonBlockingOwner (targetCSV )})
453- if err := ownerutil .AddOwnerLabels (ownedRole , targetCSV ); err != nil {
465+ targetRole := ownedRole .DeepCopy ()
466+ targetRole .SetResourceVersion ("0" )
467+ targetRole .SetNamespace (targetNamespace )
468+ targetRole .SetOwnerReferences ([]metav1.OwnerReference {ownerutil .NonBlockingOwner (targetCSV )})
469+ if err := ownerutil .AddOwnerLabels (targetRole , targetCSV ); err != nil {
454470 return err
455471 }
456- ownedRole .SetLabels (utillabels .AddLabel (ownedRole .GetLabels (), v1alpha1 .CopiedLabelKey , operatorNamespace ))
457- if _ , err := a .OpClient .CreateRole (ownedRole ); err != nil {
472+ targetRole .SetLabels (utillabels .AddLabel (targetRole .GetLabels (), v1alpha1 .CopiedLabelKey , operatorNamespace ))
473+ if _ , err := a .OpClient .CreateRole (targetRole ); err != nil {
458474 return err
459475 }
460476 }
@@ -491,6 +507,7 @@ func (a *Operator) ensureTenantRBAC(operatorNamespace, targetNamespace string, c
491507 // role binding doesn't exist
492508 // TODO: we can work around error cases here; if there's an un-owned role with a matching name we should generate instead
493509 ownedRoleBinding .SetNamespace (targetNamespace )
510+ ownedRoleBinding .SetResourceVersion ("0" )
494511 ownedRoleBinding .SetOwnerReferences ([]metav1.OwnerReference {ownerutil .NonBlockingOwner (targetCSV )})
495512 if err := ownerutil .AddOwnerLabels (ownedRoleBinding , targetCSV ); err != nil {
496513 return err
0 commit comments