Merge pull request #21497 from vikas-goel/volsfrom
Use semi-colon as the field separator for internal volumes-from inspect annotation
This commit is contained in:
commit
75e6564138
|
|
@ -54,7 +54,7 @@ func (c *Container) volumesFrom() ([]string, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if ctrs, ok := ctrSpec.Annotations[define.InspectAnnotationVolumesFrom]; ok {
|
if ctrs, ok := ctrSpec.Annotations[define.InspectAnnotationVolumesFrom]; ok {
|
||||||
return strings.Split(ctrs, ","), nil
|
return strings.Split(ctrs, ";"), nil
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
@ -511,7 +511,7 @@ func (c *Container) generateInspectContainerHostConfig(ctrSpec *spec.Spec, named
|
||||||
hostConfig.AutoRemove = true
|
hostConfig.AutoRemove = true
|
||||||
}
|
}
|
||||||
if ctrs, ok := ctrSpec.Annotations[define.InspectAnnotationVolumesFrom]; ok {
|
if ctrs, ok := ctrSpec.Annotations[define.InspectAnnotationVolumesFrom]; ok {
|
||||||
hostConfig.VolumesFrom = strings.Split(ctrs, ",")
|
hostConfig.VolumesFrom = strings.Split(ctrs, ";")
|
||||||
}
|
}
|
||||||
if ctrSpec.Annotations[define.InspectAnnotationPrivileged] == define.InspectResponseTrue {
|
if ctrSpec.Annotations[define.InspectAnnotationPrivileged] == define.InspectResponseTrue {
|
||||||
hostConfig.Privileged = true
|
hostConfig.Privileged = true
|
||||||
|
|
|
||||||
|
|
@ -278,7 +278,7 @@ func (p *Pod) VolumesFrom() []string {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if ctrs, ok := infra.config.Spec.Annotations[define.InspectAnnotationVolumesFrom]; ok {
|
if ctrs, ok := infra.config.Spec.Annotations[define.InspectAnnotationVolumesFrom]; ok {
|
||||||
return strings.Split(ctrs, ",")
|
return strings.Split(ctrs, ";")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ func SpecGenToOCI(ctx context.Context, s *specgen.SpecGenerator, rt *libpod.Runt
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(s.VolumesFrom) > 0 {
|
if len(s.VolumesFrom) > 0 {
|
||||||
configSpec.Annotations[define.InspectAnnotationVolumesFrom] = strings.Join(s.VolumesFrom, ",")
|
configSpec.Annotations[define.InspectAnnotationVolumesFrom] = strings.Join(s.VolumesFrom, ";")
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.IsPrivileged() {
|
if s.IsPrivileged() {
|
||||||
|
|
|
||||||
|
|
@ -322,7 +322,7 @@ func SpecGenToOCI(ctx context.Context, s *specgen.SpecGenerator, rt *libpod.Runt
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(s.VolumesFrom) > 0 {
|
if len(s.VolumesFrom) > 0 {
|
||||||
configSpec.Annotations[define.InspectAnnotationVolumesFrom] = strings.Join(s.VolumesFrom, ",")
|
configSpec.Annotations[define.InspectAnnotationVolumesFrom] = strings.Join(s.VolumesFrom, ";")
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.IsPrivileged() {
|
if s.IsPrivileged() {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
package integration
|
package integration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/containers/podman/v4/libpod/define"
|
"github.com/containers/podman/v4/libpod/define"
|
||||||
"github.com/containers/podman/v4/pkg/annotations"
|
"github.com/containers/podman/v4/pkg/annotations"
|
||||||
. "github.com/containers/podman/v4/test/utils"
|
. "github.com/containers/podman/v4/test/utils"
|
||||||
|
|
@ -44,4 +47,27 @@ var _ = Describe("Podman container inspect", func() {
|
||||||
Expect(data[0].NetworkSettings.Ports).
|
Expect(data[0].NetworkSettings.Ports).
|
||||||
To(Equal(map[string][]define.InspectHostPort{"80/tcp": nil, "8989/tcp": nil}))
|
To(Equal(map[string][]define.InspectHostPort{"80/tcp": nil, "8989/tcp": nil}))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman inspect shows volumes-from with mount options", func() {
|
||||||
|
ctr1 := "volfctr"
|
||||||
|
ctr2 := "voltctr"
|
||||||
|
vol1 := filepath.Join(podmanTest.TempDir, "vol-test1")
|
||||||
|
volsctr := ctr1 + ":z,ro"
|
||||||
|
|
||||||
|
err := os.MkdirAll(vol1, 0755)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
session := podmanTest.Podman([]string{"create", "--name", ctr1, "-v", vol1, CITEST_IMAGE})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(ExitCleanly())
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"create", "--volumes-from", volsctr, "--name", ctr2, CITEST_IMAGE})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(ExitCleanly())
|
||||||
|
|
||||||
|
data := podmanTest.InspectContainer(ctr2)
|
||||||
|
Expect(data).To(HaveLen(1))
|
||||||
|
Expect(data[0].HostConfig.VolumesFrom).To(Equal([]string{volsctr}))
|
||||||
|
Expect(data[0].Config.Annotations[define.InspectAnnotationVolumesFrom]).To(Equal(volsctr))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1699,6 +1699,44 @@ USER test1`
|
||||||
Expect(pod.Annotations).To(HaveKeyWithValue(define.InspectAnnotationVolumesFrom+"/"+ctr2, ctr1))
|
Expect(pod.Annotations).To(HaveKeyWithValue(define.InspectAnnotationVolumesFrom+"/"+ctr2, ctr1))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("pod volumes-from annotation with semicolon as field separator", func() {
|
||||||
|
// Assert that volumes-from annotation for multiple source
|
||||||
|
// containers along with their mount options are getting
|
||||||
|
// generated with semicolon as the field separator.
|
||||||
|
|
||||||
|
srcctr1, srcctr2, tgtctr := "srcctr1", "srcctr2", "tgtctr"
|
||||||
|
frmopt1, frmopt2 := srcctr1+":ro", srcctr2+":ro"
|
||||||
|
vol1 := filepath.Join(podmanTest.TempDir, "vol-test1")
|
||||||
|
vol2 := filepath.Join(podmanTest.TempDir, "vol-test2")
|
||||||
|
|
||||||
|
err1 := os.MkdirAll(vol1, 0755)
|
||||||
|
Expect(err1).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
err2 := os.MkdirAll(vol2, 0755)
|
||||||
|
Expect(err2).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
session := podmanTest.Podman([]string{"create", "--name", srcctr1, "-v", vol1, CITEST_IMAGE})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(ExitCleanly())
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"create", "--name", srcctr2, "-v", vol2, CITEST_IMAGE})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(ExitCleanly())
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"create", "--volumes-from", frmopt1, "--volumes-from", frmopt2, "--name", tgtctr, CITEST_IMAGE})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(ExitCleanly())
|
||||||
|
|
||||||
|
kube := podmanTest.Podman([]string{"kube", "generate", "--podman-only", tgtctr})
|
||||||
|
kube.WaitWithDefaultTimeout()
|
||||||
|
Expect(kube).Should(ExitCleanly())
|
||||||
|
|
||||||
|
pod := new(v1.Pod)
|
||||||
|
err3 := yaml.Unmarshal(kube.Out.Contents(), pod)
|
||||||
|
Expect(err3).ToNot(HaveOccurred())
|
||||||
|
Expect(pod.Annotations).To(HaveKeyWithValue(define.InspectAnnotationVolumesFrom+"/"+tgtctr, frmopt1+";"+frmopt2))
|
||||||
|
})
|
||||||
|
|
||||||
It("--podman-only on container with --rm", func() {
|
It("--podman-only on container with --rm", func() {
|
||||||
ctr := "ctr"
|
ctr := "ctr"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue