@@ -55,41 +55,50 @@ func ReconcileNova(ctx context.Context, instance *corev1beta1.OpenStackControlPl
5555 return ctrl.Result {}, nil
5656 }
5757
58- // add selector to service overrides
58+ // When component services got created check if there is the need to create routes and certificates
59+ if err := helper .GetClient ().Get (ctx , types.NamespacedName {Name : "nova" , Namespace : instance .Namespace }, nova ); err != nil {
60+ if ! k8s_errors .IsNotFound (err ) {
61+ return ctrl.Result {}, err
62+ }
63+ }
64+
65+ // Add selectors to service overrides for api, metadata and novncproxy
66+ // NovaAPI
5967 for _ , endpointType := range []service.Endpoint {service .EndpointPublic , service .EndpointInternal } {
60- // NovaAPI
6168 if instance .Spec .Nova .Template .APIServiceTemplate .Override .Service == nil {
6269 instance .Spec .Nova .Template .APIServiceTemplate .Override .Service = map [service.Endpoint ]service.RoutedOverrideSpec {}
6370 }
6471 instance .Spec .Nova .Template .APIServiceTemplate .Override .Service [endpointType ] =
6572 AddServiceComponentLabel (
6673 instance .Spec .Nova .Template .APIServiceTemplate .Override .Service [endpointType ],
6774 nova .Name + "-api" )
75+ }
6876
69- // cell NoVNCProxy service override
70- for cellName , cellTemplate := range instance .Spec .Nova .Template .CellTemplates {
71- // skip adding override for all the cells where novncproxy is disabled
72- if cellTemplate .NoVNCProxyServiceTemplate .Enabled == ptr .To (false ) {
73- continue
74- }
77+ // NovaMetadata
78+ if metadataEnabled (instance .Spec .Nova .Template .MetadataServiceTemplate ) {
79+ if instance .Spec .Nova .Template .MetadataServiceTemplate .Override .Service == nil {
80+ instance .Spec .Nova .Template .MetadataServiceTemplate .Override .Service = & service.OverrideSpec {}
81+ }
82+ instance .Spec .Nova .Template .MetadataServiceTemplate .Override .Service .AddLabel (centralMetadataLabelMap (nova .Name ))
83+ }
84+ // Cells
85+ for cellName , cellTemplate := range instance .Spec .Nova .Template .CellTemplates {
86+ // add override where novncproxy enabled is not specified or explicitely set to true
87+ if noVNCProxyEnabled (cellTemplate .NoVNCProxyServiceTemplate ) {
7588 if cellTemplate .NoVNCProxyServiceTemplate .Override .Service == nil {
7689 cellTemplate .NoVNCProxyServiceTemplate .Override .Service = & service.RoutedOverrideSpec {}
7790 }
78-
79- * cellTemplate .NoVNCProxyServiceTemplate .Override .Service =
80- AddServiceComponentLabel (
81- * cellTemplate .NoVNCProxyServiceTemplate .Override .Service ,
82- getNoVNCProxyServiceLabel (nova .Name , cellName ))
83-
84- instance .Spec .Nova .Template .CellTemplates [cellName ] = cellTemplate
91+ cellTemplate .NoVNCProxyServiceTemplate .Override .Service .AddLabel (getNoVNCProxyLabelMap (nova .Name , cellName ))
8592 }
86- }
8793
88- // When component services got created check if there is the need to create a route
89- if err := helper .GetClient ().Get (ctx , types.NamespacedName {Name : "nova" , Namespace : instance .Namespace }, nova ); err != nil {
90- if ! k8s_errors .IsNotFound (err ) {
91- return ctrl.Result {}, err
94+ // add override where metadata enabled is set to true
95+ if metadataEnabled (cellTemplate .MetadataServiceTemplate ) {
96+ if cellTemplate .MetadataServiceTemplate .Override .Service == nil {
97+ cellTemplate .MetadataServiceTemplate .Override .Service = & service.OverrideSpec {}
98+ }
99+ cellTemplate .MetadataServiceTemplate .Override .Service .AddLabel (cellMetadataLabelMap (nova .Name , cellName ))
92100 }
101+ instance .Spec .Nova .Template .CellTemplates [cellName ] = cellTemplate
93102 }
94103
95104 // Nova API
@@ -125,53 +134,48 @@ func ReconcileNova(ctx context.Context, instance *corev1beta1.OpenStackControlPl
125134 }
126135
127136 if nova .Status .Conditions .IsTrue (novav1 .NovaAllCellsReadyCondition ) {
128- // cell NoVNCProxy
137+ // cell Metadata and NoVNCProxy
129138 for cellName , cellTemplate := range instance .Spec .Nova .Template .CellTemplates {
130- // skip checking for/creating route if service is not enabled
131- if cellTemplate .NoVNCProxyServiceTemplate .Enabled == ptr .To (false ) {
132- continue
133- }
139+ // NoVNCProxy check for/creating route if service is enabled
140+ if noVNCProxyEnabled (cellTemplate .NoVNCProxyServiceTemplate ) {
141+ if cellTemplate .NoVNCProxyServiceTemplate .Override .Service == nil {
142+ cellTemplate .NoVNCProxyServiceTemplate .Override .Service = & service.RoutedOverrideSpec {}
143+ }
134144
135- if cellTemplate .NoVNCProxyServiceTemplate .Override .Service == nil {
136- cellTemplate .NoVNCProxyServiceTemplate .Override .Service = & service.RoutedOverrideSpec {}
137- }
145+ svcs , err := service .GetServicesListWithLabel (
146+ ctx ,
147+ helper ,
148+ instance .Namespace ,
149+ getNoVNCProxyLabelMap (nova .Name , cellName ),
150+ )
151+ if err != nil {
152+ return ctrl.Result {}, err
153+ }
138154
139- svcs , err := service .GetServicesListWithLabel (
140- ctx ,
141- helper ,
142- instance .Namespace ,
143- map [string ]string {
144- common .AppSelector : getNoVNCProxyServiceLabel (nova .Name , cellName ),
145- },
146- )
147- if err != nil {
148- return ctrl.Result {}, err
149- }
155+ endpointDetails , ctrlResult , err := EnsureEndpointConfig (
156+ ctx ,
157+ instance ,
158+ helper ,
159+ nova ,
160+ svcs ,
161+ map [service.Endpoint ]service.RoutedOverrideSpec {
162+ service .EndpointPublic : * cellTemplate .NoVNCProxyServiceTemplate .Override .Service ,
163+ },
164+ instance .Spec .Nova .CellOverride [cellName ].NoVNCProxy ,
165+ corev1beta1 .OpenStackControlPlaneExposeNovaReadyCondition ,
166+ true , // TODO: (mschuppert) disable TLS for now until implemented
167+ )
168+ if err != nil {
169+ return ctrlResult , err
170+ } else if (ctrlResult != ctrl.Result {}) {
171+ return ctrlResult , nil
172+ }
150173
151- endpointDetails , ctrlResult , err := EnsureEndpointConfig (
152- ctx ,
153- instance ,
154- helper ,
155- nova ,
156- svcs ,
157- map [service.Endpoint ]service.RoutedOverrideSpec {
158- service .EndpointPublic : * cellTemplate .NoVNCProxyServiceTemplate .Override .Service ,
159- },
160- instance .Spec .Nova .CellOverride [cellName ].NoVNCProxy ,
161- corev1beta1 .OpenStackControlPlaneExposeNovaReadyCondition ,
162- true , // TODO: (mschuppert) disable TLS for now until implemented
163- )
164- if err != nil {
165- return ctrlResult , err
166- } else if (ctrlResult != ctrl.Result {}) {
167- return ctrlResult , nil
174+ routedOverrideSpec := endpointDetails .GetEndpointServiceOverrides ()
175+ cellTemplate .NoVNCProxyServiceTemplate .Override .Service = ptr .To (routedOverrideSpec [service .EndpointPublic ])
168176 }
169177
170- routedOverrideSpec := endpointDetails .GetEndpointServiceOverrides ()
171- cellTemplate .NoVNCProxyServiceTemplate .Override .Service = ptr .To (routedOverrideSpec [service .EndpointPublic ])
172-
173178 instance .Spec .Nova .Template .CellTemplates [cellName ] = cellTemplate
174-
175179 }
176180 }
177181
@@ -228,6 +232,34 @@ func ReconcileNova(ctx context.Context, instance *corev1beta1.OpenStackControlPl
228232 return ctrl.Result {}, nil
229233}
230234
231- func getNoVNCProxyServiceLabel (name string , cellName string ) string {
232- return name + "-novncproxy-" + cellName
235+ func getNoVNCProxyLabelMap (name string , cellName string ) map [string ]string {
236+ return map [string ]string {
237+ common .AppSelector : name + "-novncproxy" ,
238+ "cell" : cellName ,
239+ }
240+ }
241+
242+ func getMetadataLabelMap (name string , instType string ) map [string ]string {
243+ return map [string ]string {
244+ common .AppSelector : name + "-metadata" ,
245+ "type" : instType ,
246+ }
247+ }
248+
249+ func centralMetadataLabelMap (name string ) map [string ]string {
250+ return getMetadataLabelMap (name , "central" )
251+ }
252+
253+ func cellMetadataLabelMap (name string , cell string ) map [string ]string {
254+ lm := getMetadataLabelMap (name , "cell" )
255+ lm ["cell" ] = cell
256+ return lm
257+ }
258+
259+ func metadataEnabled (metadata novav1.NovaMetadataTemplate ) bool {
260+ return metadata .Enabled != nil && * metadata .Enabled == true
261+ }
262+
263+ func noVNCProxyEnabled (vncproxy novav1.NovaNoVNCProxyTemplate ) bool {
264+ return vncproxy .Enabled != nil && * vncproxy .Enabled == true
233265}
0 commit comments