Skip to content
This repository was archived by the owner on Dec 3, 2024. It is now read-only.

Commit ee3d153

Browse files
committed
feat(bucketclaim): added EventRecorder
1 parent 5240fb3 commit ee3d153

File tree

2 files changed

+56
-18
lines changed

2 files changed

+56
-18
lines changed

Diff for: pkg/bucketclaim/bucketclaim.go

+49-18
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import (
44
"context"
55

66
v1 "k8s.io/api/core/v1"
7-
"k8s.io/apimachinery/pkg/api/errors"
7+
kubeerrors "k8s.io/apimachinery/pkg/api/errors"
88
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+
"k8s.io/apimachinery/pkg/runtime"
910
kubeclientset "k8s.io/client-go/kubernetes"
11+
"k8s.io/client-go/tools/record"
1012
"k8s.io/klog/v2"
1113
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
1214

@@ -17,18 +19,20 @@ import (
1719
"sigs.k8s.io/container-object-storage-interface-controller/pkg/util"
1820
)
1921

20-
// bucketClaimListener is a resource handler for bucket requests objects
21-
type bucketClaimListener struct {
22+
// BucketClaimListener is a resource handler for bucket requests objects
23+
type BucketClaimListener struct {
24+
eventRecorder record.EventRecorder
25+
2226
kubeClient kubeclientset.Interface
2327
bucketClient bucketclientset.Interface
2428
}
2529

26-
func NewBucketClaimListener() *bucketClaimListener {
27-
return &bucketClaimListener{}
30+
func NewBucketClaimListener() *BucketClaimListener {
31+
return &BucketClaimListener{}
2832
}
2933

3034
// Add creates a bucket in response to a bucketClaim
31-
func (b *bucketClaimListener) Add(ctx context.Context, bucketClaim *v1alpha1.BucketClaim) error {
35+
func (b *BucketClaimListener) Add(ctx context.Context, bucketClaim *v1alpha1.BucketClaim) error {
3236
klog.V(3).InfoS("Add BucketClaim",
3337
"name", bucketClaim.ObjectMeta.Name,
3438
"ns", bucketClaim.ObjectMeta.Namespace,
@@ -65,7 +69,7 @@ func (b *bucketClaimListener) Add(ctx context.Context, bucketClaim *v1alpha1.Buc
6569
}
6670

6771
// update processes any updates made to the bucket request
68-
func (b *bucketClaimListener) Update(ctx context.Context, old, new *v1alpha1.BucketClaim) error {
72+
func (b *BucketClaimListener) Update(ctx context.Context, old, new *v1alpha1.BucketClaim) error {
6973
klog.V(3).InfoS("Update BucketClaim",
7074
"name", old.Name,
7175
"ns", old.Namespace)
@@ -94,22 +98,28 @@ func (b *bucketClaimListener) Update(ctx context.Context, old, new *v1alpha1.Buc
9498
}
9599

96100
// Delete processes a bucket for which bucket request is deleted
97-
func (b *bucketClaimListener) Delete(ctx context.Context, bucketClaim *v1alpha1.BucketClaim) error {
98-
klog.V(3).Info("Delete BucketClaim",
101+
func (b *BucketClaimListener) Delete(ctx context.Context, bucketClaim *v1alpha1.BucketClaim) error {
102+
klog.V(3).InfoS("Delete BucketClaim",
99103
"name", bucketClaim.ObjectMeta.Name,
100104
"ns", bucketClaim.ObjectMeta.Namespace)
101105

102106
return nil
103107
}
104108

105109
// provisionBucketClaimOperation attempts to provision a bucket for a given bucketClaim.
110+
//
111+
// Recorded events
112+
//
113+
// InvalidBucket - Bucket provided in the BucketClaim does not exist
114+
// InvalidBucketClass - BucketClass provided in the BucketClaim does not exist
115+
//
106116
// Return values
107117
//
108118
// nil - BucketClaim successfully processed
109119
// ErrInvalidBucketClass - BucketClass does not exist [requeue'd with exponential backoff]
110120
// ErrBucketAlreadyExists - BucketClaim already processed
111121
// non-nil err - Internal error [requeue'd with exponential backoff]
112-
func (b *bucketClaimListener) provisionBucketClaimOperation(ctx context.Context, inputBucketClaim *v1alpha1.BucketClaim) error {
122+
func (b *BucketClaimListener) provisionBucketClaimOperation(ctx context.Context, inputBucketClaim *v1alpha1.BucketClaim) error {
113123
bucketClaim := inputBucketClaim.DeepCopy()
114124
if bucketClaim.Status.BucketReady {
115125
return util.ErrBucketAlreadyExists
@@ -121,7 +131,10 @@ func (b *bucketClaimListener) provisionBucketClaimOperation(ctx context.Context,
121131
if bucketClaim.Spec.ExistingBucketName != "" {
122132
bucketName = bucketClaim.Spec.ExistingBucketName
123133
bucket, err := b.buckets().Get(ctx, bucketName, metav1.GetOptions{})
124-
if err != nil {
134+
if kubeerrors.IsNotFound(err) {
135+
b.recordEvent(inputBucketClaim, v1.EventTypeWarning, "InvalidBucket", "Bucket provided in the BucketClaim does not exist")
136+
return err
137+
} else if err != nil {
125138
klog.V(3).ErrorS(err, "Get Bucket with ExistingBucketName error", "name", bucketClaim.Spec.ExistingBucketName)
126139
return err
127140
}
@@ -153,7 +166,10 @@ func (b *bucketClaimListener) provisionBucketClaimOperation(ctx context.Context,
153166
}
154167

155168
bucketClass, err := b.bucketClasses().Get(ctx, bucketClassName, metav1.GetOptions{})
156-
if err != nil {
169+
if kubeerrors.IsNotFound(err) {
170+
b.recordEvent(inputBucketClaim, v1.EventTypeWarning, "InvalidBucketClass", "BucketClass provided in the BucketClaim does not exist")
171+
return util.ErrInvalidBucketClass
172+
} else if err != nil {
157173
klog.V(3).ErrorS(err, "Get Bucketclass Error", "name", bucketClassName)
158174
return util.ErrInvalidBucketClass
159175
}
@@ -180,7 +196,7 @@ func (b *bucketClaimListener) provisionBucketClaimOperation(ctx context.Context,
180196

181197
bucket.Spec.Protocols = protocolCopy
182198
bucket, err = b.buckets().Create(ctx, bucket, metav1.CreateOptions{})
183-
if err != nil && !errors.IsAlreadyExists(err) {
199+
if err != nil && !kubeerrors.IsAlreadyExists(err) {
184200
klog.V(3).ErrorS(err, "Error creationg bucket",
185201
"bucket", bucketName,
186202
"bucketClaim", bucketClaim.ObjectMeta.Name)
@@ -212,31 +228,46 @@ func (b *bucketClaimListener) provisionBucketClaimOperation(ctx context.Context,
212228
return nil
213229
}
214230

215-
func (b *bucketClaimListener) InitializeKubeClient(k kubeclientset.Interface) {
231+
// InitializeKubeClient initializes the kubernetes client
232+
func (b *BucketClaimListener) InitializeKubeClient(k kubeclientset.Interface) {
216233
b.kubeClient = k
217234
}
218235

219-
func (b *bucketClaimListener) InitializeBucketClient(bc bucketclientset.Interface) {
236+
// InitializeBucketClient initializes the object storage bucket client
237+
func (b *BucketClaimListener) InitializeBucketClient(bc bucketclientset.Interface) {
220238
b.bucketClient = bc
221239
}
222240

223-
func (b *bucketClaimListener) buckets() objectstoragev1alpha1.BucketInterface {
241+
// InitializeEventRecorder initializes the event recorder
242+
func (b *BucketClaimListener) InitializeEventRecorder(er record.EventRecorder) {
243+
b.eventRecorder = er
244+
}
245+
246+
func (b *BucketClaimListener) buckets() objectstoragev1alpha1.BucketInterface {
224247
if b.bucketClient != nil {
225248
return b.bucketClient.ObjectstorageV1alpha1().Buckets()
226249
}
227250
panic("uninitialized listener")
228251
}
229252

230-
func (b *bucketClaimListener) bucketClasses() objectstoragev1alpha1.BucketClassInterface {
253+
func (b *BucketClaimListener) bucketClasses() objectstoragev1alpha1.BucketClassInterface {
231254
if b.bucketClient != nil {
232255
return b.bucketClient.ObjectstorageV1alpha1().BucketClasses()
233256
}
234257
panic("uninitialized listener")
235258
}
236259

237-
func (b *bucketClaimListener) bucketClaims(namespace string) objectstoragev1alpha1.BucketClaimInterface {
260+
func (b *BucketClaimListener) bucketClaims(namespace string) objectstoragev1alpha1.BucketClaimInterface {
238261
if b.bucketClient != nil {
239262
return b.bucketClient.ObjectstorageV1alpha1().BucketClaims(namespace)
240263
}
241264
panic("uninitialized listener")
242265
}
266+
267+
// recordEvent during the processing of the objects
268+
func (b *BucketClaimListener) recordEvent(subject runtime.Object, eventtype, reason, message string) {
269+
if b.eventRecorder == nil {
270+
return
271+
}
272+
b.eventRecorder.Event(subject, eventtype, reason, message)
273+
}

Diff for: pkg/bucketclaim/bucketclaim_test.go

+7
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
88
"k8s.io/client-go/kubernetes/fake"
9+
"k8s.io/client-go/tools/record"
910

1011
types "sigs.k8s.io/container-object-storage-interface-api/apis/objectstorage/v1alpha1"
1112
bucketclientset "sigs.k8s.io/container-object-storage-interface-api/client/clientset/versioned/fake"
@@ -84,10 +85,12 @@ func runCreateBucket(t *testing.T, name string) {
8485

8586
client := bucketclientset.NewSimpleClientset()
8687
kubeClient := fake.NewSimpleClientset()
88+
eventRecorder := record.NewFakeRecorder(3)
8789

8890
listener := NewBucketClaimListener()
8991
listener.InitializeKubeClient(kubeClient)
9092
listener.InitializeBucketClient(client)
93+
listener.InitializeEventRecorder(eventRecorder)
9194

9295
bucketclass, err := util.CreateBucketClass(ctx, client, &goldClass)
9396
if err != nil {
@@ -127,10 +130,12 @@ func runCreateBucketWithMultipleBR(t *testing.T, name string) {
127130

128131
client := bucketclientset.NewSimpleClientset()
129132
kubeClient := fake.NewSimpleClientset()
133+
eventRecorder := record.NewFakeRecorder(3)
130134

131135
listener := NewBucketClaimListener()
132136
listener.InitializeKubeClient(kubeClient)
133137
listener.InitializeBucketClient(client)
138+
listener.InitializeEventRecorder(eventRecorder)
134139

135140
bucketclass, err := util.CreateBucketClass(ctx, client, &goldClass)
136141
if err != nil {
@@ -181,10 +186,12 @@ func runCreateBucketIdempotency(t *testing.T, name string) {
181186

182187
client := bucketclientset.NewSimpleClientset()
183188
kubeClient := fake.NewSimpleClientset()
189+
eventRecorder := record.NewFakeRecorder(3)
184190

185191
listener := NewBucketClaimListener()
186192
listener.InitializeKubeClient(kubeClient)
187193
listener.InitializeBucketClient(client)
194+
listener.InitializeEventRecorder(eventRecorder)
188195

189196
bucketclass, err := util.CreateBucketClass(ctx, client, &goldClass)
190197
if err != nil {

0 commit comments

Comments
 (0)