@@ -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