diff options
author | Urvashi Mohnani <umohnani@redhat.com> | 2021-11-28 19:32:10 -0500 |
---|---|---|
committer | Urvashi Mohnani <umohnani@redhat.com> | 2021-12-02 14:48:04 -0500 |
commit | 7d331d35ddf5e511bd474505b675191d3f949dc0 (patch) | |
tree | 36c0bc83bb0ff98aade05a9546d6a886843348dd /pkg/domain/infra/abi/play.go | |
parent | 7324d94648a9987b0de2dc95cf1b6fbc20592532 (diff) | |
download | podman-7d331d35ddf5e511bd474505b675191d3f949dc0.tar.gz podman-7d331d35ddf5e511bd474505b675191d3f949dc0.tar.bz2 podman-7d331d35ddf5e511bd474505b675191d3f949dc0.zip |
Add support for configmap volumes to play kube
If the k8s yaml has volumes from a configmap, play kube
will now create a volume based on the data from the
configmap and volume source and set it to the right path
in the container accordingly.
Add tests for this and update some test for ENV from configmap.
Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
Diffstat (limited to 'pkg/domain/infra/abi/play.go')
-rw-r--r-- | pkg/domain/infra/abi/play.go | 71 |
1 files changed, 50 insertions, 21 deletions
diff --git a/pkg/domain/infra/abi/play.go b/pkg/domain/infra/abi/play.go index bdf22cf0c..ab52fad64 100644 --- a/pkg/domain/infra/abi/play.go +++ b/pkg/domain/infra/abi/play.go @@ -239,27 +239,6 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY return nil, err } podSpec := entities.PodSpec{PodSpecGen: *p} - volumes, err := kube.InitializeVolumes(podYAML.Spec.Volumes) - if err != nil { - return nil, err - } - - seccompPaths, err := kube.InitializeSeccompPaths(podYAML.ObjectMeta.Annotations, options.SeccompProfileRoot) - if err != nil { - return nil, err - } - - var ctrRestartPolicy string - switch podYAML.Spec.RestartPolicy { - case v1.RestartPolicyAlways: - ctrRestartPolicy = define.RestartPolicyAlways - case v1.RestartPolicyOnFailure: - ctrRestartPolicy = define.RestartPolicyOnFailure - case v1.RestartPolicyNever: - ctrRestartPolicy = define.RestartPolicyNo - default: // Default to Always - ctrRestartPolicy = define.RestartPolicyAlways - } configMapIndex := make(map[string]struct{}) for _, configMap := range configMaps { @@ -284,6 +263,56 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY configMaps = append(configMaps, cm) } + volumes, err := kube.InitializeVolumes(podYAML.Spec.Volumes, configMaps) + if err != nil { + return nil, err + } + + // Go through the volumes and create a podman volume for all volumes that have been + // defined by a configmap + for _, v := range volumes { + if v.Type == kube.KubeVolumeTypeConfigMap && !v.Optional { + vol, err := ic.Libpod.NewVolume(ctx, libpod.WithVolumeName(v.Source)) + if err != nil { + return nil, errors.Wrapf(err, "cannot create a local volume for volume from configmap %q", v.Source) + } + mountPoint, err := vol.MountPoint() + if err != nil || mountPoint == "" { + return nil, errors.Wrapf(err, "unable to get mountpoint of volume %q", vol.Name()) + } + // Create files and add data to the volume mountpoint based on the Items in the volume + for k, v := range v.Items { + dataPath := filepath.Join(mountPoint, k) + f, err := os.Create(dataPath) + if err != nil { + return nil, errors.Wrapf(err, "cannot create file %q at volume mountpoint %q", k, mountPoint) + } + defer f.Close() + _, err = f.WriteString(v) + if err != nil { + return nil, err + } + } + } + } + + seccompPaths, err := kube.InitializeSeccompPaths(podYAML.ObjectMeta.Annotations, options.SeccompProfileRoot) + if err != nil { + return nil, err + } + + var ctrRestartPolicy string + switch podYAML.Spec.RestartPolicy { + case v1.RestartPolicyAlways: + ctrRestartPolicy = define.RestartPolicyAlways + case v1.RestartPolicyOnFailure: + ctrRestartPolicy = define.RestartPolicyOnFailure + case v1.RestartPolicyNever: + ctrRestartPolicy = define.RestartPolicyNo + default: // Default to Always + ctrRestartPolicy = define.RestartPolicyAlways + } + if podOpt.Infra { infraImage := util.DefaultContainerConfig().Engine.InfraImage infraOptions := entities.NewInfraContainerCreateOptions() |