Skip to content

Commit ecbe3b6

Browse files
author
Wei Fu
authored
Merge pull request #1227 from Ace-Tang/full_spec_params
feature: add pidslimit implement
2 parents 3374daf + 7fc11df commit ecbe3b6

File tree

6 files changed

+52
-1
lines changed

6 files changed

+52
-1
lines changed

cli/common_flags.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ func addCommonFlags(flagSet *pflag.FlagSet) *container {
8484

8585
flagSet.StringVarP(&c.workdir, "workdir", "w", "", "Set the working directory in a container")
8686
flagSet.Var(&c.ulimit, "ulimit", "Set container ulimit")
87+
flagSet.Int64Var(&c.pidsLimit, "pids-limit", -1, "Set container pids limit, -1 for unlimited")
8788

8889
flagSet.BoolVar(&c.rich, "rich", false, "Start container in rich container mode. (default false)")
8990
flagSet.StringVar(&c.richMode, "rich-mode", "", "Choose one rich container mode. dumb-init(default), systemd, sbin-init")

cli/container.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ type container struct {
6969
specAnnotation []string
7070
cgroupParent string
7171
ulimit Ulimit
72+
pidsLimit int64
7273

7374
//add for rich container mode
7475
rich bool
@@ -223,6 +224,7 @@ func (c *container) config() (*types.ContainerCreateConfig, error) {
223224
IntelRdtL3Cbm: intelRdtL3Cbm,
224225
CgroupParent: c.cgroupParent,
225226
Ulimits: c.ulimit.value(),
227+
PidsLimit: c.pidsLimit,
226228
},
227229
EnableLxcfs: c.enableLxcfs,
228230
Privileged: c.privileged,

daemon/mgr/spec_linux.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,10 @@ func setupResource(ctx context.Context, c *Container, s *specs.Spec) error {
140140
return err
141141
}
142142

143-
//TODO: nedd support Pids, HugepageLimits, Network cgroup set
143+
// start to setup pids limit
144+
s.Linux.Resources.Pids = &specs.LinuxPids{
145+
Limit: c.HostConfig.PidsLimit,
146+
}
144147

145148
return nil
146149
}

test/cli_create_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,3 +474,18 @@ func (suite *PouchCreateSuite) TestCreateWithUlimit(c *check.C) {
474474
c.Assert(int(ul.Hard), check.Equals, 21)
475475
c.Assert(int(ul.Soft), check.Equals, 21)
476476
}
477+
478+
// TestCreateWithPidsLimit tests running container with --pids-limit flag.
479+
func (suite *PouchRunSuite) TestCreateWithPidsLimit(c *check.C) {
480+
cname := "TestCreateWithPidsLimit"
481+
res := command.PouchRun("create", "--pids-limit", "10", "--name", cname, busyboxImage)
482+
res.Assert(c, icmd.Success)
483+
484+
output := command.PouchRun("inspect", cname).Stdout()
485+
result := []types.ContainerJSON{}
486+
if err := json.Unmarshal([]byte(output), &result); err != nil {
487+
c.Errorf("failed to decode inspect output: %v", err)
488+
}
489+
pl := result[0].HostConfig.PidsLimit
490+
c.Assert(int(pl), check.Equals, 10)
491+
}

test/cli_run_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,3 +1085,22 @@ func (suite *PouchRunSuite) TestRunWithUlimit(c *check.C) {
10851085
c.Assert(int(ul.Soft), check.Equals, 256)
10861086

10871087
}
1088+
1089+
// TestRunWithPidsLimit tests running container with --pids-limit flag.
1090+
func (suite *PouchRunSuite) TestRunWithPidsLimit(c *check.C) {
1091+
cname := "TestRunWithPidsLimit"
1092+
pidfile := "/sys/fs/cgroup/pids/pids.max"
1093+
res := command.PouchRun("run", "--pids-limit", "10", "--name", cname, busyboxImage, "cat", pidfile)
1094+
res.Assert(c, icmd.Success)
1095+
1096+
out := res.Stdout()
1097+
c.Assert(out, check.Equals, "10\n")
1098+
1099+
output := command.PouchRun("inspect", cname).Stdout()
1100+
result := []types.ContainerJSON{}
1101+
if err := json.Unmarshal([]byte(output), &result); err != nil {
1102+
c.Errorf("failed to decode inspect output: %v", err)
1103+
}
1104+
pl := result[0].HostConfig.PidsLimit
1105+
c.Assert(int(pl), check.Equals, 10)
1106+
}

test/cli_start_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,3 +285,14 @@ func (suite *PouchStartSuite) TestStartWithUlimit(c *check.C) {
285285

286286
command.PouchRun("start", name).Assert(c, icmd.Success)
287287
}
288+
289+
// TestStartWithPidsLimit tests running container with --pids-limit flag.
290+
func (suite *PouchStartSuite) TestStartWithPidsLimit(c *check.C) {
291+
name := "TestStartWithPidsLimit"
292+
pidfile := "/sys/fs/cgroup/pids/pids.max"
293+
res := command.PouchRun("create", "--pids-limit", "10", "--name", name, busyboxImage, "cat", pidfile)
294+
res.Assert(c, icmd.Success)
295+
defer DelContainerForceMultyTime(c, name)
296+
297+
command.PouchRun("start", name).Assert(c, icmd.Success)
298+
}

0 commit comments

Comments
 (0)