@@ -45,9 +45,11 @@ import (
4545 "github.com/openstack-k8s-operators/lib-common/modules/common/service"
4646 "github.com/openstack-k8s-operators/lib-common/modules/common/tls"
4747 manilav1 "github.com/openstack-k8s-operators/manila-operator/api/v1beta1"
48+ novav1 "github.com/openstack-k8s-operators/nova-operator/api/v1beta1"
4849 clientv1 "github.com/openstack-k8s-operators/openstack-operator/apis/client/v1beta1"
4950 corev1 "github.com/openstack-k8s-operators/openstack-operator/apis/core/v1beta1"
5051 ovnv1 "github.com/openstack-k8s-operators/ovn-operator/api/v1beta1"
52+ placementv1 "github.com/openstack-k8s-operators/placement-operator/api/v1beta1"
5153)
5254
5355var _ = Describe ("OpenStackOperator controller" , func () {
@@ -2931,6 +2933,14 @@ var _ = Describe("OpenStackOperator controller galera and rabbitmq", func() {
29312933 th .CreateCertSecret (names .RabbitMQCertName )
29322934 th .CreateCertSecret (names .RabbitMQCell1CertName )
29332935
2936+ // create cert secrets for ovn instance
2937+ DeferCleanup (k8sClient .Delete , ctx , th .CreateCertSecret (names .OVNNorthdCertName ))
2938+ DeferCleanup (k8sClient .Delete , ctx , th .CreateCertSecret (names .OVNControllerCertName ))
2939+ DeferCleanup (k8sClient .Delete , ctx , th .CreateCertSecret (names .NeutronOVNCertName ))
2940+
2941+ // create cert secrets for memcached instance
2942+ DeferCleanup (k8sClient .Delete , ctx , th .CreateCertSecret (names .MemcachedCertName ))
2943+
29342944 extGalera := CreateGaleraConfig (namespace , GetDefaultGaleraSpec ())
29352945 extGaleraName .Name = extGalera .GetName ()
29362946 extGaleraName .Namespace = extGalera .GetNamespace ()
@@ -3102,6 +3112,188 @@ var _ = Describe("OpenStackOperator controller galera and rabbitmq", func() {
31023112
31033113 })
31043114
3115+ When ("The novncproxy k8s service is created for cell1" , func () {
3116+ /*
3117+ update oscp toplevel tls
3118+ enable nova and depends
3119+ create novnc proxy service
3120+ find certs
3121+ find routes
3122+
3123+ delete novnc service
3124+
3125+ verify certs and routes
3126+ */
3127+
3128+ BeforeEach (func () {
3129+
3130+ // enable TLS
3131+ Eventually (func (g Gomega ) {
3132+ OSCtlplane := GetOpenStackControlPlane (names .OpenStackControlplaneName )
3133+ OSCtlplane .Spec .TLS .PodLevel .Enabled = true
3134+ g .Expect (k8sClient .Update (ctx , OSCtlplane )).Should (Succeed ())
3135+ }, timeout , interval ).Should (Succeed ())
3136+
3137+ // enable Nova and dependencies
3138+ Eventually (func (g Gomega ) {
3139+ OSCtlplane := GetOpenStackControlPlane (names .OpenStackControlplaneName )
3140+ OSCtlplane .Spec .Nova .Enabled = true
3141+ OSCtlplane .Spec .Nova .Template = & novav1.NovaSpecCore {}
3142+ // enable "Galera, Memcached, RabbitMQ, Keystone, Glance, Neutron, Placement" too
3143+
3144+ OSCtlplane .Spec .Keystone .Enabled = true
3145+ OSCtlplane .Spec .Glance .Enabled = true
3146+ OSCtlplane .Spec .Neutron .Enabled = true
3147+ OSCtlplane .Spec .Placement .Enabled = true
3148+
3149+ if OSCtlplane .Spec .Placement .Template == nil {
3150+ OSCtlplane .Spec .Placement .Template = & placementv1.PlacementAPISpecCore {}
3151+ OSCtlplane .Spec .Placement .Template .APITimeout = 10
3152+ }
3153+ g .Expect (k8sClient .Update (ctx , OSCtlplane )).Should (Succeed ())
3154+ }, timeout , interval ).Should (Succeed ())
3155+
3156+ // logger.Info("XXX OpenStackControlPlane updated")
3157+ // OSCtlplane := GetOpenStackControlPlane(names.OpenStackControlplaneName)
3158+ // th.Logger.Info("", "XXX OSCtlplane", OSCtlplane)
3159+
3160+ // nova-novncproxy-cell1-public
3161+ novncProxyPublicSvcName := types.NamespacedName {
3162+ Name : "nova-novncproxy-cell1-public" ,
3163+ Namespace : namespace }
3164+
3165+ th .CreateService (
3166+ novncProxyPublicSvcName ,
3167+ map [string ]string {
3168+ "osctlplane-service" : "nova-novncproxy" ,
3169+ "osctlplane" : "" ,
3170+ "cell" : "cell1" ,
3171+ },
3172+ k8s_corev1.ServiceSpec {
3173+ Ports : []k8s_corev1.ServicePort {
3174+ {
3175+ Name : "nova-novncproxy-cell1-public" ,
3176+ Port : int32 (6080 ),
3177+ Protocol : k8s_corev1 .ProtocolTCP ,
3178+ },
3179+ },
3180+ })
3181+
3182+ novncProxySvc := th .GetService (novncProxyPublicSvcName )
3183+
3184+ if novncProxySvc .Annotations == nil {
3185+ novncProxySvc .Annotations = map [string ]string {}
3186+ }
3187+
3188+ novncProxySvc .Annotations [service .AnnotationIngressCreateKey ] = "true"
3189+ novncProxySvc .Annotations [service .AnnotationEndpointKey ] = "public"
3190+
3191+ Expect (th .K8sClient .Status ().Update (th .Ctx , novncProxySvc )).To (Succeed ())
3192+ // novncProxySvc = th.GetService(novncProxyPublicSvcName)
3193+ // logger.Info("", "XXX novncproxy labels", novncProxySvc.Labels)
3194+
3195+ // vnproxy certs
3196+ DeferCleanup (k8sClient .Delete , ctx , th .CreateCertSecret (names .NoVNCProxyCell1CertPublicRouteName ))
3197+ DeferCleanup (k8sClient .Delete , ctx , th .CreateCertSecret (names .NoVNCProxyCell1CertPublicSvcName ))
3198+ DeferCleanup (k8sClient .Delete , ctx , th .CreateCertSecret (names .NoVNCProxyCell1CertVencryptName ))
3199+
3200+ })
3201+
3202+ It ("cell1 novncproxy certs should be deleted" , func () {
3203+
3204+ nova := & novav1.Nova {}
3205+ novaNamespace := types.NamespacedName {Name : "nova" , Namespace : namespace }
3206+ // Eventually(func(g Gomega) {
3207+ // g.Expect(k8sClient.Get(ctx, novaNamespace, nova)).Should(Succeed())
3208+ // }, timeout, interval).Should(Succeed())
3209+
3210+ // th.Logger.Info("", "XXX nova", nova)
3211+
3212+ certNames := []types.NamespacedName {
3213+ {Name : "nova-novncproxy-cell1-public-route" , Namespace : namespace },
3214+ {Name : "nova-novncproxy-cell1-public-svc" , Namespace : namespace },
3215+ {Name : "nova-novncproxy-cell1-vencrypt" , Namespace : namespace },
3216+ }
3217+
3218+ // verify all certs for novncproxy exists
3219+ Eventually (func (g Gomega ) {
3220+ for _ , certName := range certNames {
3221+ cert := crtmgr .GetCert (certName )
3222+ g .Expect (cert ).NotTo (BeNil ())
3223+ }
3224+ }, timeout , interval ).Should (Succeed ())
3225+
3226+ // verify route is present
3227+ Eventually (func (g Gomega ) {
3228+ novncproxyRouteName := types.NamespacedName {Name : "nova-novncproxy-cell1-public" , Namespace : namespace }
3229+ novncproxyRoute := & routev1.Route {}
3230+
3231+ g .Expect (th .K8sClient .Get (th .Ctx , novncproxyRouteName , novncproxyRoute )).Should (Succeed ())
3232+ g .Expect (novncproxyRoute .Spec .TLS .Certificate ).Should (Not (BeEmpty ()))
3233+ g .Expect (novncproxyRoute .Spec .TLS .Key ).Should (Not (BeEmpty ()))
3234+ g .Expect (novncproxyRoute .Spec .TLS .CACertificate ).Should (Not (BeEmpty ()))
3235+ }, timeout , interval ).Should (Succeed ())
3236+
3237+ novncProxyPublicSvcName := types.NamespacedName {
3238+ Name : "nova-novncproxy-cell1-public" ,
3239+ Namespace : namespace }
3240+
3241+ th .DeleteService (novncProxyPublicSvcName )
3242+
3243+ // simulate cell1 deletion jobsuccess !!
3244+
3245+ // remove cell1 from nova
3246+ Eventually (func (g Gomega ) {
3247+ g .Expect (k8sClient .Get (ctx , novaNamespace , nova )).Should (Succeed ())
3248+ delete (nova .Spec .CellTemplates , "cell1" )
3249+ g .Expect (k8sClient .Update (ctx , nova )).To (Succeed ())
3250+ }, timeout , interval ).Should (Succeed ())
3251+
3252+ // Eventually(func(g Gomega) {
3253+ // g.Expect(k8sClient.Get(ctx, novaNamespace, nova)).Should(Succeed())
3254+ // }, timeout, interval).Should(Succeed())
3255+
3256+ // th.Logger.Info("", "XXX nova 1", nova)
3257+
3258+ // remove from oscp
3259+ Eventually (func (g Gomega ) {
3260+ OSCtlplane := GetOpenStackControlPlane (names .OpenStackControlplaneName )
3261+ OSCtlplane .Spec .TLS .PodLevel .Enabled = true
3262+ delete (OSCtlplane .Spec .Nova .Template .CellTemplates , "cell1" )
3263+ g .Expect (k8sClient .Update (ctx , OSCtlplane )).Should (Succeed ())
3264+ }, timeout , interval ).Should (Succeed ())
3265+
3266+ // OSCtlplane := GetOpenStackControlPlane(names.OpenStackControlplaneName)
3267+ // th.Logger.Info("", "XXX oscp", OSCtlplane)
3268+
3269+ // // verify all certs for novncproxy
3270+ // Eventually(func(g Gomega) {
3271+ // for _, certName := range certNames {
3272+ // cert := crtmgr.GetCert(certName)
3273+ // g.Expect(cert).To(BeNil())
3274+ // }
3275+ // }, timeout, interval).Should(Succeed())
3276+
3277+ certs := crtmgr .GetCerts (namespace )
3278+ for _ , cert := range certs .Items {
3279+ th .Logger .Info ("XXX---" , "" , cert .Name )
3280+
3281+ }
3282+
3283+ // Eventually(func(g Gomega) {
3284+ // novncproxyRouteName := types.NamespacedName{Name: "nova-novncproxy-cell1-public", Namespace: namespace}
3285+ // novncproxyRoute := &routev1.Route{}
3286+
3287+ // g.Expect(th.K8sClient.Get(th.Ctx, novncproxyRouteName, novncproxyRoute)).Should(Succeed())
3288+ // g.Expect(novncproxyRoute.Spec.TLS.Certificate).Should(Not(BeEmpty()))
3289+ // g.Expect(novncproxyRoute.Spec.TLS.Key).Should(Not(BeEmpty()))
3290+ // g.Expect(novncproxyRoute.Spec.TLS.CACertificate).Should(Not(BeEmpty()))
3291+ // }, timeout, interval).Should(Succeed())
3292+
3293+ })
3294+
3295+ })
3296+
31053297 })
31063298
31073299})
0 commit comments