Skip to content

Commit b325b1a

Browse files
committed
feat(appProjectRBAC)[#36]: add ArgoCDProjectRole Controller
Signed-off-by: Georgy Khromov <[email protected]>
1 parent 6bb98e7 commit b325b1a

File tree

4 files changed

+85
-20
lines changed

4 files changed

+85
-20
lines changed

go.mod

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module github.com/argoproj-labs/argocd-rbac-operator
22

3-
go 1.22.0
3+
go 1.23.0
44

5-
toolchain go1.22.3
5+
toolchain go1.23.4
66

77
require (
88
github.com/onsi/ginkgo/v2 v2.19.0
@@ -55,11 +55,11 @@ require (
5555
go.uber.org/multierr v1.11.0 // indirect
5656
go.uber.org/zap v1.27.0 // indirect
5757
golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 // indirect
58-
golang.org/x/net v0.26.0 // indirect
58+
golang.org/x/net v0.38.0 // indirect
5959
golang.org/x/oauth2 v0.21.0 // indirect
60-
golang.org/x/sys v0.21.0 // indirect
61-
golang.org/x/term v0.21.0 // indirect
62-
golang.org/x/text v0.16.0 // indirect
60+
golang.org/x/sys v0.31.0 // indirect
61+
golang.org/x/term v0.30.0 // indirect
62+
golang.org/x/text v0.23.0 // indirect
6363
golang.org/x/time v0.5.0 // indirect
6464
golang.org/x/tools v0.22.0 // indirect
6565
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect

go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
107107
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
108108
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
109109
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
110-
golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
111-
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
110+
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
111+
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
112112
golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
113113
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
114114
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -117,14 +117,14 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
117117
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
118118
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
119119
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
120-
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
121-
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
122-
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
123-
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
120+
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
121+
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
122+
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
123+
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
124124
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
125125
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
126-
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
127-
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
126+
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
127+
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
128128
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
129129
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
130130
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

internal/controller/argocdprojectrole_controller.go

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,27 @@ package controller
1818

1919
import (
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
3133
type 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
4952
func (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
}

internal/controller/argocdrbac_operator_finalizer.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,29 @@ func (r *ArgoCDRoleReconciler) delete(role *rbacoperatorv1alpha1.ArgoCDRole) err
5757
return nil
5858
}
5959

60+
func (r *ArgoCDProjectRoleReconciler) addFinalizer(ctx context.Context, projectRole *rbacoperatorv1alpha1.ArgoCDProjectRole) error {
61+
projectRole.AddFinalizer(rbacoperatorv1alpha1.ArgoCDProjectRoleFinalizerName)
62+
return r.Update(ctx, projectRole)
63+
}
64+
65+
func (r *ArgoCDProjectRoleReconciler) handleFinalizer(ctx context.Context, projectRole *rbacoperatorv1alpha1.ArgoCDProjectRole) error {
66+
if !projectRole.HasFinalizer(rbacoperatorv1alpha1.ArgoCDProjectRoleFinalizerName) {
67+
return nil
68+
}
69+
70+
if err := r.delete(projectRole); err != nil {
71+
return err
72+
}
73+
74+
projectRole.RemoveFinalizer(rbacoperatorv1alpha1.ArgoCDProjectRoleFinalizerName)
75+
return r.Update(ctx, projectRole)
76+
}
77+
78+
func (r *ArgoCDProjectRoleReconciler) delete(projectRole *rbacoperatorv1alpha1.ArgoCDProjectRole) error {
79+
// TODO: Implement deletion logic for ArgoCDProjectRole
80+
return nil
81+
}
82+
6083
func (r *ArgoCDRoleBindingReconciler) addFinalizer(ctx context.Context, rb *rbacoperatorv1alpha1.ArgoCDRoleBinding) error {
6184
rb.AddFinalizer(rbacoperatorv1alpha1.ArgoCDRoleBindingFinalizerName)
6285
return r.Update(ctx, rb)

0 commit comments

Comments
 (0)