Skip to content

Commit b1a7f05

Browse files
committed
[nova] refactor pkg/nova.go as prepare for tls
Jira: OSPRH-3268
1 parent 963263b commit b1a7f05

File tree

1 file changed

+94
-62
lines changed

1 file changed

+94
-62
lines changed

pkg/openstack/nova.go

Lines changed: 94 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)