@@ -18,24 +18,27 @@ package controller
1818
1919import (
2020 "context"
21+ "fmt"
2122
23+ "github.com/go-logr/logr"
24+ "k8s.io/apimachinery/pkg/api/errors"
2225 "k8s.io/apimachinery/pkg/runtime"
2326 ctrl "sigs.k8s.io/controller-runtime"
2427 "sigs.k8s.io/controller-runtime/pkg/client"
25- logf "sigs.k8s.io/controller-runtime/pkg/log"
2628
2729 rbacoperatorv1alpha1 "github.com/argoproj-labs/argocd-rbac-operator/api/v1alpha1"
2830)
2931
3032// ArgoCDProjectRoleReconciler reconciles a ArgoCDProjectRole object
3133type ArgoCDProjectRoleReconciler struct {
3234 client.Client
35+ Log logr.Logger
3336 Scheme * runtime.Scheme
3437}
3538
36- // +kubebuilder:rbac:groups=rbac-operator,resources=argocdprojectroles,verbs=get;list;watch;create;update;patch;delete
37- // +kubebuilder:rbac:groups=rbac-operator,resources=argocdprojectroles/status,verbs=get;update;patch
38- // +kubebuilder:rbac:groups=rbac-operator,resources=argocdprojectroles/finalizers,verbs=update
39+ // +kubebuilder:rbac:groups=rbac-operator.argoproj-labs.io ,resources=argocdprojectroles,verbs=*
40+ // +kubebuilder:rbac:groups=rbac-operator.argoproj-labs.io ,resources=argocdprojectroles/status,verbs=*
41+ // +kubebuilder:rbac:groups=rbac-operator.argoproj-labs.io ,resources=argocdprojectroles/finalizers,verbs=*
3942
4043// Reconcile is part of the main kubernetes reconciliation loop which aims to
4144// move the current state of the cluster closer to the desired state.
@@ -47,9 +50,48 @@ type ArgoCDProjectRoleReconciler struct {
4750// For more details, check Reconcile and its Result here:
4851// - https://pkg.go.dev/sigs.k8s.io/[email protected] /pkg/reconcile 4952func (r * ArgoCDProjectRoleReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
50- _ = logf . FromContext ( ctx )
53+ _ = r . Log . WithValues ( "argocdprojectrole" , req . NamespacedName )
5154
52- // TODO(user): your logic here
55+ r .Log .Info ("Reconciling ArgoCDProjectRole" , "name" , req .Name , "namespace" , req .Namespace )
56+
57+ projectRole := rbacoperatorv1alpha1.ArgoCDProjectRole {}
58+ if err := r .Get (ctx , req .NamespacedName , & projectRole ); err != nil {
59+ if errors .IsNotFound (err ) {
60+ r .Log .Info ("ArgoCDProjectRole not found, skipping reconcile" , "name" , req .Name )
61+ return ctrl.Result {}, nil
62+ }
63+ projectRole .SetConditions (rbacoperatorv1alpha1 .ReconcileError (err ))
64+ if err := r .Status ().Update (ctx , & projectRole ); err != nil {
65+ r .Log .Error (err , "Failed to update ArgoCDProjectRole status" , "name" , req .Name )
66+ return ctrl.Result {}, err
67+ }
68+ }
69+
70+ if projectRole .IsBeingDeleted () {
71+ if err := r .handleFinalizer (ctx , & projectRole ); err != nil {
72+ projectRole .SetConditions (rbacoperatorv1alpha1 .Deleting ())
73+ if err := r .Status ().Update (ctx , & projectRole ); err != nil {
74+ r .Log .Error (err , "Failed to update ArgoCDProjectRole status during finalizer handling" , "name" , req .Name )
75+ }
76+ return ctrl.Result {}, fmt .Errorf ("error when handling finalizer: %v" , err )
77+ }
78+ return ctrl.Result {}, nil
79+ }
80+
81+ if ! projectRole .HasFinalizer (rbacoperatorv1alpha1 .ArgoCDProjectRoleFinalizerName ) {
82+ if err := r .addFinalizer (ctx , & projectRole ); err != nil {
83+ projectRole .SetConditions (rbacoperatorv1alpha1 .Deleting ().WithMessage (err .Error ()))
84+ if err := r .Status ().Update (ctx , & projectRole ); err != nil {
85+ r .Log .Error (err , "Failed to update ArgoCDProjectRole status after adding finalizer" , "name" , req .Name )
86+ }
87+ return ctrl.Result {}, fmt .Errorf ("error when adding finalizer: %v" , err )
88+ }
89+ return ctrl.Result {}, nil
90+ }
91+
92+ if projectRole .HasArgoCDProjectRoleBindingRef () {
93+ projectRb := rbacoperatorv1alpha1.ArgoCDProjectRoleBinding {}
94+ }
5395
5496 return ctrl.Result {}, nil
5597}
0 commit comments