@@ -222,6 +222,7 @@ func (r *TenantReconciler) disownNamespace(ctx context.Context, ns *corev1.Names
222222}
223223
224224func (r * TenantReconciler ) removeRoleBinding (ctx context.Context , tenant * cattagev1beta1.Tenant , ns * corev1.Namespace ) error {
225+ logger := log .FromContext (ctx )
225226 rb := & rbacv1.RoleBinding {}
226227 err := r .client .Get (ctx , client.ObjectKey {Namespace : ns .Name , Name : tenant .Name + "-admin" }, rb )
227228 if apierrors .IsNotFound (err ) {
@@ -241,10 +242,12 @@ func (r *TenantReconciler) removeRoleBinding(ctx context.Context, tenant *cattag
241242 if err != nil {
242243 return err
243244 }
245+ logger .Info ("RoleBinding deleted" , "rolebinding" , rb .Name )
244246 return nil
245247}
246248
247249func (r * TenantReconciler ) removeAppProject (ctx context.Context , tenant * cattagev1beta1.Tenant ) error {
250+ logger := log .FromContext (ctx )
248251 proj := argocd .AppProject ()
249252 err := r .client .Get (ctx , client.ObjectKey {Namespace : r .config .ArgoCD .Namespace , Name : tenant .Name }, proj )
250253 if apierrors .IsNotFound (err ) {
@@ -260,7 +263,12 @@ func (r *TenantReconciler) removeAppProject(ctx context.Context, tenant *cattage
260263 if labels == nil || labels [constants .OwnerTenant ] != tenant .Name {
261264 return nil
262265 }
263- return r .client .Delete (ctx , proj )
266+ err = r .client .Delete (ctx , proj )
267+ if err != nil {
268+ return err
269+ }
270+ logger .Info ("AppProject deleted" , "project" , proj .GetName ())
271+ return nil
264272}
265273
266274func (r * TenantReconciler ) finalize (ctx context.Context , tenant * cattagev1beta1.Tenant ) error {
@@ -300,6 +308,7 @@ func (r *TenantReconciler) finalize(ctx context.Context, tenant *cattagev1beta1.
300308}
301309
302310func (r * TenantReconciler ) patchNamespace (ctx context.Context , ns * accorev1.NamespaceApplyConfiguration ) error {
311+ logger := log .FromContext (ctx )
303312 obj , err := runtime .DefaultUnstructuredConverter .ToUnstructured (ns )
304313 if err != nil {
305314 return err
@@ -323,13 +332,15 @@ func (r *TenantReconciler) patchNamespace(ctx context.Context, ns *accorev1.Name
323332 return nil
324333 }
325334
335+ logger .Info ("patching namespace" , "namespace" , ns , "managed" , managed )
326336 return r .client .Patch (ctx , patch , client .Apply , & client.PatchOptions {
327337 FieldManager : constants .TenantFieldManager ,
328338 Force : ptr .To (true ),
329339 })
330340}
331341
332342func (r * TenantReconciler ) patchRoleBinding (ctx context.Context , rb * acrbacv1.RoleBindingApplyConfiguration ) error {
343+ logger := log .FromContext (ctx )
333344 obj , err := runtime .DefaultUnstructuredConverter .ToUnstructured (rb )
334345 if err != nil {
335346 return err
@@ -353,6 +364,7 @@ func (r *TenantReconciler) patchRoleBinding(ctx context.Context, rb *acrbacv1.Ro
353364 return nil
354365 }
355366
367+ logger .Info ("patching RoleBinding" , "rolebinding" , rb , "managed" , managed )
356368 return r .client .Patch (ctx , patch , client .Apply , & client.PatchOptions {
357369 FieldManager : constants .TenantFieldManager ,
358370 Force : ptr .To (true ),
@@ -363,18 +375,23 @@ func (r *TenantReconciler) rolesMap(ctx context.Context, delegates []cattagev1be
363375 result := make (map [string ][]Role )
364376
365377 for _ , d := range delegates {
378+ delegatedTenant := & cattagev1beta1.Tenant {}
379+ err := r .client .Get (ctx , client.ObjectKey {Name : d .Name }, delegatedTenant )
380+ if err != nil {
381+ return nil , err
382+ }
366383 for _ , role := range d .Roles {
367- delegatedTenant := & cattagev1beta1.Tenant {}
368- err := r .client .Get (ctx , client.ObjectKey {Name : d .Name }, delegatedTenant )
369- if err != nil {
370- return nil , err
371- }
372384 result [role ] = append (result [role ], Role {
373385 Name : delegatedTenant .Name ,
374386 ExtraParams : delegatedTenant .Spec .ExtraParams .ToMap (),
375387 })
376388 }
377389 }
390+ for _ , roles := range result {
391+ slices .SortFunc (roles , func (x , y Role ) int {
392+ return cmp .Compare (x .Name , y .Name )
393+ })
394+ }
378395 return result , nil
379396}
380397
@@ -493,6 +510,7 @@ func (r *TenantReconciler) reconcileArgoCD(ctx context.Context, tenant *cattagev
493510 return err
494511 }
495512 namespaces = append (namespaces , delegatedNamespaces ... )
513+ slices .Sort (namespaces )
496514
497515 tpl , err := template .New ("AppProject Template" ).Parse (r .config .ArgoCD .AppProjectTemplate )
498516 if err != nil {
@@ -504,6 +522,10 @@ func (r *TenantReconciler) reconcileArgoCD(ctx context.Context, tenant *cattagev
504522 return err
505523 }
506524
525+ repos := tenant .Spec .ArgoCD .Repositories
526+ slices .Sort (repos )
527+ params := tenant .Spec .ExtraParams .ToMap ()
528+
507529 var buf bytes.Buffer
508530 err = tpl .Execute (& buf , struct {
509531 Name string
@@ -515,8 +537,8 @@ func (r *TenantReconciler) reconcileArgoCD(ctx context.Context, tenant *cattagev
515537 Name : tenant .Name ,
516538 Namespaces : namespaces ,
517539 Roles : roles ,
518- Repositories : tenant . Spec . ArgoCD . Repositories ,
519- ExtraParams : tenant . Spec . ExtraParams . ToMap () ,
540+ Repositories : repos ,
541+ ExtraParams : params ,
520542 })
521543 if err != nil {
522544 return err
@@ -544,6 +566,7 @@ func (r *TenantReconciler) reconcileArgoCD(ctx context.Context, tenant *cattagev
544566 return nil
545567 }
546568
569+ logger .Info ("patching AppProject" , "namespaces" , namespaces , "roles" , roles , "repositories" , repos , "extraParams" , params )
547570 err = r .client .Patch (ctx , proj , client .Apply , & client.PatchOptions {
548571 Force : ptr .To (true ),
549572 FieldManager : constants .TenantFieldManager ,
0 commit comments