Skip to content

Commit baad2a6

Browse files
committed
- intialize from lease list on startup
- use logr rather than fmt.printf
1 parent 7de09b2 commit baad2a6

File tree

5 files changed

+100
-26
lines changed

5 files changed

+100
-26
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.23.0
55
toolchain go1.23.6
66

77
require (
8+
github.com/go-logr/logr v1.4.2
89
github.com/openshift-splat-team/vsphere-capacity-manager v0.0.0-20250206150410-e31bad7e695d
910
github.com/prometheus/client_golang v1.19.1
1011
k8s.io/api v0.32.0
@@ -23,7 +24,6 @@ require (
2324
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
2425
github.com/fsnotify/fsnotify v1.7.0 // indirect
2526
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
26-
github.com/go-logr/logr v1.4.2 // indirect
2727
github.com/go-openapi/jsonpointer v0.21.0 // indirect
2828
github.com/go-openapi/jsonreference v0.20.2 // indirect
2929
github.com/go-openapi/swag v0.23.0 // indirect

pkg/context/test_context.go

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package context
22

33
import (
4+
"fmt"
45
"path"
56
"sync"
67

8+
"github.com/go-logr/logr"
79
"github.com/openshift-splat-team/test-monitor/pkg/data"
810
v1 "github.com/openshift-splat-team/vsphere-capacity-manager/pkg/apis/vspherecapacitymanager.splat.io/v1"
911
corev1 "k8s.io/api/core/v1"
@@ -15,11 +17,13 @@ type TestContextService struct {
1517
testContexts map[string]*data.TestContext
1618
metricsContext *MetricsContext
1719
mutex *sync.Mutex
20+
log logr.Logger
1821
}
1922

20-
func (t *TestContextService) Initialize() {
23+
func (t *TestContextService) Initialize(log logr.Logger) {
2124
t.testContexts = make(map[string]*data.TestContext)
2225
t.mutex = &sync.Mutex{}
26+
t.log = log
2327
t.metricsContext = &MetricsContext{}
2428
t.metricsContext.Initialize()
2529
}
@@ -95,7 +99,7 @@ func (t *TestContextService) IsContextFailed(namespace corev1.Namespace) bool {
9599
return t.getTestContext(namespace).Failed
96100
}
97101

98-
func (t *TestContextService) GetPromLabelValues(testContext *data.TestContext) []string {
102+
func (t *TestContextService) GetPromLabelValues(testContext *data.TestContext) ([]string, error) {
99103
var promLabels []string
100104
var labelNames = []string{
101105
"ci.openshift.io/metadata.target",
@@ -113,25 +117,36 @@ func (t *TestContextService) GetPromLabelValues(testContext *data.TestContext) [
113117
}
114118
}
115119

116-
networkType, pool, portGroup := "undefined", "undefined", "undefined"
117-
if len(testContext.NetworkType) != 0 {
120+
networkType, pool, portGroup := "multi-tenant", "undefined", "undefined"
121+
if len(testContext.NetworkType) > 0 {
118122
networkType = testContext.NetworkType
123+
}
124+
125+
if len(testContext.Pool) == 0 {
126+
return nil, fmt.Errorf("pool is empty")
119127
}
120-
if len(testContext.Pool) != 0 {
121-
pool = testContext.Pool
122-
}
123-
if len(testContext.Portgroup) != 0 {
124-
portGroup = testContext.Portgroup
128+
pool = testContext.Pool
129+
if len(testContext.Portgroup) == 0 {
130+
return nil, fmt.Errorf("port group is empty")
125131
}
126-
return append(promLabels, pool, networkType, portGroup)
132+
portGroup = testContext.Portgroup
133+
return append(promLabels, pool, networkType, portGroup), nil
127134
}
128135

129136
func (t *TestContextService) Pass(testContext *data.TestContext) {
130-
promLabels := t.GetPromLabelValues(testContext)
137+
promLabels, err := t.GetPromLabelValues(testContext)
138+
if err != nil {
139+
t.log.Error(err, "error getting prom labels")
140+
return
141+
}
131142
t.metricsContext.Pass(promLabels)
132143
}
133144

134145
func (t *TestContextService) Fail(testContext *data.TestContext) {
135-
promLabels := t.GetPromLabelValues(testContext)
146+
promLabels, err := t.GetPromLabelValues(testContext)
147+
if err != nil {
148+
t.log.Error(err, "error getting prom labels")
149+
return
150+
}
136151
t.metricsContext.Fail(promLabels)
137152
}

pkg/controller/leases.go

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
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

4347
func (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
}

pkg/controller/namespace.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"sync"
77

8+
"github.com/go-logr/logr"
89
testcontext "github.com/openshift-splat-team/test-monitor/pkg/context"
910
corev1 "k8s.io/api/core/v1"
1011
"k8s.io/apimachinery/pkg/api/meta"
@@ -43,6 +44,8 @@ type NamespaceReconciler struct {
4344
mutex sync.Mutex
4445

4546
testContextService *testcontext.TestContextService
47+
48+
log logr.Logger
4649
}
4750

4851
func (l *NamespaceReconciler) SetupWithManager(mgr ctrl.Manager,
@@ -64,6 +67,8 @@ func (l *NamespaceReconciler) SetupWithManager(mgr ctrl.Manager,
6467
l.Scheme = mgr.GetScheme()
6568
l.Recorder = mgr.GetEventRecorderFor("namespaces-controller")
6669
l.RESTMapper = mgr.GetRESTMapper()
70+
l.log = mgr.GetLogger()
71+
6772
return nil
6873
}
6974

@@ -81,9 +86,13 @@ func (l *NamespaceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
8186
if namespace.DeletionTimestamp != nil {
8287

8388
testContext := l.testContextService.DestroyContext(namespace)
84-
promLabels := l.testContextService.GetPromLabelValues(testContext)
85-
86-
fmt.Printf("namespace: %s passed: %v. prom labels: %v", namespace.Namespace, testContext.Failed, promLabels)
89+
promLabels, err := l.testContextService.GetPromLabelValues(testContext)
90+
if err != nil {
91+
l.log.Error(err, "error getting prom labels")
92+
return ctrl.Result{}, nil
93+
} else {
94+
l.log.Info("namespace is being deleted", "namespace", namespace.Name, "failed", testContext.Failed, "prom labels", promLabels)
95+
}
8796
if testContext.Failed {
8897
l.testContextService.Fail(testContext)
8998
} else {

pkg/controller/pods.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77
"sync"
88

9+
"github.com/go-logr/logr"
910
testcontext "github.com/openshift-splat-team/test-monitor/pkg/context"
1011
corev1 "k8s.io/api/core/v1"
1112
"k8s.io/apimachinery/pkg/api/meta"
@@ -39,6 +40,8 @@ type PodReconciler struct {
3940
testContext *testcontext.TestContextService
4041

4142
mutex *sync.Mutex
43+
44+
log logr.Logger
4245
}
4346

4447
func (l *PodReconciler) SetupWithManager(mgr ctrl.Manager,
@@ -59,6 +62,8 @@ func (l *PodReconciler) SetupWithManager(mgr ctrl.Manager,
5962
l.Scheme = mgr.GetScheme()
6063
l.Recorder = mgr.GetEventRecorderFor("pods-controller")
6164
l.RESTMapper = mgr.GetRESTMapper()
65+
l.log = mgr.GetLogger()
66+
6267
return nil
6368
}
6469

0 commit comments

Comments
 (0)