e2e: MakePod() should support block and inline volumes

This commit is contained in:
Fabio Bertinatto 2021-02-17 12:39:07 +01:00
parent 43a32c14f5
commit 6a645592fc

View File

@ -154,15 +154,7 @@ func MakePod(ns string, nodeSelector map[string]string, pvclaims []*v1.Persisten
RestartPolicy: v1.RestartPolicyOnFailure, RestartPolicy: v1.RestartPolicyOnFailure,
}, },
} }
var volumeMounts = make([]v1.VolumeMount, len(pvclaims)) setVolumes(&podSpec.Spec, pvclaims, nil /*inline volume sources*/, false /*PVCs readonly*/)
var volumes = make([]v1.Volume, len(pvclaims))
for index, pvclaim := range pvclaims {
volumename := fmt.Sprintf("volume%v", index+1)
volumeMounts[index] = v1.VolumeMount{Name: volumename, MountPath: "/mnt/" + volumename}
volumes[index] = v1.Volume{Name: volumename, VolumeSource: v1.VolumeSource{PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{ClaimName: pvclaim.Name, ReadOnly: false}}}
}
podSpec.Spec.Containers[0].VolumeMounts = volumeMounts
podSpec.Spec.Volumes = volumes
if nodeSelector != nil { if nodeSelector != nil {
podSpec.Spec.NodeSelector = nodeSelector podSpec.Spec.NodeSelector = nodeSelector
} }
@ -223,33 +215,42 @@ func MakePodSpec(podConfig *Config) *v1.PodSpec {
podSpec.SecurityContext.FSGroupChangePolicy = podConfig.PodFSGroupChangePolicy podSpec.SecurityContext.FSGroupChangePolicy = podConfig.PodFSGroupChangePolicy
} }
setVolumes(podSpec, podConfig.PVCs, podConfig.InlineVolumeSources, podConfig.PVCsReadOnly)
SetNodeSelection(podSpec, podConfig.NodeSelection)
return podSpec
}
func setVolumes(podSpec *v1.PodSpec, pvcs []*v1.PersistentVolumeClaim, inlineVolumeSources []*v1.VolumeSource, pvcsReadOnly bool) {
var volumeMounts = make([]v1.VolumeMount, 0) var volumeMounts = make([]v1.VolumeMount, 0)
var volumeDevices = make([]v1.VolumeDevice, 0) var volumeDevices = make([]v1.VolumeDevice, 0)
var volumes = make([]v1.Volume, len(podConfig.PVCs)+len(podConfig.InlineVolumeSources)) var volumes = make([]v1.Volume, len(pvcs)+len(inlineVolumeSources))
volumeIndex := 0 volumeIndex := 0
for _, pvclaim := range podConfig.PVCs { for _, pvclaim := range pvcs {
volumename := fmt.Sprintf("volume%v", volumeIndex+1) volumename := fmt.Sprintf("volume%v", volumeIndex+1)
if pvclaim.Spec.VolumeMode != nil && *pvclaim.Spec.VolumeMode == v1.PersistentVolumeBlock { if pvclaim.Spec.VolumeMode != nil && *pvclaim.Spec.VolumeMode == v1.PersistentVolumeBlock {
volumeDevices = append(volumeDevices, v1.VolumeDevice{Name: volumename, DevicePath: "/mnt/" + volumename}) volumeDevices = append(volumeDevices, v1.VolumeDevice{Name: volumename, DevicePath: "/mnt/" + volumename})
} else { } else {
volumeMounts = append(volumeMounts, v1.VolumeMount{Name: volumename, MountPath: "/mnt/" + volumename}) volumeMounts = append(volumeMounts, v1.VolumeMount{Name: volumename, MountPath: "/mnt/" + volumename})
} }
volumes[volumeIndex] = v1.Volume{
volumes[volumeIndex] = v1.Volume{Name: volumename, VolumeSource: v1.VolumeSource{PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{ClaimName: pvclaim.Name, ReadOnly: podConfig.PVCsReadOnly}}} Name: volumename,
VolumeSource: v1.VolumeSource{
PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{
ClaimName: pvclaim.Name,
ReadOnly: pvcsReadOnly,
},
},
}
volumeIndex++ volumeIndex++
} }
for _, src := range podConfig.InlineVolumeSources { for _, src := range inlineVolumeSources {
volumename := fmt.Sprintf("volume%v", volumeIndex+1) volumename := fmt.Sprintf("volume%v", volumeIndex+1)
// In-line volumes can be only filesystem, not block. // In-line volumes can be only filesystem, not block.
volumeMounts = append(volumeMounts, v1.VolumeMount{Name: volumename, MountPath: "/mnt/" + volumename}) volumeMounts = append(volumeMounts, v1.VolumeMount{Name: volumename, MountPath: "/mnt/" + volumename})
volumes[volumeIndex] = v1.Volume{Name: volumename, VolumeSource: *src} volumes[volumeIndex] = v1.Volume{Name: volumename, VolumeSource: *src}
volumeIndex++ volumeIndex++
} }
podSpec.Containers[0].VolumeMounts = volumeMounts podSpec.Containers[0].VolumeMounts = volumeMounts
podSpec.Containers[0].VolumeDevices = volumeDevices podSpec.Containers[0].VolumeDevices = volumeDevices
podSpec.Volumes = volumes podSpec.Volumes = volumes
SetNodeSelection(podSpec, podConfig.NodeSelection)
return podSpec
} }