Kube Play - allow creating image based volumes

Add volume.podman.io/image annotation to allow setting the source image

Signed-off-by: Ygal Blum <ygal.blum@gmail.com>
This commit is contained in:
Ygal Blum 2024-01-24 09:59:35 +02:00
parent 97cd376e7f
commit 269149a9fd
4 changed files with 35 additions and 0 deletions

View File

@ -61,6 +61,7 @@ A Kubernetes PersistentVolumeClaim represents a Podman named volume. Only the Pe
- volume.podman.io/gid
- volume.podman.io/mount-options
- volume.podman.io/import-source
- volume.podman.io/image
Use `volume.podman.io/import-source` to import the contents of the tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) specified in the annotation's value into the created Podman volume

View File

@ -1147,6 +1147,8 @@ func (ic *ContainerEngine) playKubePVC(ctx context.Context, mountLabel string, p
opts["o"] = v
case util.VolumeImportSourceAnnotation:
importFrom = v
case util.VolumeImageAnnotation:
opts["image"] = v
}
}
volOptions = append(volOptions, libpod.WithVolumeOptions(opts))

View File

@ -15,4 +15,6 @@ const (
VolumeMountOptsAnnotation = "volume.podman.io/mount-options"
// Kube annotation for podman volume import source.
VolumeImportSourceAnnotation = "volume.podman.io/import-source"
// Kube annotation for podman volume image.
VolumeImageAnnotation = "volume.podman.io/image"
)

View File

@ -4062,6 +4062,36 @@ o: {{ .Options.o }}`})
Expect(files[0].Name()).To(Equal(fileName))
})
It("persistentVolumeClaim - image based", func() {
volName := "myVolWithStorage"
imageName := "quay.io/libpod/alpine_nginx:latest"
pvc := getPVC(withPVCName(volName),
withPVCAnnotations(util.VolumeDriverAnnotation, "image"),
withPVCAnnotations(util.VolumeImageAnnotation, imageName),
)
err = generateKubeYaml("persistentVolumeClaim", pvc, kubeYaml)
Expect(err).ToNot(HaveOccurred())
kube := podmanTest.Podman([]string{"kube", "play", kubeYaml})
kube.WaitWithDefaultTimeout()
Expect(kube).Should(ExitCleanly())
inspect := podmanTest.Podman([]string{"inspect", volName, "--format", `
{
"Name": "{{ .Name }}",
"Driver": "{{ .Driver }}",
"Image": "{{ .Options.image }}"
}`})
inspect.WaitWithDefaultTimeout()
Expect(inspect).Should(ExitCleanly())
mp := make(map[string]string)
err = json.Unmarshal([]byte(inspect.OutputToString()), &mp)
Expect(err).ToNot(HaveOccurred())
Expect(mp["Name"]).To(Equal(volName))
Expect(mp["Driver"]).To(Equal("image"))
Expect(mp["Image"]).To(Equal(imageName))
})
// Multi doc related tests
It("multi doc yaml with persistentVolumeClaim, service and deployment", func() {
yamlDocs := []string{}