@@ -441,3 +441,132 @@ var _ = Describe("FeatureStore Controller - Feast service TLS", func() {
441
441
})
442
442
})
443
443
})
444
+
445
+ var _ = Describe ("Test mountCustomCABundle functionality" , func () {
446
+ const resourceName = "test-cabundle"
447
+ const feastProject = "test_cabundle"
448
+ const configMapName = "odh-trusted-ca-bundle"
449
+ const caBundleAnnotation = "config.openshift.io/inject-trusted-cabundle"
450
+ const tlsPathCustomCABundle = "/etc/pki/tls/custom-certs/ca-bundle.crt"
451
+
452
+ ctx := context .Background ()
453
+ nsName := types.NamespacedName {
454
+ Name : resourceName ,
455
+ Namespace : "default" ,
456
+ }
457
+
458
+ fs := & feastdevv1alpha1.FeatureStore {
459
+ ObjectMeta : metav1.ObjectMeta {
460
+ Name : resourceName ,
461
+ Namespace : nsName .Namespace ,
462
+ },
463
+ Spec : feastdevv1alpha1.FeatureStoreSpec {
464
+ FeastProject : feastProject ,
465
+ Services : & feastdevv1alpha1.FeatureStoreServices {
466
+ Registry : & feastdevv1alpha1.Registry {Local : & feastdevv1alpha1.LocalRegistryConfig {Server : & feastdevv1alpha1.ServerConfigs {}}},
467
+ OnlineStore : & feastdevv1alpha1.OnlineStore {Server : & feastdevv1alpha1.ServerConfigs {}},
468
+ OfflineStore : & feastdevv1alpha1.OfflineStore {Server : & feastdevv1alpha1.ServerConfigs {}},
469
+ UI : & feastdevv1alpha1.ServerConfigs {},
470
+ },
471
+ },
472
+ }
473
+
474
+ AfterEach (func () {
475
+ By ("cleaning up FeatureStore and ConfigMap" )
476
+ _ = k8sClient .Delete (ctx , & feastdevv1alpha1.FeatureStore {ObjectMeta : metav1.ObjectMeta {Name : resourceName , Namespace : nsName .Namespace }})
477
+ _ = k8sClient .Delete (ctx , & corev1.ConfigMap {ObjectMeta : metav1.ObjectMeta {Name : configMapName , Namespace : nsName .Namespace }})
478
+ })
479
+
480
+ It ("should mount CA bundle volume and mounts in containers when ConfigMap exists" , func () {
481
+ cm := & corev1.ConfigMap {
482
+ ObjectMeta : metav1.ObjectMeta {
483
+ Name : configMapName ,
484
+ Namespace : nsName .Namespace ,
485
+ Labels : map [string ]string {
486
+ caBundleAnnotation : "true" ,
487
+ },
488
+ },
489
+ }
490
+ Expect (k8sClient .Create (ctx , cm .DeepCopy ())).To (Succeed ())
491
+ Expect (k8sClient .Create (ctx , fs .DeepCopy ())).To (Succeed ())
492
+
493
+ controllerReconciler := & FeatureStoreReconciler {
494
+ Client : k8sClient ,
495
+ Scheme : k8sClient .Scheme (),
496
+ }
497
+
498
+ _ , err := controllerReconciler .Reconcile (ctx , reconcile.Request {
499
+ NamespacedName : nsName ,
500
+ })
501
+ Expect (err ).NotTo (HaveOccurred ())
502
+
503
+ resource := & feastdevv1alpha1.FeatureStore {}
504
+ err = k8sClient .Get (ctx , nsName , resource )
505
+ Expect (err ).NotTo (HaveOccurred ())
506
+
507
+ feast := services.FeastServices {
508
+ Handler : handler.FeastHandler {
509
+ Client : controllerReconciler .Client ,
510
+ Context : ctx ,
511
+ Scheme : controllerReconciler .Scheme ,
512
+ FeatureStore : resource ,
513
+ },
514
+ }
515
+
516
+ deploy := & appsv1.Deployment {}
517
+ objMeta := feast .GetObjectMeta ()
518
+ err = k8sClient .Get (ctx , types.NamespacedName {
519
+ Name : objMeta .Name ,
520
+ Namespace : objMeta .Namespace ,
521
+ }, deploy )
522
+ Expect (err ).NotTo (HaveOccurred ())
523
+
524
+ Expect (deploy .Spec .Template .Spec .Volumes ).To (ContainElement (HaveField ("Name" , configMapName )))
525
+ for _ , container := range deploy .Spec .Template .Spec .Containers {
526
+ Expect (container .VolumeMounts ).To (ContainElement (SatisfyAll (
527
+ HaveField ("Name" , configMapName ),
528
+ HaveField ("MountPath" , tlsPathCustomCABundle ),
529
+ )))
530
+ }
531
+ })
532
+
533
+ It ("should not mount CA bundle volume or container mounts when ConfigMap is absent" , func () {
534
+ Expect (k8sClient .Create (ctx , fs .DeepCopy ())).To (Succeed ())
535
+
536
+ controllerReconciler := & FeatureStoreReconciler {
537
+ Client : k8sClient ,
538
+ Scheme : k8sClient .Scheme (),
539
+ }
540
+
541
+ _ , err := controllerReconciler .Reconcile (ctx , reconcile.Request {
542
+ NamespacedName : nsName ,
543
+ })
544
+ Expect (err ).NotTo (HaveOccurred ())
545
+
546
+ resource := & feastdevv1alpha1.FeatureStore {}
547
+ err = k8sClient .Get (ctx , nsName , resource )
548
+ Expect (err ).NotTo (HaveOccurred ())
549
+
550
+ feast := services.FeastServices {
551
+ Handler : handler.FeastHandler {
552
+ Client : controllerReconciler .Client ,
553
+ Context : ctx ,
554
+ Scheme : controllerReconciler .Scheme ,
555
+ FeatureStore : resource ,
556
+ },
557
+ }
558
+
559
+ deploy := & appsv1.Deployment {}
560
+ objMeta := feast .GetObjectMeta ()
561
+ err = k8sClient .Get (ctx , types.NamespacedName {
562
+ Name : objMeta .Name ,
563
+ Namespace : objMeta .Namespace ,
564
+ }, deploy )
565
+ Expect (err ).NotTo (HaveOccurred ())
566
+
567
+ Expect (deploy .Spec .Template .Spec .Volumes ).NotTo (ContainElement (HaveField ("Name" , configMapName )))
568
+ for _ , container := range deploy .Spec .Template .Spec .Containers {
569
+ Expect (container .VolumeMounts ).NotTo (ContainElement (HaveField ("Name" , configMapName )))
570
+ }
571
+ })
572
+ })
0 commit comments