55 "fmt"
66 "sync"
77
8+ "github.com/go-logr/logr"
89 testcontext "github.com/openshift-splat-team/test-monitor/pkg/context"
910 v1 "github.com/openshift-splat-team/vsphere-capacity-manager/pkg/apis/vspherecapacitymanager.splat.io/v1"
1011 corev1 "k8s.io/api/core/v1"
@@ -38,6 +39,9 @@ type LeaseReconciler struct {
3839
3940 testContext * testcontext.TestContextService
4041 mutex * sync.Mutex
42+
43+ inited bool
44+ log logr.Logger
4145}
4246
4347func (l * LeaseReconciler ) SetupWithManager (mgr ctrl.Manager ,
@@ -57,33 +61,51 @@ func (l *LeaseReconciler) SetupWithManager(mgr ctrl.Manager,
5761 l .Scheme = mgr .GetScheme ()
5862 l .Recorder = mgr .GetEventRecorderFor ("leases-controller" )
5963 l .RESTMapper = mgr .GetRESTMapper ()
64+ l .log = mgr .GetLogger ()
65+
6066 return nil
6167}
6268
63- func (l * LeaseReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
64- var err error
65- var lease v1.Lease
66- err = l .Client .Get (l .ctx , req .NamespacedName , & lease )
69+ func (l * LeaseReconciler ) Initialize () error {
70+ if l .inited {
71+ return nil
72+ }
73+ l .inited = true
74+
75+ leaseList := & v1.LeaseList {}
76+ err := l .Client .List (l .ctx , leaseList , & client.ListOptions {Namespace : "vsphere-infra-helpers" })
6777 if err != nil {
68- return ctrl. Result {}, fmt .Errorf ("error getting namespace : %w" , err )
78+ return fmt .Errorf ("error listing leases : %w" , err )
6979 }
7080
71- l .mutex .Lock ()
72- defer l .mutex .Unlock ()
81+ for _ , lease := range leaseList .Items {
82+ err = l .handleLease (lease )
83+ if err != nil {
84+ return fmt .Errorf ("error handling lease: %w" , err )
85+ }
86+ }
87+ return nil
88+ }
89+
90+ func (l * LeaseReconciler ) handleLease (lease v1.Lease ) error {
91+ l .log .Info ("handling lease" ,"lease" , lease .Name )
7392
7493 if lease .DeletionTimestamp != nil {
75- return ctrl.Result {}, nil
94+ l .log .Info ("lease is being deleted" , "lease" , lease .Name )
95+ return nil
7696 }
7797
7898 if lease .Labels == nil {
79- return ctrl.Result {}, nil
99+ l .log .Info ("lease has no labels" , "lease" , lease .Name )
100+ return nil
80101 }
81102 labels := lease .Labels
82103 var namespace string
83104 var exists bool
84105
85106 if namespace , exists = labels ["vsphere-capacity-manager.splat-team.io/lease-namespace" ]; ! exists {
86- return ctrl.Result {}, nil
107+ l .log .Info ("lease lacks namespace label" , "lease" , lease .Name )
108+ return nil
87109 }
88110
89111 l .testContext .UpdateWithLease (corev1.Namespace {
@@ -92,5 +114,28 @@ func (l *LeaseReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl
92114 },
93115 }, lease )
94116
117+ return nil
118+ }
119+
120+ func (l * LeaseReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
121+ var err error
122+ var lease v1.Lease
123+ err = l .Client .Get (l .ctx , req .NamespacedName , & lease )
124+ if err != nil {
125+ l .log .Error (err , "error getting lease" )
126+ return ctrl.Result {}, nil
127+ }
128+
129+ err = l .Initialize ()
130+ if err != nil {
131+ l .log .Error (err , "error initializing" )
132+ return ctrl.Result {}, nil
133+ }
134+
135+ err = l .handleLease (lease )
136+ if err != nil {
137+ l .log .Error (err , "error handling lease" )
138+ return ctrl.Result {}, nil }
139+
95140 return ctrl.Result {}, nil
96141}
0 commit comments