podman

Форк
0
/
run_cgroup_parent_test.go 
99 строк · 3.4 Кб
1
package integration
2

3
import (
4
	"fmt"
5
	"os"
6
	"path/filepath"
7
	"strings"
8

9
	. "github.com/containers/podman/v5/test/utils"
10
	. "github.com/onsi/ginkgo/v2"
11
	. "github.com/onsi/gomega"
12
)
13

14
const cgroupRoot = "/sys/fs/cgroup"
15

16
var _ = Describe("Podman run with --cgroup-parent", func() {
17

18
	BeforeEach(func() {
19
		SkipIfRootlessCgroupsV1("cgroup parent is not supported in cgroups v1")
20
	})
21

22
	Specify("valid --cgroup-parent using cgroupfs", func() {
23
		if !Containerized() {
24
			Skip("Must be containerized to run this test.")
25
		}
26
		cgroup := "/zzz"
27
		run := podmanTest.Podman([]string{"run", "--cgroupns=host", "--cgroup-parent", cgroup, fedoraMinimal, "cat", "/proc/self/cgroup"})
28
		run.WaitWithDefaultTimeout()
29
		Expect(run).Should(ExitCleanly())
30
		Expect(run.OutputToString()).To(ContainSubstring(cgroup))
31
	})
32

33
	Specify("no --cgroup-parent", func() {
34
		cgroup := "/libpod_parent"
35
		if !Containerized() && podmanTest.CgroupManager != "cgroupfs" {
36
			if isRootless() {
37
				cgroup = "/user.slice"
38
			} else {
39
				cgroup = "/machine.slice"
40
			}
41
		}
42
		run := podmanTest.Podman([]string{"run", "--cgroupns=host", fedoraMinimal, "cat", "/proc/self/cgroup"})
43
		run.WaitWithDefaultTimeout()
44
		Expect(run).Should(ExitCleanly())
45
		Expect(run.OutputToString()).To(ContainSubstring(cgroup))
46
	})
47

48
	Specify("always honor --cgroup-parent", func() {
49
		SkipIfCgroupV1("test not supported in cgroups v1")
50
		if Containerized() || podmanTest.CgroupManager == "cgroupfs" {
51
			Skip("Requires Systemd cgroup manager support")
52
		}
53
		if IsRemote() {
54
			Skip("Not supported for remote")
55
		}
56

57
		run := podmanTest.Podman([]string{"run", "-d", "--cgroupns=host", fedoraMinimal, "sleep", "100"})
58
		run.WaitWithDefaultTimeout()
59
		Expect(run).Should(ExitCleanly())
60
		cid := run.OutputToString()
61

62
		exec := podmanTest.Podman([]string{"exec", cid, "cat", "/proc/1/cgroup"})
63
		exec.WaitWithDefaultTimeout()
64
		Expect(exec).Should(ExitCleanly())
65

66
		containerCgroup := strings.TrimRight(strings.ReplaceAll(exec.OutputToString(), "0::", ""), "\n")
67

68
		// Move the container process to a sub cgroup
69
		content, err := os.ReadFile(filepath.Join(cgroupRoot, containerCgroup, "cgroup.procs"))
70
		Expect(err).ToNot(HaveOccurred())
71
		oldSubCgroupPath := filepath.Join(cgroupRoot, containerCgroup, "old-container")
72
		err = os.MkdirAll(oldSubCgroupPath, 0755)
73
		Expect(err).ToNot(HaveOccurred())
74
		err = os.WriteFile(filepath.Join(oldSubCgroupPath, "cgroup.procs"), content, 0644)
75
		Expect(err).ToNot(HaveOccurred())
76

77
		newCgroup := fmt.Sprintf("%s/new-container", containerCgroup)
78
		err = os.MkdirAll(filepath.Join(cgroupRoot, newCgroup), 0755)
79
		Expect(err).ToNot(HaveOccurred())
80

81
		run = podmanTest.Podman([]string{"--cgroup-manager=cgroupfs", "run", "--rm", "--cgroupns=host", fmt.Sprintf("--cgroup-parent=%s", newCgroup), fedoraMinimal, "cat", "/proc/self/cgroup"})
82
		run.WaitWithDefaultTimeout()
83
		Expect(run).Should(ExitCleanly())
84
		cgroupEffective := strings.TrimRight(strings.ReplaceAll(run.OutputToString(), "0::", ""), "\n")
85

86
		Expect(newCgroup).To(Equal(filepath.Dir(cgroupEffective)))
87
	})
88

89
	Specify("valid --cgroup-parent using slice", func() {
90
		if Containerized() || podmanTest.CgroupManager == "cgroupfs" {
91
			Skip("Requires Systemd cgroup manager support")
92
		}
93
		cgroup := "aaaa.slice"
94
		run := podmanTest.Podman([]string{"run", "--cgroupns=host", "--cgroup-parent", cgroup, fedoraMinimal, "cat", "/proc/1/cgroup"})
95
		run.WaitWithDefaultTimeout()
96
		Expect(run).Should(ExitCleanly())
97
		Expect(run.OutputToString()).To(ContainSubstring(cgroup))
98
	})
99
})
100

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.