Skip to content

Commit 80f7629

Browse files
Merge pull request #361 from kstrenkova/refactor-volumes
Refactor test-operator volumes code
2 parents 1e2eafd + eeeb92f commit 80f7629

10 files changed

Lines changed: 469 additions & 842 deletions

File tree

internal/ansibletest/pod.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func Pod(
3636
PodRunAsUser,
3737
instance.Spec.SELinuxLevel,
3838
instance.Spec.Tolerations,
39-
GetVolumeMounts(mountCerts, AnsibleTestPropagation, instance, externalWorkflowCounter),
39+
GetVolumeMounts(instance, mountCerts, AnsibleTestPropagation, externalWorkflowCounter),
4040
GetVolumes(instance, logsPVCName, mountCerts, AnsibleTestPropagation, externalWorkflowCounter),
4141
)
4242
}

internal/ansibletest/volumes.go

Lines changed: 45 additions & 220 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ import (
77
corev1 "k8s.io/api/core/v1"
88
)
99

10-
// GetVolumes -
10+
const (
11+
computeName = "compute-ssh-secret"
12+
workloadName = "workload-ssh-secret"
13+
)
14+
15+
// GetVolumes - returns a list of volumes for the test pod
1116
func GetVolumes(
1217
instance *testv1beta1.AnsibleTest,
1318
logsPVCName string,
@@ -16,257 +21,77 @@ func GetVolumes(
1621
externalWorkflowCounter int,
1722
) []corev1.Volume {
1823

19-
var scriptsVolumeConfidentialMode int32 = 0420
20-
var tlsCertificateMode int32 = 0444
21-
var privateKeyMode int32 = 0600
22-
var publicInfoMode int32 = 0744
23-
24-
//source_type := corev1.HostPathDirectoryOrCreate
2524
volumes := []corev1.Volume{
26-
{
27-
Name: "openstack-config",
28-
VolumeSource: corev1.VolumeSource{
29-
ConfigMap: &corev1.ConfigMapVolumeSource{
30-
DefaultMode: &scriptsVolumeConfidentialMode,
31-
LocalObjectReference: corev1.LocalObjectReference{
32-
Name: "openstack-config",
33-
},
34-
},
35-
},
36-
},
37-
{
38-
Name: "openstack-config-secret",
39-
VolumeSource: corev1.VolumeSource{
40-
Secret: &corev1.SecretVolumeSource{
41-
DefaultMode: &tlsCertificateMode,
42-
SecretName: "openstack-config-secret",
43-
},
44-
},
45-
},
46-
{
47-
Name: "test-operator-logs",
48-
VolumeSource: corev1.VolumeSource{
49-
PersistentVolumeClaim: &corev1.PersistentVolumeClaimVolumeSource{
50-
ClaimName: logsPVCName,
51-
ReadOnly: false,
52-
},
53-
},
54-
},
55-
{
56-
Name: util.TestOperatorEphemeralVolumeNameWorkdir,
57-
VolumeSource: corev1.VolumeSource{
58-
EmptyDir: &corev1.EmptyDirVolumeSource{},
59-
},
60-
},
61-
{
62-
Name: util.TestOperatorEphemeralVolumeNameTmp,
63-
VolumeSource: corev1.VolumeSource{
64-
EmptyDir: &corev1.EmptyDirVolumeSource{},
65-
},
66-
},
25+
util.CreateOpenstackConfigMapVolume("openstack-config"),
26+
util.CreateOpenstackConfigSecretVolume(),
27+
util.CreateLogsPVCVolume(logsPVCName),
28+
util.CreateWorkdirVolume(),
29+
util.CreateTmpVolume(),
6730
}
6831

6932
if mountCerts {
70-
caCertsVolume := corev1.Volume{
71-
Name: "ca-certs",
72-
VolumeSource: corev1.VolumeSource{
73-
Secret: &corev1.SecretVolumeSource{
74-
DefaultMode: &scriptsVolumeConfidentialMode,
75-
SecretName: "combined-ca-bundle",
76-
},
77-
},
78-
}
79-
80-
volumes = append(volumes, caCertsVolume)
33+
volumes = util.AppendCACertsVolume(volumes)
8134
}
8235

83-
keysVolume := corev1.Volume{
84-
Name: "compute-ssh-secret",
85-
VolumeSource: corev1.VolumeSource{
86-
Secret: &corev1.SecretVolumeSource{
87-
SecretName: instance.Spec.ComputeSSHKeySecretName,
88-
DefaultMode: &privateKeyMode,
89-
},
90-
},
91-
}
92-
93-
volumes = append(volumes, keysVolume)
36+
volumes = util.AppendSSHKeyVolume(volumes, computeName, instance.Spec.ComputeSSHKeySecretName)
9437

9538
if instance.Spec.WorkloadSSHKeySecretName != "" {
96-
keysVolume = corev1.Volume{
97-
Name: "workload-ssh-secret",
98-
VolumeSource: corev1.VolumeSource{
99-
Secret: &corev1.SecretVolumeSource{
100-
SecretName: instance.Spec.WorkloadSSHKeySecretName,
101-
DefaultMode: &privateKeyMode,
102-
},
103-
},
104-
}
105-
106-
volumes = append(volumes, keysVolume)
39+
volumes = util.AppendSSHKeyVolume(volumes, workloadName, instance.Spec.WorkloadSSHKeySecretName)
10740
}
10841

109-
for _, exv := range instance.Spec.ExtraMounts {
110-
for _, vol := range exv.Propagate(svc) {
111-
for _, v := range vol.Volumes {
112-
volumeSource, _ := v.ToCoreVolumeSource()
113-
convertedVolume := corev1.Volume{
114-
Name: v.Name,
115-
VolumeSource: *volumeSource,
116-
}
117-
volumes = append(volumes, convertedVolume)
118-
}
119-
}
120-
}
42+
volumes = util.AppendExtraMountsVolumes(volumes, instance.Spec.ExtraMounts, svc)
43+
volumes = util.AppendExtraConfigmapsVolumes(volumes, instance.Spec.ExtraConfigmapsMounts, util.PublicInfoMode)
12144

122-
for _, vol := range instance.Spec.ExtraConfigmapsMounts {
123-
extraVol := corev1.Volume{
124-
Name: vol.Name,
125-
VolumeSource: corev1.VolumeSource{
126-
ConfigMap: &corev1.ConfigMapVolumeSource{
127-
DefaultMode: &publicInfoMode,
128-
LocalObjectReference: corev1.LocalObjectReference{
129-
Name: vol.Name,
130-
},
131-
},
132-
},
45+
if len(instance.Spec.Workflow) > 0 {
46+
cmMounts := instance.Spec.Workflow[externalWorkflowCounter].ExtraConfigmapsMounts
47+
if cmMounts != nil {
48+
volumes = util.AppendExtraConfigmapsVolumes(volumes, *cmMounts, util.PublicInfoMode)
13349
}
134-
135-
volumes = append(volumes, extraVol)
13650
}
13751

138-
if len(instance.Spec.Workflow) > 0 && instance.Spec.Workflow[externalWorkflowCounter].ExtraConfigmapsMounts != nil {
139-
for _, vol := range *instance.Spec.Workflow[externalWorkflowCounter].ExtraConfigmapsMounts {
140-
extraWorkflowVol := corev1.Volume{
141-
Name: vol.Name,
142-
VolumeSource: corev1.VolumeSource{
143-
ConfigMap: &corev1.ConfigMapVolumeSource{
144-
DefaultMode: &publicInfoMode,
145-
LocalObjectReference: corev1.LocalObjectReference{
146-
Name: vol.Name,
147-
},
148-
},
149-
},
150-
}
151-
152-
volumes = append(volumes, extraWorkflowVol)
153-
}
154-
}
15552
return volumes
15653
}
15754

158-
// GetVolumeMounts -
55+
// GetVolumeMounts - returns a list of volume mounts for the test container
15956
func GetVolumeMounts(
57+
instance *testv1beta1.AnsibleTest,
16058
mountCerts bool,
16159
svc []storage.PropagationType,
162-
instance *testv1beta1.AnsibleTest,
16360
externalWorkflowCounter int,
16461
) []corev1.VolumeMount {
16562
volumeMounts := []corev1.VolumeMount{
166-
{
167-
Name: util.TestOperatorEphemeralVolumeNameWorkdir,
168-
MountPath: "/var/lib/ansible",
169-
ReadOnly: false,
170-
},
171-
{
172-
Name: util.TestOperatorEphemeralVolumeNameTmp,
173-
MountPath: "/tmp",
174-
ReadOnly: false,
175-
},
176-
{
177-
Name: "test-operator-logs",
178-
MountPath: "/var/lib/AnsibleTests/external_files",
179-
ReadOnly: false,
180-
},
181-
{
182-
Name: "openstack-config",
183-
MountPath: "/etc/openstack/clouds.yaml",
184-
SubPath: "clouds.yaml",
185-
ReadOnly: true,
186-
},
187-
{
188-
Name: "openstack-config",
189-
MountPath: "/var/lib/ansible/.config/openstack/clouds.yaml",
190-
SubPath: "clouds.yaml",
191-
ReadOnly: true,
192-
},
193-
{
194-
Name: "openstack-config-secret",
195-
MountPath: "/var/lib/ansible/.config/openstack/secure.yaml",
196-
ReadOnly: false,
197-
SubPath: "secure.yaml",
198-
},
63+
util.CreateVolumeMount(util.TestOperatorEphemeralVolumeNameWorkdir, "/var/lib/ansible", false),
64+
util.CreateVolumeMount(util.TestOperatorEphemeralVolumeNameTmp, "/tmp", false),
65+
util.CreateVolumeMount(util.TestOperatorLogsVolumeName, "/var/lib/AnsibleTests/external_files", false),
66+
util.CreateOpenstackConfigVolumeMount("/etc/openstack/clouds.yaml"),
67+
util.CreateOpenstackConfigVolumeMount("/var/lib/ansible/.config/openstack/clouds.yaml"),
68+
util.CreateOpenstackConfigSecretVolumeMount("/var/lib/ansible/.config/openstack/secure.yaml"),
19969
}
20070

20171
if mountCerts {
202-
caCertVolumeMount := corev1.VolumeMount{
203-
Name: "ca-certs",
204-
MountPath: "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem",
205-
ReadOnly: true,
206-
SubPath: "tls-ca-bundle.pem",
207-
}
208-
209-
volumeMounts = append(volumeMounts, caCertVolumeMount)
210-
211-
caCertVolumeMount = corev1.VolumeMount{
212-
Name: "ca-certs",
213-
MountPath: "/etc/pki/tls/certs/ca-bundle.trust.crt",
214-
ReadOnly: true,
215-
SubPath: "tls-ca-bundle.pem",
216-
}
217-
218-
volumeMounts = append(volumeMounts, caCertVolumeMount)
219-
}
220-
221-
if instance.Spec.WorkloadSSHKeySecretName != "" {
222-
workloadSSHKeyMount := corev1.VolumeMount{
223-
Name: "workload-ssh-secret",
224-
MountPath: "/var/lib/ansible/test_keypair.key",
225-
SubPath: "ssh-privatekey",
226-
ReadOnly: true,
227-
}
228-
229-
volumeMounts = append(volumeMounts, workloadSSHKeyMount)
230-
}
231-
232-
computeSSHKeyMount := corev1.VolumeMount{
233-
Name: "compute-ssh-secret",
234-
MountPath: "/var/lib/ansible/.ssh/compute_id",
235-
SubPath: "ssh-privatekey",
236-
ReadOnly: true,
237-
}
238-
239-
volumeMounts = append(volumeMounts, computeSSHKeyMount)
240-
241-
for _, exv := range instance.Spec.ExtraMounts {
242-
for _, vol := range exv.Propagate(svc) {
243-
volumeMounts = append(volumeMounts, vol.Mounts...)
244-
}
72+
volumeMounts = append(volumeMounts,
73+
util.CreateCACertVolumeMount("/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"),
74+
util.CreateCACertVolumeMount("/etc/pki/tls/certs/ca-bundle.trust.crt"),
75+
)
24576
}
24677

247-
for _, vol := range instance.Spec.ExtraConfigmapsMounts {
78+
volumeMounts = append(volumeMounts,
79+
util.CreateVolumeMountWithSubPath(computeName, "/var/lib/ansible/.ssh/compute_id", "ssh-privatekey", true),
80+
)
24881

249-
extraConfigmapsMounts := corev1.VolumeMount{
250-
Name: vol.Name,
251-
MountPath: vol.MountPath,
252-
SubPath: vol.SubPath,
253-
ReadOnly: true,
254-
}
255-
256-
volumeMounts = append(volumeMounts, extraConfigmapsMounts)
82+
if instance.Spec.WorkloadSSHKeySecretName != "" {
83+
volumeMounts = append(volumeMounts,
84+
util.CreateVolumeMountWithSubPath(workloadName, "/var/lib/ansible/test_keypair.key", "ssh-privatekey", true),
85+
)
25786
}
25887

259-
if len(instance.Spec.Workflow) > 0 && instance.Spec.Workflow[externalWorkflowCounter].ExtraConfigmapsMounts != nil {
260-
for _, vol := range *instance.Spec.Workflow[externalWorkflowCounter].ExtraConfigmapsMounts {
261-
262-
extraConfigmapsMounts := corev1.VolumeMount{
263-
Name: vol.Name,
264-
MountPath: vol.MountPath,
265-
SubPath: vol.SubPath,
266-
ReadOnly: true,
267-
}
88+
volumeMounts = util.AppendExtraMountsVolumeMounts(volumeMounts, instance.Spec.ExtraMounts, svc)
89+
volumeMounts = util.AppendExtraConfigmapsVolumeMounts(volumeMounts, instance.Spec.ExtraConfigmapsMounts)
26890

269-
volumeMounts = append(volumeMounts, extraConfigmapsMounts)
91+
if len(instance.Spec.Workflow) > 0 {
92+
cmMounts := instance.Spec.Workflow[externalWorkflowCounter].ExtraConfigmapsMounts
93+
if cmMounts != nil {
94+
volumeMounts = util.AppendExtraConfigmapsVolumeMounts(volumeMounts, *cmMounts)
27095
}
27196
}
27297

internal/horizontest/pod.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func Pod(
3636
PodRunAsUser,
3737
instance.Spec.SELinuxLevel,
3838
instance.Spec.Tolerations,
39-
GetVolumeMounts(mountCerts, mountKubeconfig, HorizonTestPropagation, instance),
39+
GetVolumeMounts(instance, mountCerts, mountKubeconfig, HorizonTestPropagation),
4040
GetVolumes(instance, logsPVCName, mountCerts, mountKubeconfig, HorizonTestPropagation),
4141
)
4242
}

0 commit comments

Comments
 (0)