Skip to content

Commit e832d30

Browse files
Move GenerateConfigs helpers to internal/common
Share config secret generation between nova and placement controllers. Nova passes service-specific templates via novaAdditionalTemplates() in nova/common.go; placement uses GenerateConfigsWithScripts in generateServiceConfigMaps. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent d4cf26f commit e832d30

11 files changed

Lines changed: 126 additions & 129 deletions

internal/common/config.go

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
/*
2+
Copyright 2026.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package common //nolint:revive // common is the established package name for multi-group shared code
18+
19+
import (
20+
"context"
21+
22+
"github.com/openstack-k8s-operators/lib-common/modules/common/env"
23+
helper "github.com/openstack-k8s-operators/lib-common/modules/common/helper"
24+
"github.com/openstack-k8s-operators/lib-common/modules/common/secret"
25+
util "github.com/openstack-k8s-operators/lib-common/modules/common/util"
26+
"sigs.k8s.io/controller-runtime/pkg/client"
27+
)
28+
29+
// GenerateConfigs helper function to generate config maps
30+
func GenerateConfigs(
31+
ctx context.Context, h *helper.Helper,
32+
instance client.Object, configName string, envVars *map[string]env.Setter,
33+
templateParameters map[string]any,
34+
extraData map[string]string, cmLabels map[string]string,
35+
additionalTemplates map[string]string,
36+
commonTemplates []string,
37+
templateDir string,
38+
) error {
39+
return generateConfigsGeneric(ctx, h, instance, configName, envVars, templateParameters, extraData,
40+
cmLabels, additionalTemplates, commonTemplates, templateDir, false)
41+
}
42+
43+
// GenerateConfigsWithScripts helper function to generate config maps
44+
// for service configs and scripts
45+
func GenerateConfigsWithScripts(
46+
ctx context.Context, h *helper.Helper,
47+
instance client.Object, envVars *map[string]env.Setter,
48+
templateParameters map[string]any,
49+
extraData map[string]string, cmLabels map[string]string,
50+
additionalTemplates map[string]string,
51+
commonTemplates []string,
52+
templateDir string,
53+
) error {
54+
return generateConfigsGeneric(ctx, h, instance, GetServiceConfigSecretName(instance.GetName()),
55+
envVars, templateParameters, extraData,
56+
cmLabels, additionalTemplates, commonTemplates, templateDir, true)
57+
}
58+
59+
// generateConfigsGeneric helper function to generate config maps
60+
func generateConfigsGeneric(
61+
ctx context.Context, h *helper.Helper,
62+
instance client.Object, configName string, envVars *map[string]env.Setter,
63+
templateParameters map[string]any,
64+
extraData map[string]string, cmLabels map[string]string,
65+
additionalTemplates map[string]string,
66+
commonTemplates []string,
67+
templateDir string,
68+
withScripts bool,
69+
) error {
70+
if templateDir == "" {
71+
return ErrTemplateDirUnset
72+
}
73+
74+
cms := []util.Template{
75+
{
76+
Name: configName,
77+
Namespace: instance.GetNamespace(),
78+
Type: util.TemplateTypeConfig,
79+
InstanceType: instance.GetObjectKind().GroupVersionKind().Kind,
80+
MultiTemplateDir: templateDir,
81+
ConfigOptions: templateParameters,
82+
Labels: cmLabels,
83+
CustomData: extraData,
84+
Annotations: map[string]string{},
85+
AdditionalTemplate: additionalTemplates,
86+
CommonTemplates: commonTemplates,
87+
},
88+
}
89+
if withScripts {
90+
cms = append(cms, util.Template{
91+
Name: GetScriptSecretName(instance.GetName()),
92+
Namespace: instance.GetNamespace(),
93+
Type: util.TemplateTypeScripts,
94+
InstanceType: instance.GetObjectKind().GroupVersionKind().Kind,
95+
MultiTemplateDir: templateDir,
96+
AdditionalTemplate: map[string]string{},
97+
Annotations: map[string]string{},
98+
Labels: cmLabels,
99+
})
100+
}
101+
return secret.EnsureSecrets(ctx, h, instance, cms, envVars)
102+
}

internal/controller/nova/common.go

Lines changed: 3 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ package controller
2020
import (
2121
"context"
2222
"fmt"
23-
"maps"
2423
"net/url"
2524
"sort"
2625
"strconv"
@@ -42,7 +41,6 @@ import (
4241
gophercloud "github.com/gophercloud/gophercloud/v2"
4342
"github.com/gophercloud/gophercloud/v2/openstack/compute/v2/services"
4443
"github.com/openstack-k8s-operators/lib-common/modules/common/condition"
45-
"github.com/openstack-k8s-operators/lib-common/modules/common/env"
4644
helper "github.com/openstack-k8s-operators/lib-common/modules/common/helper"
4745
"github.com/openstack-k8s-operators/lib-common/modules/common/secret"
4846
"github.com/openstack-k8s-operators/lib-common/modules/common/tls"
@@ -247,88 +245,12 @@ func NewReconcilers(mgr ctrl.Manager, kclient *kubernetes.Clientset) *internalco
247245
})
248246
}
249247

250-
// generateConfigsGeneric helper function to generate config maps
251-
func (r *ReconcilerBase) generateConfigsGeneric(
252-
ctx context.Context, h *helper.Helper,
253-
instance client.Object, configName string, envVars *map[string]env.Setter,
254-
templateParameters map[string]any,
255-
extraData map[string]string, cmLabels map[string]string,
256-
additionalTemplates map[string]string,
257-
commonTemplates []string,
258-
templateDir string,
259-
withScripts bool,
260-
) error {
261-
extraTemplates := map[string]string{
248+
// novaAdditionalTemplates returns the default extra config templates for nova services.
249+
func novaAdditionalTemplates() map[string]string {
250+
return map[string]string{
262251
"01-nova.conf": "/nova/nova.conf",
263252
"nova-blank.conf": "/nova/nova-blank.conf",
264253
}
265-
if templateDir == "" {
266-
return internalcommon.ErrTemplateDirUnset
267-
}
268-
269-
maps.Copy(extraTemplates, additionalTemplates)
270-
cms := []util.Template{
271-
{
272-
Name: configName,
273-
Namespace: instance.GetNamespace(),
274-
Type: util.TemplateTypeConfig,
275-
InstanceType: instance.GetObjectKind().GroupVersionKind().Kind,
276-
MultiTemplateDir: templateDir,
277-
ConfigOptions: templateParameters,
278-
Labels: cmLabels,
279-
CustomData: extraData,
280-
Annotations: map[string]string{},
281-
AdditionalTemplate: extraTemplates,
282-
CommonTemplates: commonTemplates,
283-
},
284-
}
285-
if withScripts {
286-
cms = append(cms, util.Template{
287-
Name: internalcommon.GetScriptSecretName(instance.GetName()),
288-
Namespace: instance.GetNamespace(),
289-
Type: util.TemplateTypeScripts,
290-
InstanceType: instance.GetObjectKind().GroupVersionKind().Kind,
291-
MultiTemplateDir: templateDir,
292-
AdditionalTemplate: map[string]string{},
293-
Annotations: map[string]string{},
294-
Labels: cmLabels,
295-
})
296-
}
297-
return secret.EnsureSecrets(ctx, h, instance, cms, envVars)
298-
}
299-
300-
// GenerateConfigs helper function to generate config maps
301-
func (r *ReconcilerBase) GenerateConfigs(
302-
ctx context.Context, h *helper.Helper,
303-
instance client.Object, configName string, envVars *map[string]env.Setter,
304-
templateParameters map[string]any,
305-
extraData map[string]string, cmLabels map[string]string,
306-
additionalTemplates map[string]string,
307-
commonTemplates []string,
308-
templateDir string,
309-
) error {
310-
return r.generateConfigsGeneric(
311-
ctx, h, instance, configName, envVars, templateParameters, extraData,
312-
cmLabels, additionalTemplates, commonTemplates, templateDir, false,
313-
)
314-
}
315-
316-
// GenerateConfigsWithScripts helper function to generate config maps
317-
// for service configs and scripts
318-
func (r *ReconcilerBase) GenerateConfigsWithScripts(
319-
ctx context.Context, h *helper.Helper,
320-
instance client.Object, envVars *map[string]env.Setter,
321-
templateParameters map[string]any,
322-
extraData map[string]string, cmLabels map[string]string,
323-
additionalTemplates map[string]string,
324-
commonTemplates []string,
325-
templateDir string,
326-
) error {
327-
return r.generateConfigsGeneric(
328-
ctx, h, instance, internalcommon.GetServiceConfigSecretName(instance.GetName()),
329-
envVars, templateParameters, extraData,
330-
cmLabels, additionalTemplates, commonTemplates, templateDir, true,
331-
)
332254
}
333255

334256
func getNovaCellCRName(novaCRName string, cellName string) string {

internal/controller/nova/nova_controller.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,11 +1128,6 @@ func (r *NovaReconciler) ensureNovaManageJobSecret(
11281128
"my.cnf": cellDB.GetDatabaseClientConfig(tlsCfg), //(mschuppert) for now just get the default my.cnf
11291129
}
11301130

1131-
extraTemplates := map[string]string{
1132-
"01-nova.conf": "/nova/nova.conf",
1133-
"nova-blank.conf": "/nova/nova-blank.conf",
1134-
}
1135-
11361131
apiDatabaseAccount, apiDbSecret, err := mariadbv1.GetAccountAndSecret(ctx, h, instance.Spec.APIDatabaseAccount, instance.Namespace)
11371132
if err != nil {
11381133
return nil, "", "", err
@@ -1197,7 +1192,7 @@ func (r *NovaReconciler) ensureNovaManageJobSecret(
11971192
Labels: cmLabels,
11981193
CustomData: extraData,
11991194
Annotations: map[string]string{},
1200-
AdditionalTemplate: extraTemplates,
1195+
AdditionalTemplate: novaAdditionalTemplates(),
12011196
},
12021197
}
12031198

internal/controller/nova/novaapi_controller.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -570,12 +570,11 @@ func (r *NovaAPIReconciler) generateConfigs(
570570
instance, labels.GetGroupLabel(NovaAPILabelPrefix), map[string]string{},
571571
)
572572

573-
err = r.GenerateConfigs(
573+
return internalcommon.GenerateConfigs(
574574
ctx, h, instance, internalcommon.GetServiceConfigSecretName(instance.GetName()),
575-
hashes, templateParameters, extraData, cmLabels, map[string]string{},
575+
hashes, templateParameters, extraData, cmLabels, novaAdditionalTemplates(),
576576
[]string{"ssl.conf"}, "nova/api",
577577
)
578-
return err
579578
}
580579

581580
func (r *NovaAPIReconciler) ensureDeployment(

internal/controller/nova/novacell_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -814,8 +814,8 @@ func (r *NovaCellReconciler) generateComputeConfigs(
814814
}
815815

816816
configName := instance.GetName() + "-compute-config"
817-
err := r.GenerateConfigs(
818-
ctx, h, instance, configName, &hashes, templateParameters, extraData, cmLabels, map[string]string{},
817+
err := internalcommon.GenerateConfigs(
818+
ctx, h, instance, configName, &hashes, templateParameters, extraData, cmLabels, novaAdditionalTemplates(),
819819
[]string{}, "nova/compute",
820820
)
821821
if err != nil {

internal/controller/nova/novacompute_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,8 +394,8 @@ func (r *NovaComputeReconciler) generateConfigs(
394394
instance, labels.GetGroupLabel(NovaComputeLabelPrefix), map[string]string{},
395395
)
396396

397-
err := r.GenerateConfigs(
398-
ctx, h, instance, internalcommon.GetServiceConfigSecretName(instance.GetName()), hashes, templateParameters, extraData, cmLabels, map[string]string{},
397+
err := internalcommon.GenerateConfigs(
398+
ctx, h, instance, internalcommon.GetServiceConfigSecretName(instance.GetName()), hashes, templateParameters, extraData, cmLabels, novaAdditionalTemplates(),
399399
[]string{}, "nova/compute",
400400
)
401401
return err

internal/controller/nova/novaconductor_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -515,8 +515,8 @@ func (r *NovaConductorReconciler) generateConfigs(
515515
cmLabels := labels.GetLabels(
516516
instance, labels.GetGroupLabel(NovaConductorLabelPrefix), map[string]string{})
517517

518-
return r.GenerateConfigsWithScripts(
519-
ctx, h, instance, hashes, templateParameters, extraData, cmLabels, map[string]string{},
518+
return internalcommon.GenerateConfigsWithScripts(
519+
ctx, h, instance, hashes, templateParameters, extraData, cmLabels, novaAdditionalTemplates(),
520520
[]string{}, "nova/conductor",
521521
)
522522
}

internal/controller/nova/novametadata_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,9 +575,9 @@ func (r *NovaMetadataReconciler) generateConfigs(
575575
instance, labels.GetGroupLabel(NovaMetadataLabelPrefix), map[string]string{},
576576
)
577577

578-
err = r.GenerateConfigs(
578+
err = internalcommon.GenerateConfigs(
579579
ctx, h, instance, internalcommon.GetServiceConfigSecretName(instance.GetName()),
580-
hashes, templateParameters, extraData, cmLabels, map[string]string{},
580+
hashes, templateParameters, extraData, cmLabels, novaAdditionalTemplates(),
581581
[]string{"ssl.conf"}, "nova/metadata",
582582
)
583583
return err

internal/controller/nova/novanovncproxy_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -532,9 +532,9 @@ func (r *NovaNoVNCProxyReconciler) generateConfigs(
532532
instance, labels.GetGroupLabel(NovaNoVNCProxyLabelPrefix), map[string]string{},
533533
)
534534

535-
err = r.GenerateConfigs(
535+
err = internalcommon.GenerateConfigs(
536536
ctx, h, instance, internalcommon.GetServiceConfigSecretName(instance.GetName()),
537-
hashes, templateParameters, extraData, cmLabels, map[string]string{},
537+
hashes, templateParameters, extraData, cmLabels, novaAdditionalTemplates(),
538538
[]string{}, "nova/novncproxy",
539539
)
540540
return err

internal/controller/nova/novascheduler_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -590,9 +590,9 @@ func (r *NovaSchedulerReconciler) generateConfigs(
590590
instance, labels.GetGroupLabel(NovaSchedulerLabelPrefix), map[string]string{},
591591
)
592592

593-
return r.GenerateConfigs(
593+
return internalcommon.GenerateConfigs(
594594
ctx, h, instance, internalcommon.GetServiceConfigSecretName(instance.GetName()),
595-
hashes, templateParameters, extraData, cmLabels, map[string]string{},
595+
hashes, templateParameters, extraData, cmLabels, novaAdditionalTemplates(),
596596
[]string{}, "nova/scheduler",
597597
)
598598
}

0 commit comments

Comments
 (0)