Skip to content

Commit a3ca8a0

Browse files
committed
Add linux resource oci.SpecOpts
Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
1 parent ca66f3d commit a3ca8a0

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

oci/spec_opts.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,21 @@ func setResources(s *Spec) {
9191
}
9292
}
9393

94+
// nolint
95+
func setCPU(s *Spec) {
96+
setResources(s)
97+
if s.Linux != nil {
98+
if s.Linux.Resources.CPU == nil {
99+
s.Linux.Resources.CPU = &specs.LinuxCPU{}
100+
}
101+
}
102+
if s.Windows != nil {
103+
if s.Windows.Resources.CPU == nil {
104+
s.Windows.Resources.CPU = &specs.WindowsCPUResources{}
105+
}
106+
}
107+
}
108+
94109
// setCapabilities sets Linux Capabilities to empty if unset
95110
func setCapabilities(s *Spec) {
96111
setProcess(s)

oci/spec_opts_linux.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,64 @@ func deviceFromPath(path, permissions string) (*specs.LinuxDevice, error) {
119119
GID: &stat.Gid,
120120
}, nil
121121
}
122+
123+
// WithMemorySwap sets the container's swap in bytes
124+
func WithMemorySwap(swap int64) SpecOpts {
125+
return func(ctx context.Context, _ Client, c *containers.Container, s *Spec) error {
126+
setResources(s)
127+
if s.Linux.Resources.Memory == nil {
128+
s.Linux.Resources.Memory = &specs.LinuxMemory{}
129+
}
130+
s.Linux.Resources.Memory.Swap = &swap
131+
return nil
132+
}
133+
}
134+
135+
// WithPidsLimit sets the container's pid limit or maximum
136+
func WithPidsLimit(limit int64) SpecOpts {
137+
return func(ctx context.Context, _ Client, c *containers.Container, s *Spec) error {
138+
setResources(s)
139+
if s.Linux.Resources.Pids == nil {
140+
s.Linux.Resources.Pids = &specs.LinuxPids{}
141+
}
142+
s.Linux.Resources.Pids.Limit = limit
143+
return nil
144+
}
145+
}
146+
147+
// WithCPUShares sets the container's cpu shares
148+
func WithCPUShares(shares uint64) SpecOpts {
149+
return func(ctx context.Context, _ Client, c *containers.Container, s *Spec) error {
150+
setCPU(s)
151+
s.Linux.Resources.CPU.Shares = &shares
152+
return nil
153+
}
154+
}
155+
156+
// WithCPUs sets the container's cpus/cores for use by the container
157+
func WithCPUs(cpus string) SpecOpts {
158+
return func(ctx context.Context, _ Client, c *containers.Container, s *Spec) error {
159+
setCPU(s)
160+
s.Linux.Resources.CPU.Cpus = cpus
161+
return nil
162+
}
163+
}
164+
165+
// WithCPUsMems sets the container's cpu mems for use by the container
166+
func WithCPUsMems(mems string) SpecOpts {
167+
return func(ctx context.Context, _ Client, c *containers.Container, s *Spec) error {
168+
setCPU(s)
169+
s.Linux.Resources.CPU.Mems = mems
170+
return nil
171+
}
172+
}
173+
174+
// WithCPUCFS sets the container's Completely fair scheduling (CFS) quota and period
175+
func WithCPUCFS(quota int64, period uint64) SpecOpts {
176+
return func(ctx context.Context, _ Client, c *containers.Container, s *Spec) error {
177+
setCPU(s)
178+
s.Linux.Resources.CPU.Quota = &quota
179+
s.Linux.Resources.CPU.Period = &period
180+
return nil
181+
}
182+
}

0 commit comments

Comments
 (0)