@@ -36,23 +36,23 @@ import (
36
36
)
37
37
38
38
const (
39
- brFinalizer = "cosi.objectstorage.k8s.io/bucketrequest -protection"
39
+ brFinalizer = "cosi.objectstorage.k8s.io/bucketclaim -protection"
40
40
)
41
41
42
42
// BucketListener manages Bucket objects
43
43
type BucketListener struct {
44
44
provisionerClient cosi.ProvisionerClient
45
- provisionerName string
45
+ driverName string
46
46
47
47
kubeClient kube.Interface
48
48
bucketClient buckets.Interface
49
49
kubeVersion * utilversion.Version
50
50
}
51
51
52
52
// NewBucketListener returns a resource handler for Bucket objects
53
- func NewBucketListener (provisionerName string , client cosi.ProvisionerClient ) * BucketListener {
53
+ func NewBucketListener (driverName string , client cosi.ProvisionerClient ) * BucketListener {
54
54
bl := & BucketListener {
55
- provisionerName : provisionerName ,
55
+ driverName : driverName ,
56
56
provisionerClient : client ,
57
57
}
58
58
@@ -71,37 +71,28 @@ func (b *BucketListener) Add(ctx context.Context, inputBucket *v1alpha1.Bucket)
71
71
"bucketclass" , bucket .Spec .BucketClassName ,
72
72
)
73
73
74
- if ! strings .EqualFold (bucket .Spec .Provisioner , b .provisionerName ) {
75
- klog .V (5 ).InfoS ("Skipping bucket for provisiner " ,
74
+ if ! strings .EqualFold (bucket .Spec .DriverName , b .driverName ) {
75
+ klog .V (5 ).InfoS ("Skipping bucket for driver " ,
76
76
"bucket" , bucket .Name ,
77
- "provisioner " , bucket .Spec .Provisioner ,
77
+ "driver " , bucket .Spec .DriverName ,
78
78
)
79
79
return nil
80
80
}
81
81
82
82
if bucket .Status .BucketAvailable {
83
83
klog .V (5 ).InfoS ("BucketExists" ,
84
84
"bucket" , bucket .Name ,
85
- "provisioner " , bucket .Spec .Provisioner ,
85
+ "driver " , bucket .Spec .DriverName ,
86
86
)
87
87
return nil
88
88
}
89
89
90
- proto , err := bucket .Spec .Protocol .ConvertToExternal ()
91
- if err != nil {
92
- klog .ErrorS (err , "Invalid protocol" ,
93
- "bucket" , bucket .Name )
94
-
95
- return errors .Wrap (err , "Failed to parse protocol for API" )
96
- }
97
-
98
- req := & cosi.ProvisionerCreateBucketRequest {
90
+ req := & cosi.DriverCreateBucketRequest {
99
91
Parameters : bucket .Spec .Parameters ,
100
- Protocol : proto ,
101
92
Name : bucket .Name ,
102
93
}
103
94
104
- rsp , err := b .provisionerClient .ProvisionerCreateBucket (ctx , req )
95
+ rsp , err := b .provisionerClient .DriverCreateBucket (ctx , req )
105
96
if err != nil {
106
97
if status .Code (err ) != codes .AlreadyExists {
107
98
klog .ErrorS (err , "Failed to create bucket" ,
@@ -111,7 +102,7 @@ func (b *BucketListener) Add(ctx context.Context, inputBucket *v1alpha1.Bucket)
111
102
112
103
}
113
104
if rsp == nil {
114
- err := errors .New ("ProvisionerCreateBucket returned a nil response" )
105
+ err := errors .New ("DriverCreateBucket returned a nil response" )
115
106
klog .ErrorS (err , "Internal Error" )
116
107
return err
117
108
}
@@ -120,8 +111,7 @@ func (b *BucketListener) Add(ctx context.Context, inputBucket *v1alpha1.Bucket)
120
111
bucket .Status .BucketID = rsp .BucketId
121
112
}
122
113
123
- bucket .Status .Message = "Bucket Provisioned"
124
- bucket .Status .BucketAvailable = true
114
+ bucket .Status .BucketReady = true
125
115
126
116
// if this step fails, then controller will retry with backoff
127
117
if _ , err := b .Buckets ().UpdateStatus (ctx , bucket , metav1.UpdateOptions {}); err != nil {
@@ -156,30 +146,33 @@ func (b *BucketListener) Delete(ctx context.Context, inputBucket *v1alpha1.Bucke
156
146
"bucketclass" , bucket .Spec .BucketClassName ,
157
147
)
158
148
159
- if ! strings .EqualFold (bucket .Spec .Provisioner , b .provisionerName ) {
149
+ if ! strings .EqualFold (bucket .Spec .DriverName , b .driverName ) {
160
150
klog .V (5 ).InfoS ("Skipping bucket for provisiner" ,
161
151
"bucket" , bucket .Name ,
162
- "provisioner " , bucket .Spec .Provisioner ,
152
+ "driver " , bucket .Spec .DriverName ,
163
153
)
164
154
return nil
165
155
}
166
156
167
- req := & cosi.ProvisionerDeleteBucketRequest {
168
- BucketId : bucket .Status .BucketID ,
169
- }
157
+ // We ask the driver to clean up the bucket from the storage provider
158
+ // only when the retain policy is set to Delete
159
+ if bucket .Spec .DeletionPolicy == bucketapi .DeletionPolicyDelete {
160
+ req := & cosi.DriverDeleteBucketRequest {
161
+ BucketId : bucket .Status .BucketID ,
162
+ }
170
163
171
- if _ , err := b .provisionerClient .ProvisionerDeleteBucket (ctx , req ); err != nil {
172
- if status .Code (err ) != codes .NotFound {
173
- klog .ErrorS (err , "Failed to delete bucket" ,
174
- "bucket" , bucket .Name ,
175
- )
176
- return err
164
+ if _ , err := b .provisionerClient .DriverDeleteBucket (ctx , req ); err != nil {
165
+ if status .Code (err ) != codes .NotFound {
166
+ klog .ErrorS (err , "Failed to delete bucket" ,
167
+ "bucket" , bucket .Name ,
168
+ )
169
+ return err
170
+ }
177
171
}
178
172
}
179
173
180
- // TODO, check bucket.Spec.DeletionPolicy
181
-
182
174
bucket .Status .BucketAvailable = false
175
+ bucket .Status .BucketID = ""
183
176
184
177
// if this step fails, then controller will retry with backoff
185
178
if _ , err := b .Buckets ().UpdateStatus (ctx , bucket , metav1.UpdateOptions {}); err != nil {
@@ -188,15 +181,15 @@ func (b *BucketListener) Delete(ctx context.Context, inputBucket *v1alpha1.Bucke
188
181
return errors .Wrap (err , "Failed to update bucket" )
189
182
}
190
183
191
- if bucket .Spec .BucketRequest != nil {
192
- ref := bucket .Spec .BucketRequest
193
- bucketRequest , err := b .bucketClient .ObjectstorageV1alpha1 ().BucketRequests (ref .Namespace ).Get (ctx , ref .Name , metav1.GetOptions {})
184
+ if bucket .Spec .BucketClaim != nil {
185
+ ref := bucket .Spec .BucketClaim
186
+ bucketClaim , err := b .bucketClient .ObjectstorageV1alpha1 ().BucketClaims (ref .Namespace ).Get (ctx , ref .Name , metav1.GetOptions {})
194
187
if err != nil {
195
188
return err
196
189
}
197
190
198
- controllerutil .RemoveFinalizer (bucketRequest , brFinalizer )
199
- if _ , err := b .bucketClient .ObjectstorageV1alpha1 ().BucketRequests ( bucketRequest .Namespace ).Update (ctx , bucketRequest , metav1.UpdateOptions {}); err != nil {
191
+ controllerutil .RemoveFinalizer (bucketClaim , brFinalizer )
192
+ if _ , err := b .bucketClient .ObjectstorageV1alpha1 ().BucketClaims ( bucketClaim .Namespace ).Update (ctx , bucketClaim , metav1.UpdateOptions {}); err != nil {
200
193
return err
201
194
}
202
195
}
0 commit comments