Skip to content

Commit

Permalink
Fixes generate kube incorrect when bind-mounting "/" and "/root"
Browse files Browse the repository at this point in the history
Signed-off-by: zhangguanzhang <[email protected]>
  • Loading branch information
zhangguanzhang committed Apr 26, 2021
1 parent 9ca53cf commit 3bf0fbf
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
9 changes: 8 additions & 1 deletion libpod/kube.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package libpod

import (
"fmt"
"math/rand"
"os"
"strconv"
Expand Down Expand Up @@ -539,11 +540,17 @@ func libpodMountsToKubeVolumeMounts(c *Container) ([]v1.VolumeMount, []v1.Volume
namedVolumes, mounts := c.sortUserVolumes(c.config.Spec)
vms := make([]v1.VolumeMount, 0, len(mounts))
vos := make([]v1.Volume, 0, len(mounts))
for _, m := range mounts {

var suffix string
for index, m := range mounts {
vm, vo, err := generateKubeVolumeMount(m)
if err != nil {
return vms, vos, err
}
// Name will be the same, so use the index as suffix
suffix = fmt.Sprintf("-%d", index)
vm.Name += suffix
vo.Name += suffix
vms = append(vms, vm)
vos = append(vos, vo)
}
Expand Down
23 changes: 23 additions & 0 deletions test/e2e/generate_kube_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,29 @@ var _ = Describe("Podman generate kube", func() {
Expect(inspect.OutputToString()).To(ContainSubstring(vol1))
})

It("podman generate kube when bind-mounting '/' and '/root' at the same time ", func() {
// Fixes https://github.com/containers/podman/issues/9764

ctrName := "mount-root-ctr"
session1 := podmanTest.Podman([]string{"run", "-d", "--pod", "new:mount-root-conflict", "--name", ctrName,
"-v", "/:/volume1/",
"-v", "/root:/volume2/",
"alpine", "top"})
session1.WaitWithDefaultTimeout()
Expect(session1.ExitCode()).To(Equal(0))

kube := podmanTest.Podman([]string{"generate", "kube", "mount-root-conflict"})
kube.WaitWithDefaultTimeout()
Expect(kube.ExitCode()).To(Equal(0))

pod := new(v1.Pod)
err := yaml.Unmarshal(kube.Out.Contents(), pod)
Expect(err).To(BeNil())

Expect(len(pod.Spec.Volumes)).To(Equal(2))

})

It("podman generate kube with persistent volume claim", func() {
vol := "vol-test-persistent-volume-claim"

Expand Down

0 comments on commit 3bf0fbf

Please sign in to comment.