Skip to content

Commit aeffd61

Browse files
committed
Fix configuration of ironic inspector Jira: <OSPRH-10696>
1 parent 28d4b88 commit aeffd61

File tree

14 files changed

+126
-177
lines changed

14 files changed

+126
-177
lines changed

controllers/ironicinspector_controller.go

Lines changed: 51 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
job "github.com/openstack-k8s-operators/lib-common/modules/common/job"
3434
nad "github.com/openstack-k8s-operators/lib-common/modules/common/networkattachment"
3535
common_rbac "github.com/openstack-k8s-operators/lib-common/modules/common/rbac"
36+
"github.com/openstack-k8s-operators/lib-common/modules/common/secret"
3637
oko_secret "github.com/openstack-k8s-operators/lib-common/modules/common/secret"
3738
"github.com/openstack-k8s-operators/lib-common/modules/common/service"
3839
"github.com/openstack-k8s-operators/lib-common/modules/common/statefulset"
@@ -415,6 +416,25 @@ func (r *IronicInspectorReconciler) findObjectsForSrc(ctx context.Context, src c
415416
return requests
416417
}
417418

419+
func (r *IronicInspectorReconciler) getTransportURL(
420+
ctx context.Context,
421+
h *helper.Helper,
422+
instance *ironicv1.IronicInspector,
423+
) (string, error) {
424+
if instance.Spec.RPCTransport != "oslo" {
425+
return "fake://", nil
426+
}
427+
transportURLSecret, _, err := secret.GetSecret(ctx, h, instance.Status.TransportURLSecret, instance.Namespace)
428+
if err != nil {
429+
return "", err
430+
}
431+
transportURL, ok := transportURLSecret.Data["transport_url"]
432+
if !ok {
433+
return "", fmt.Errorf("transport_url %w Transport Secret", util.ErrNotFound)
434+
}
435+
return string(transportURL), nil
436+
}
437+
418438
func (r *IronicInspectorReconciler) reconcileTransportURL(
419439
ctx context.Context,
420440
instance *ironicv1.IronicInspector,
@@ -589,15 +609,9 @@ func (r *IronicInspectorReconciler) reconcileConfigMapsAndSecrets(
589609
// calculate an overall hash of hashes
590610
//
591611

592-
//
593-
// create Configmap required for ironic input
594-
// - %-scripts configmap holding scripts to e.g. bootstrap the service
595-
// - %-config configmap holding minimal ironic config required to get the
596-
// service up, user can add additional files to be added to the service
597-
// - parameters which has passwords gets added from the OpenStack secret
598-
// via the init container
599-
//
600-
err = r.generateServiceConfigMaps(
612+
// create Secret required for ironicInspector input. It contains minimal ironicinspector config required
613+
// to get the service up, user can add additional files to be added to the service.
614+
err = r.generateServiceSecrets(
601615
ctx,
602616
instance,
603617
helper,
@@ -1411,24 +1425,16 @@ func (r *IronicInspectorReconciler) reconcileUpgrade(
14111425
return ctrl.Result{}, nil
14121426
}
14131427

1414-
// generateServiceConfigMaps - create create configmaps which hold scripts and service configuration
1428+
// generateServiceSecrets - create secrets which hold service configuration
14151429
// TODO add DefaultConfigOverwrite
1416-
func (r *IronicInspectorReconciler) generateServiceConfigMaps(
1430+
func (r *IronicInspectorReconciler) generateServiceSecrets(
14171431
ctx context.Context,
14181432
instance *ironicv1.IronicInspector,
14191433
h *helper.Helper,
14201434
envVars *map[string]env.Setter,
14211435
db *mariadbv1.Database,
14221436
) error {
1423-
//
1424-
// create Configmap/Secret required for ironic-inspector input
1425-
// - %-scripts configmap holding scripts to e.g. bootstrap the service
1426-
// - %-config configmap holding minimal ironic-inspector config required
1427-
// to get the service up, user can add additional files to be added to
1428-
// the service
1429-
// - parameters which has passwords gets added from the ospSecret via the
1430-
// init container
1431-
//
1437+
// Create/update secrets from templates
14321438
cmLabels := labels.GetLabels(
14331439
instance,
14341440
labels.GetGroupLabel(ironic.ServiceName),
@@ -1439,20 +1445,24 @@ func (r *IronicInspectorReconciler) generateServiceConfigMaps(
14391445
tlsCfg = &tls.Service{}
14401446
}
14411447
// customData hold any customization for the service.
1442-
// custom.conf is going to /etc/ironic-inspector/inspector.conf.d
1443-
// all other files get placed into /etc/ironic-inspector to allow
1444-
// overwrite of e.g. policy.json.
1445-
// TODO: make sure custom.conf can not be overwritten
1448+
// 02-inspector-custom.conf is going to /etc/ironic-inspector/inspector.conf.d
1449+
// 01-inspector.conf is going to /etc/ironic-inspector/inspector such that it gets loaded before custom one
14461450
customData := map[string]string{
1447-
common.CustomServiceConfigFileName: instance.Spec.CustomServiceConfig,
1448-
"my.cnf": db.GetDatabaseClientConfig(tlsCfg), //(mschuppert) for now just get the default my.cnf
1451+
"02-inspector-custom.conf": instance.Spec.CustomServiceConfig,
1452+
"my.cnf": db.GetDatabaseClientConfig(tlsCfg), //(mschuppert) for now just get the default my.cnf
14491453
}
14501454
for key, data := range instance.Spec.DefaultConfigOverwrite {
14511455
customData[key] = data
14521456
}
14531457
templateParameters := make(map[string]interface{})
1454-
if !instance.Spec.Standalone {
14551458

1459+
transportURL, err := r.getTransportURL(ctx, h, instance)
1460+
if err != nil {
1461+
return err
1462+
}
1463+
templateParameters["TransportURL"] = transportURL
1464+
1465+
if !instance.Spec.Standalone {
14561466
keystoneAPI, err := keystonev1.GetKeystoneAPI(
14571467
ctx, h, instance.Namespace, map[string]string{})
14581468
if err != nil {
@@ -1466,10 +1476,24 @@ func (r *IronicInspectorReconciler) generateServiceConfigMaps(
14661476
if err != nil {
14671477
return err
14681478
}
1479+
ospSecret, _, err := secret.GetSecret(ctx, h, instance.Spec.Secret, instance.Namespace)
1480+
if err != nil {
1481+
return err
1482+
}
1483+
1484+
servicePassword := string(ospSecret.Data[instance.Spec.PasswordSelectors.Service])
14691485

14701486
templateParameters["ServiceUser"] = instance.Spec.ServiceUser
1487+
templateParameters["ServicePassword"] = servicePassword
14711488
templateParameters["KeystoneInternalURL"] = keystoneInternalURL
14721489
templateParameters["KeystonePublicURL"] = keystonePublicURL
1490+
1491+
// Other OpenStack services
1492+
templateParameters["ServicePassword"] = servicePassword
1493+
templateParameters["keystone_authtoken"] = servicePassword
1494+
templateParameters["service_catalog"] = servicePassword
1495+
templateParameters["ironic"] = servicePassword
1496+
templateParameters["swift"] = servicePassword
14731497
} else {
14741498
ironicAPI, err := ironicv1.GetIronicAPI(
14751499
ctx, h, instance.Namespace, map[string]string{})

pkg/ironicinspector/dbsync.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727

2828
const (
2929
// DBSyncCommand -
30-
DBSyncCommand = "/usr/local/bin/kolla_set_configs && /bin/bash -c 'ironic-inspector-dbsync --config-file /etc/ironic-inspector/inspector.conf upgrade'"
30+
DBSyncCommand = "/usr/local/bin/kolla_set_configs && /bin/bash -c 'ironic-inspector-dbsync --config-file /etc/ironic-inspector/inspector.conf --config-dir /etc/ironic-inspector/inspector.conf.d upgrade'"
3131
)
3232

3333
// DbSyncJob func

pkg/ironicinspector/initcontainer.go

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,10 @@ type APIDetails struct {
4242
}
4343

4444
const (
45-
// InitContainerCommand -
46-
InitContainerCommand = "/usr/local/bin/container-scripts/init.sh"
47-
4845
// PxeInitContainerCommand -
4946
PxeInitContainerCommand = "/usr/local/bin/container-scripts/inspector-pxe-init.sh"
47+
48+
InitCreateDirectoriesCommand = `mkdir -p /var/lib/ironic/httpboot /var/lib/ironic/ramdisk-logs`
5049
)
5150

5251
// InitContainer - init container for Ironic Inspector pods
@@ -113,28 +112,17 @@ func InitContainer(init APIDetails) []corev1.Container {
113112

114113
containers := []corev1.Container{}
115114

116-
inspectorInit := corev1.Container{
117-
Name: "inspector-init",
118-
Image: init.ContainerImage,
119-
SecurityContext: &corev1.SecurityContext{
120-
RunAsUser: &runAsUser,
121-
},
122-
Command: []string{
123-
"/bin/bash",
124-
},
125-
Args: []string{"-c", InitContainerCommand},
126-
Env: envs,
127-
VolumeMounts: init.VolumeMounts,
128-
}
129-
containers = append(containers, inspectorInit)
130-
131115
if init.IpaInit {
132116
ipaInit := corev1.Container{
133117
Name: "ironic-python-agent-init",
134118
Image: init.IronicPythonAgentImage,
135119
SecurityContext: &corev1.SecurityContext{
136120
Privileged: &init.Privileged,
137121
},
122+
Command: []string{
123+
"/bin/bash",
124+
},
125+
Args: []string{"-c", InitCreateDirectoriesCommand},
138126
Env: imageCopyEnvs,
139127
VolumeMounts: init.VolumeMounts,
140128
}

pkg/ironicinspector/volumes.go

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,14 @@ func GetVolumes(name string) []corev1.Volume {
2020
},
2121
},
2222
{
23-
Name: "config-data",
23+
Name: "config",
2424
VolumeSource: corev1.VolumeSource{
2525
Secret: &corev1.SecretVolumeSource{
2626
DefaultMode: &config0640AccessMode,
2727
SecretName: name + "-config-data",
2828
},
2929
},
3030
},
31-
{
32-
Name: "config-data-merged",
33-
VolumeSource: corev1.VolumeSource{
34-
EmptyDir: &corev1.EmptyDirVolumeSource{Medium: ""},
35-
},
36-
},
3731
{
3832
Name: "var-lib-ironic",
3933
VolumeSource: corev1.VolumeSource{
@@ -75,15 +69,10 @@ func GetInitVolumeMounts() []corev1.VolumeMount {
7569
ReadOnly: true,
7670
},
7771
{
78-
Name: "config-data",
72+
Name: "config",
7973
MountPath: "/var/lib/config-data/default",
8074
ReadOnly: true,
8175
},
82-
{
83-
Name: "config-data-merged",
84-
MountPath: "/var/lib/config-data/merged",
85-
ReadOnly: false,
86-
},
8776
{
8877
Name: "var-lib-ironic",
8978
MountPath: "/var/lib/ironic",
@@ -107,12 +96,12 @@ func GetVolumeMounts(serviceName string) []corev1.VolumeMount {
10796
ReadOnly: true,
10897
},
10998
{
110-
Name: "config-data-merged",
111-
MountPath: "/var/lib/config-data/merged",
112-
ReadOnly: false,
99+
Name: "config",
100+
MountPath: "/var/lib/config-data/default",
101+
ReadOnly: true,
113102
},
114103
{
115-
Name: "config-data-merged",
104+
Name: "config",
116105
MountPath: "/var/lib/kolla/config_files/config.json",
117106
SubPath: serviceName + "-config.json",
118107
ReadOnly: true,

templates/ironicinspector/bin/init.sh

Lines changed: 0 additions & 76 deletions
This file was deleted.

templates/ironicinspector/bin/inspector-pxe-init.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ export PODINDEX=$(echo ${HOSTNAME##*-})
2222
export InspectorNetworkIP=$(/usr/local/bin/container-scripts/get_net_ip ${InspectionNetwork})
2323
export INSPECTOR_HTTP_URL=$(python3 -c 'import os; print(os.environ["InspectorHTTPURL"] % os.environ)')
2424

25-
export DNSMASQ_CFG=/var/lib/config-data/merged/dnsmasq.conf
25+
# Copy required config to modifiable location
26+
cp /var/lib/config-data/default/dnsmasq.conf /var/lib/ironic/
27+
cp /var/lib/config-data/default/inspector.ipxe /var/lib/ironic/
28+
29+
export DNSMASQ_CFG=/var/lib/ironic/dnsmasq.conf
2630
sed -e "/BLOCK_PODINDEX_${PODINDEX}_BEGIN/,/BLOCK_PODINDEX_${PODINDEX}_END/p" \
2731
-e "/BLOCK_PODINDEX_.*_BEGIN/,/BLOCK_PODINDEX_.*_END/d" \
2832
-i ${DNSMASQ_CFG}
@@ -31,7 +35,7 @@ sed -e "/BLOCK_PODINDEX_${PODINDEX}_BEGIN/d" \
3135
-i ${DNSMASQ_CFG}
3236
envsubst < ${DNSMASQ_CFG} | tee ${DNSMASQ_CFG}
3337

34-
export INSPECTOR_IPXE=/var/lib/config-data/merged/inspector.ipxe
38+
export INSPECTOR_IPXE=/var/lib/ironic/inspector.ipxe
3539
envsubst < ${INSPECTOR_IPXE} | tee ${INSPECTOR_IPXE}
3640

3741
# run common pxe-init script

templates/ironicinspector/config/inspector.conf renamed to templates/ironicinspector/config/01-inspector.conf

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[DEFAULT]
22
auth_strategy={{if .Standalone}}noauth{{else}}keystone{{end}}
33
log_file=/dev/stdout
4-
transport_url=fake://
4+
transport_url = {{ .TransportURL }}
55
listen_address = localhost
66
listen_port = 5051
77

@@ -28,6 +28,7 @@ endpoint_override={{ .IronicInternalURL }}
2828
auth_type=password
2929
auth_url={{ .KeystoneInternalURL }}
3030
username={{ .ServiceUser }}
31+
password = {{ .ServicePassword }}
3132
user_domain_name=Default
3233
project_name=service
3334
project_domain_name=Default
@@ -38,6 +39,7 @@ retry_interval=10
3839
auth_type=password
3940
auth_url={{ .KeystoneInternalURL }}
4041
username={{ .ServiceUser }}
42+
password = {{ .ServicePassword }}
4143
www_authenticate_uri={{ .KeystonePublicURL }}
4244
project_domain_name=Default
4345
user_domain_name=Default
@@ -47,6 +49,7 @@ project_name=service
4749
auth_type=password
4850
auth_url={{ .KeystoneInternalURL }}
4951
username={{ .ServiceUser }}
52+
password = {{ .ServicePassword }}
5053
user_domain_name=Default
5154
project_name=service
5255
project_domain_name=Default
@@ -55,6 +58,7 @@ project_domain_name=Default
5558
auth_type=password
5659
auth_url={{ .KeystoneInternalURL }}
5760
username={{ .ServiceUser }}
61+
password = {{ .ServicePassword }}
5862
project_domain_name=Default
5963
project_name=services
6064
user_domain_name=Default

0 commit comments

Comments
 (0)