8
8
"github.com/redhat-appstudio/image-controller/pkg/quay"
9
9
"github.com/redhat-appstudio/jvm-build-service/pkg/reconciler/systemconfig"
10
10
"github.com/redhat-appstudio/service-provider-integration-operator/api/v1beta1"
11
- "go.uber.org/multierr"
12
11
"regexp"
13
12
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
14
13
"sort"
@@ -38,7 +37,6 @@ import (
38
37
const (
39
38
TlsServiceName = v1alpha1 .CacheDeploymentName + "-tls"
40
39
TestRegistry = "jvmbuildservice.io/test-registry"
41
- JBSConfigFinalizer = "jvmbuildservice.io/jbsconfig-finalizer"
42
40
ImageRepositoryFinalizer = "jvmbuildservice.io/quay-repository-finalizer"
43
41
DeleteImageRepositoryAnnotationName = "image.redhat.com/delete-image-repo"
44
42
UploadSecretName = "jvm-build-service-temp-upload-secret" //#nosec
@@ -84,25 +82,15 @@ func (r *ReconcilerJBSConfig) Reconcile(ctx context.Context, request reconcile.R
84
82
jbsConfig := v1alpha1.JBSConfig {}
85
83
err := r .client .Get (ctx , request .NamespacedName , & jbsConfig )
86
84
if err != nil {
87
- fmt .Printf ("### Reconcile::afterClientGet for %s with error %s and jbsconfig %s\n " , request .Name , err ,
88
- jbsConfig .DeletionTimestamp .IsZero ())
89
- // Deleted JBSConfig - delete cache resources
90
- // if errors.IsNotFound(err) && request.Name == v1alpha1.JBSConfigName {
91
- //// return r.handleConfigDeleted(ctx, request, log)
92
- // }
93
85
return reconcile.Result {}, err
94
86
}
95
87
if ! jbsConfig .DeletionTimestamp .IsZero () {
96
88
// The object is being deleted.
97
- fmt .Printf ("### Reconcile::deletiontimestamp %s \n " , jbsConfig .DeletionTimestamp .String ())
98
- return reconcile.Result {}, multierr .Append (r .handlePossibleJBCConfigCleanup (ctx , & jbsConfig , log , request ), r .handlePossibleRepositoryCleanup (ctx , & jbsConfig , log ))
89
+ return reconcile.Result {}, r .handlePossibleRepositoryCleanup (ctx , & jbsConfig , log )
99
90
}
100
91
101
92
//TODO do we eventually want to allow more than one JBSConfig per namespace?
102
93
if jbsConfig .Name == v1alpha1 .JBSConfigName {
103
- if err := r .insertFinalizerIfMissing (ctx , & jbsConfig , log ); err != nil {
104
- return reconcile.Result {}, err
105
- }
106
94
systemConfig := v1alpha1.SystemConfig {}
107
95
err := r .client .Get (ctx , types.NamespacedName {Name : systemconfig .SystemConfigKey }, & systemConfig )
108
96
if err != nil {
@@ -124,7 +112,7 @@ func (r *ReconcilerJBSConfig) Reconcile(ctx context.Context, request reconcile.R
124
112
return reconcile.Result {}, nil
125
113
}
126
114
127
- err = r .deploymentSupportObjects (ctx , log , request , & jbsConfig )
115
+ err = r .deploymentSupportObjects (ctx , request , & jbsConfig )
128
116
if err != nil {
129
117
return reconcile.Result {}, err
130
118
}
@@ -172,89 +160,13 @@ func (r *ReconcilerJBSConfig) handlePossibleRepositoryCleanup(ctx context.Contex
172
160
return nil
173
161
}
174
162
175
- func (r * ReconcilerJBSConfig ) handleConfigDeleted (ctx context.Context , request reconcile.Request , log logr.Logger ) {
176
-
177
- fmt .Printf ("### handleConfigDeleted for %s\n " , request .Namespace )
178
- service := & corev1.Service {}
179
- service .Name = v1alpha1 .CacheDeploymentName
180
- service .Namespace = request .Namespace
181
- err := r .client .Delete (ctx , service )
182
- if err != nil && ! errors .IsNotFound (err ) {
183
- msg := fmt .Sprintf ("Unable to delete service - %s" , err .Error ())
184
- log .Error (err , msg )
185
- r .eventRecorder .Event (service , corev1 .EventTypeWarning , msg , "" )
186
- }
187
- service = & corev1.Service {}
188
- service .Name = TlsServiceName
189
- service .Namespace = request .Namespace
190
- err = r .client .Delete (ctx , service )
191
- if err != nil && ! errors .IsNotFound (err ) {
192
- msg := fmt .Sprintf ("Unable to delete service - %s" , err .Error ())
193
- log .Error (err , msg )
194
- r .eventRecorder .Event (service , corev1 .EventTypeWarning , msg , "" )
195
- }
196
- tlsConfigMap := & corev1.ConfigMap {}
197
- tlsConfigMap .Name = v1alpha1 .TlsConfigMapName
198
- tlsConfigMap .Namespace = request .Namespace
199
- err = r .client .Delete (ctx , tlsConfigMap )
200
- if err != nil && ! errors .IsNotFound (err ) {
201
- msg := fmt .Sprintf ("Unable to delete configmap - %s" , err .Error ())
202
- log .Error (err , msg )
203
- r .eventRecorder .Event (service , corev1 .EventTypeWarning , msg , "" )
204
- }
205
- serviceAccount := & corev1.ServiceAccount {}
206
- serviceAccount .Name = v1alpha1 .CacheDeploymentName
207
- serviceAccount .Namespace = request .Namespace
208
- err = r .client .Delete (ctx , serviceAccount )
209
- if err != nil && ! errors .IsNotFound (err ) {
210
- msg := fmt .Sprintf ("Unable to delete serviceAccount - %s" , err .Error ())
211
- log .Error (err , msg )
212
- r .eventRecorder .Event (serviceAccount , corev1 .EventTypeWarning , msg , "" )
213
- }
214
- roleBinding := & rbacv1.RoleBinding {}
215
- roleBinding .Name = v1alpha1 .CacheDeploymentName
216
- roleBinding .Namespace = request .Namespace
217
- err = r .client .Delete (ctx , roleBinding )
218
- if err != nil && ! errors .IsNotFound (err ) {
219
- msg := fmt .Sprintf ("Unable to delete roleBinding - %s" , err .Error ())
220
- log .Error (err , msg )
221
- r .eventRecorder .Event (roleBinding , corev1 .EventTypeWarning , msg , "" )
222
- }
223
- deployment := & appsv1.Deployment {}
224
- deployment .Name = v1alpha1 .CacheDeploymentName
225
- deployment .Namespace = request .Namespace
226
- err = r .client .Delete (ctx , deployment )
227
- if err != nil && ! errors .IsNotFound (err ) {
228
- msg := fmt .Sprintf ("Unable to delete deployment - %s" , err .Error ())
229
- log .Error (err , msg )
230
- r .eventRecorder .Event (deployment , corev1 .EventTypeWarning , msg , "" )
231
- }
232
- pvc := & corev1.PersistentVolumeClaim {}
233
- pvc .Name = v1alpha1 .CacheDeploymentName
234
- pvc .Namespace = request .Namespace
235
- err = r .client .Delete (ctx , pvc )
236
- if err != nil && ! errors .IsNotFound (err ) {
237
- msg := fmt .Sprintf ("Unable to delete PersistentVolumeClaim - %s" , err .Error ())
238
- log .Error (err , msg )
239
- r .eventRecorder .Event (deployment , corev1 .EventTypeWarning , msg , "" )
240
- }
241
- binding := & v1beta1.SPIAccessTokenBinding {}
242
- binding .Name = v1alpha1 .ImageSecretName
243
- binding .Namespace = request .Namespace
244
- err = r .client .Delete (ctx , binding )
245
- if err != nil && ! errors .IsNotFound (err ) {
246
- msg := fmt .Sprintf ("Unable to delete SPIAccessTokenBinding - %s" , err .Error ())
247
- log .Error (err , msg )
248
- r .eventRecorder .Event (deployment , corev1 .EventTypeWarning , msg , "" )
249
- }
250
- }
251
-
252
163
func settingOrDefault (setting , def string ) string {
253
164
if len (strings .TrimSpace (setting )) == 0 {
254
165
return def
255
166
}
256
167
return setting
257
168
}
169
+
258
170
func generateRobotAccountName (component * v1alpha1.JBSConfig ) string {
259
171
robotAccountName := component .Namespace + component .Name
260
172
robotAccountName = strings .Replace (robotAccountName , "-" , "_" , - 1 )
@@ -334,8 +246,7 @@ func (r *ReconcilerJBSConfig) validations(ctx context.Context, log logr.Logger,
334
246
if r .spiPresent {
335
247
return r .handleNoImageSecretFound (ctx , jbsConfig )
336
248
} else {
337
- errorMessage := "Secret jvm-build-image-secrets not found, and SPI not installed. Rebuilds not possible."
338
- return errors2 .New (errorMessage )
249
+ return errors2 .New ("secret jvm-build-image-secrets not found, and SPI not installed. Rebuilds not possible" )
339
250
}
340
251
341
252
}
@@ -360,7 +271,7 @@ func (r *ReconcilerJBSConfig) validations(ctx context.Context, log logr.Logger,
360
271
return nil
361
272
}
362
273
363
- func (r * ReconcilerJBSConfig ) deploymentSupportObjects (ctx context.Context , log logr. Logger , request reconcile.Request , jbsConfig * v1alpha1.JBSConfig ) error {
274
+ func (r * ReconcilerJBSConfig ) deploymentSupportObjects (ctx context.Context , request reconcile.Request , jbsConfig * v1alpha1.JBSConfig ) error {
364
275
//TODO may have to switch to ephemeral storage for KCP until storage story there is sorted out
365
276
pvc := corev1.PersistentVolumeClaim {}
366
277
deploymentName := types.NamespacedName {Namespace : request .Namespace , Name : v1alpha1 .CacheDeploymentName }
@@ -376,8 +287,11 @@ func (r *ReconcilerJBSConfig) deploymentSupportObjects(ctx context.Context, log
376
287
return err
377
288
}
378
289
pvc .Spec .Resources .Requests = map [corev1.ResourceName ]resource.Quantity {"storage" : qty }
379
- err = r .client .Create (ctx , & pvc )
380
- if err != nil {
290
+
291
+ if err := controllerutil .SetOwnerReference (jbsConfig , & pvc , r .scheme ); err != nil {
292
+ return err
293
+ }
294
+ if err := r .client .Create (ctx , & pvc ); err != nil {
381
295
return err
382
296
}
383
297
}
@@ -403,8 +317,10 @@ func (r *ReconcilerJBSConfig) deploymentSupportObjects(ctx context.Context, log
403
317
Selector : map [string ]string {"app" : v1alpha1 .CacheDeploymentName },
404
318
},
405
319
}
406
- err := r .client .Create (ctx , & service )
407
- if err != nil {
320
+ if err := controllerutil .SetOwnerReference (jbsConfig , & service , r .scheme ); err != nil {
321
+ return err
322
+ }
323
+ if err := r .client .Create (ctx , & service ); err != nil {
408
324
return err
409
325
}
410
326
}
@@ -431,8 +347,10 @@ func (r *ReconcilerJBSConfig) deploymentSupportObjects(ctx context.Context, log
431
347
Selector : map [string ]string {"app" : v1alpha1 .CacheDeploymentName },
432
348
},
433
349
}
434
- err := r .client .Create (ctx , & service )
435
- if err != nil {
350
+ if err := controllerutil .SetOwnerReference (jbsConfig , & service , r .scheme ); err != nil {
351
+ return err
352
+ }
353
+ if err := r .client .Create (ctx , & service ); err != nil {
436
354
return err
437
355
}
438
356
}
@@ -449,8 +367,10 @@ func (r *ReconcilerJBSConfig) deploymentSupportObjects(ctx context.Context, log
449
367
Annotations : map [string ]string {"service.beta.openshift.io/inject-cabundle" : "true" },
450
368
},
451
369
}
452
- err := r .client .Create (ctx , & service )
453
- if err != nil {
370
+ if err := controllerutil .SetOwnerReference (jbsConfig , & service , r .scheme ); err != nil {
371
+ return err
372
+ }
373
+ if err := r .client .Create (ctx , & service ); err != nil {
454
374
return err
455
375
}
456
376
}
@@ -465,8 +385,10 @@ func (r *ReconcilerJBSConfig) deploymentSupportObjects(ctx context.Context, log
465
385
sa := corev1.ServiceAccount {}
466
386
sa .Name = v1alpha1 .CacheDeploymentName
467
387
sa .Namespace = request .Namespace
468
- err := r .client .Create (ctx , & sa )
469
- if err != nil {
388
+ if err := controllerutil .SetOwnerReference (jbsConfig , & sa , r .scheme ); err != nil {
389
+ return err
390
+ }
391
+ if err := r .client .Create (ctx , & sa ); err != nil {
470
392
return err
471
393
}
472
394
}
@@ -481,8 +403,10 @@ func (r *ReconcilerJBSConfig) deploymentSupportObjects(ctx context.Context, log
481
403
cb .Namespace = request .Namespace
482
404
cb .RoleRef = rbacv1.RoleRef {Kind : "ClusterRole" , Name : "hacbs-jvm-cache" , APIGroup : "rbac.authorization.k8s.io" }
483
405
cb .Subjects = []rbacv1.Subject {{Kind : "ServiceAccount" , Name : v1alpha1 .CacheDeploymentName , Namespace : request .Namespace }}
484
- err := r .client .Create (ctx , & cb )
485
- if err != nil {
406
+ if err = controllerutil .SetOwnerReference (jbsConfig , & cb , r .scheme ); err != nil {
407
+ return err
408
+ }
409
+ if err := r .client .Create (ctx , & cb ); err != nil {
486
410
return err
487
411
}
488
412
}
@@ -509,7 +433,7 @@ func (r *ReconcilerJBSConfig) cacheDeployment(ctx context.Context, log logr.Logg
509
433
cache .Spec .Replicas = & replicas
510
434
cache .Spec .Strategy = appsv1.DeploymentStrategy {Type : appsv1 .RecreateDeploymentStrategyType }
511
435
cache .Spec .Selector = & metav1.LabelSelector {MatchLabels : map [string ]string {"app" : v1alpha1 .CacheDeploymentName }}
512
- cache .Spec .Template .ObjectMeta . Labels = map [string ]string {"app" : v1alpha1 .CacheDeploymentName }
436
+ cache .Spec .Template .Labels = map [string ]string {"app" : v1alpha1 .CacheDeploymentName }
513
437
cache .Spec .Template .Spec .Containers = []corev1.Container {{
514
438
Name : v1alpha1 .CacheDeploymentName ,
515
439
ImagePullPolicy : corev1 .PullIfNotPresent ,
@@ -676,6 +600,9 @@ func (r *ReconcilerJBSConfig) cacheDeployment(ctx context.Context, log logr.Logg
676
600
}
677
601
678
602
if create {
603
+ if err := controllerutil .SetOwnerReference (jbsConfig , cache , r .scheme ); err != nil {
604
+ return err
605
+ }
679
606
return r .client .Create (ctx , cache )
680
607
} else {
681
608
return r .client .Update (ctx , cache )
@@ -828,35 +755,6 @@ func (r *ReconcilerJBSConfig) generateImageRepository(log logr.Logger, component
828
755
return repo , robotAccount , nil
829
756
}
830
757
831
- func (r * ReconcilerJBSConfig ) insertFinalizerIfMissing (ctx context.Context , jbsConfig * v1alpha1.JBSConfig , log logr.Logger ) error {
832
- if ! controllerutil .ContainsFinalizer (jbsConfig , JBSConfigFinalizer ) {
833
- fmt .Printf ("### Adding finalizer %s to %s\n " , JBSConfigFinalizer , jbsConfig .GetFinalizers ())
834
- controllerutil .AddFinalizer (jbsConfig , JBSConfigFinalizer )
835
- if err := r .client .Update (ctx , jbsConfig ); err != nil {
836
- log .Error (err , "Failed to add JBSConfig repository finalizer" )
837
- return err
838
- }
839
- }
840
- return nil
841
- }
842
-
843
- func (r * ReconcilerJBSConfig ) handlePossibleJBCConfigCleanup (ctx context.Context , jbsConfig * v1alpha1.JBSConfig , log logr.Logger , request reconcile.Request ) error {
844
- if controllerutil .ContainsFinalizer (jbsConfig , JBSConfigFinalizer ) {
845
- fmt .Printf ("### Removing finalizer %s to %s\n " , JBSConfigFinalizer , jbsConfig .GetFinalizers ())
846
-
847
- if request .Name == v1alpha1 .JBSConfigName {
848
- r .handleConfigDeleted (ctx , request , log )
849
- }
850
-
851
- controllerutil .RemoveFinalizer (jbsConfig , JBSConfigFinalizer )
852
- if err := r .client .Update (ctx , jbsConfig ); err != nil {
853
- log .Error (err , "Failed to remove JBSConfig finalizer" )
854
- return err
855
- }
856
- }
857
- return nil
858
- }
859
-
860
758
// generateSecret dumps the robot account token into a Secret for future consumption.
861
759
func generateSecret (c * v1alpha1.JBSConfig , r quay.RobotAccount , imageURL string , spiPresent bool ) corev1.Secret {
862
760
secret := corev1.Secret {
0 commit comments