summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Scrivano <gscrivan@redhat.com>2021-09-14 12:16:13 +0200
committerGiuseppe Scrivano <gscrivan@redhat.com>2021-09-14 12:35:22 +0200
commit44abc17977165ceb6b7d84efe4b9c62c8fbb2ac1 (patch)
tree97ba60706417b4fcf0e96578ca2716cfce0c5042
parentb603c7a4b91d30b33ce987740156f46804f24074 (diff)
downloadpodman-44abc17977165ceb6b7d84efe4b9c62c8fbb2ac1.tar.gz
podman-44abc17977165ceb6b7d84efe4b9c62c8fbb2ac1.tar.bz2
podman-44abc17977165ceb6b7d84efe4b9c62c8fbb2ac1.zip
libpod: honor --cgroups=split also with pods
Honor --cgroups=split also when the container is running in a pod. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
-rw-r--r--libpod/container_internal_linux.go3
-rw-r--r--test/e2e/run_test.go53
2 files changed, 32 insertions, 24 deletions
diff --git a/libpod/container_internal_linux.go b/libpod/container_internal_linux.go
index eabe8efd2..34f84203b 100644
--- a/libpod/container_internal_linux.go
+++ b/libpod/container_internal_linux.go
@@ -2495,9 +2495,6 @@ func (c *Container) getOCICgroupPath() (string, error) {
}
return c.config.CgroupParent, nil
case c.config.CgroupsMode == cgroupSplit:
- if c.config.CgroupParent != "" {
- return c.config.CgroupParent, nil
- }
selfCgroup, err := utils.GetOwnCgroup()
if err != nil {
return "", err
diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go
index 846da283d..b91b8a3b2 100644
--- a/test/e2e/run_test.go
+++ b/test/e2e/run_test.go
@@ -1295,31 +1295,42 @@ USER mail`, BB)
SkipIfRootlessCgroupsV1("Disable cgroups not supported on cgroupv1 for rootless users")
SkipIfRemote("--cgroups=split cannot be used in remote mode")
- container := podmanTest.Podman([]string{"run", "--rm", "--cgroups=split", ALPINE, "cat", "/proc/self/cgroup"})
- container.WaitWithDefaultTimeout()
- Expect(container).Should(Exit(0))
- lines := container.OutputToStringArray()
-
- cgroup := ""
- for _, line := range lines {
- parts := strings.SplitN(line, ":", 3)
- if !CGROUPSV2 {
- // ignore unified on cgroup v1.
- // both runc and crun do not set it.
- // crun does not set named hierarchies.
- if parts[1] == "" || strings.Contains(parts[1], "name=") {
+ checkLines := func(lines []string) {
+ cgroup := ""
+ for _, line := range lines {
+ parts := strings.SplitN(line, ":", 3)
+ if len(parts) < 2 {
continue
}
+ if !CGROUPSV2 {
+ // ignore unified on cgroup v1.
+ // both runc and crun do not set it.
+ // crun does not set named hierarchies.
+ if parts[1] == "" || strings.Contains(parts[1], "name=") {
+ continue
+ }
+ }
+ if parts[2] == "/" {
+ continue
+ }
+ if cgroup == "" {
+ cgroup = parts[2]
+ continue
+ }
+ Expect(cgroup).To(Equal(parts[2]))
}
- if parts[2] == "/" {
- continue
- }
- if cgroup == "" {
- cgroup = parts[2]
- continue
- }
- Expect(cgroup).To(Equal(parts[2]))
}
+
+ container := podmanTest.Podman([]string{"run", "--rm", "--cgroups=split", ALPINE, "cat", "/proc/self/cgroup"})
+ container.WaitWithDefaultTimeout()
+ Expect(container).Should(Exit(0))
+ checkLines(container.OutputToStringArray())
+
+ // check that --cgroups=split is honored also when a container runs in a pod
+ container = podmanTest.Podman([]string{"run", "--rm", "--pod", "new:split-test-pod", "--cgroups=split", ALPINE, "cat", "/proc/self/cgroup"})
+ container.WaitWithDefaultTimeout()
+ Expect(container).Should(Exit(0))
+ checkLines(container.OutputToStringArray())
})
It("podman run with cgroups=disabled runs without cgroups", func() {