summaryrefslogtreecommitdiff
path: root/libpod
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@gmail.com>2018-01-10 16:21:54 -0500
committerMatthew Heon <matthew.heon@gmail.com>2018-01-10 16:21:54 -0500
commit04e0687da14070ea3ff208687d4f749d5dc319a0 (patch)
tree1611f45b3b996e204af0409d4d29e2e749a1b267 /libpod
parente6be800ec633342aef656e0a2ed0bdc4519796d9 (diff)
downloadpodman-04e0687da14070ea3ff208687d4f749d5dc319a0.tar.gz
podman-04e0687da14070ea3ff208687d4f749d5dc319a0.tar.bz2
podman-04e0687da14070ea3ff208687d4f749d5dc319a0.zip
Add ability to set CGroup Parent via API
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
Diffstat (limited to 'libpod')
-rw-r--r--libpod/container.go3
-rw-r--r--libpod/container_top.go2
-rw-r--r--libpod/options.go17
3 files changed, 19 insertions, 3 deletions
diff --git a/libpod/container.go b/libpod/container.go
index 79fd5d42c..fbc01be0a 100644
--- a/libpod/container.go
+++ b/libpod/container.go
@@ -83,7 +83,6 @@ type Container struct {
// TODO Add readonly support
// TODO add SHM size support
// TODO add shared namespace support
-// TODO add cgroup parent support
// containerRuntimeInfo contains the current state of the container
// It is stored on disk in a tmpfs and recreated on reboot
@@ -1228,7 +1227,7 @@ func (c *Container) cleanupStorage() error {
// CGroupPath returns a cgroups "path" for a given container.
func (c *Container) CGroupPath() cgroups.Path {
- return cgroups.StaticPath(filepath.Join(CgroupParent, fmt.Sprintf("libpod-conmon-%s", c.ID())))
+ return cgroups.StaticPath(filepath.Join(c.config.CgroupParent, fmt.Sprintf("libpod-conmon-%s", c.ID())))
}
// copyHostFileToRundir copies the provided file to the runtimedir
diff --git a/libpod/container_top.go b/libpod/container_top.go
index 020773488..0eb1d0c41 100644
--- a/libpod/container_top.go
+++ b/libpod/container_top.go
@@ -25,7 +25,7 @@ func (c *Container) GetContainerPids() ([]string, error) {
// Gets the pids for a container without locking. should only be called from a func where
// locking has already been established.
func (c *Container) getContainerPids() ([]string, error) {
- taskFile := filepath.Join("/sys/fs/cgroup/pids", CgroupParent, fmt.Sprintf("libpod-conmon-%s", c.ID()), c.ID(), "tasks")
+ taskFile := filepath.Join("/sys/fs/cgroup/pids", c.config.CgroupParent, fmt.Sprintf("libpod-conmon-%s", c.ID()), c.ID(), "tasks")
logrus.Debug("reading pids from ", taskFile)
content, err := ioutil.ReadFile(taskFile)
if err != nil {
diff --git a/libpod/options.go b/libpod/options.go
index 199bf9ee9..75ad7acfb 100644
--- a/libpod/options.go
+++ b/libpod/options.go
@@ -465,6 +465,23 @@ func WithNetNS(portMappings []ocicni.PortMapping) CtrCreateOption {
}
}
+// WithCgroupParent sets the Cgroup Parent of the new container
+func WithCgroupParent(parent string) CtrCreateOption {
+ return func(ctr *Container) error {
+ if ctr.valid {
+ return ErrCtrFinalized
+ }
+
+ if parent == "" {
+ return errors.Wrapf(ErrInvalidArg, "cgroup parent cannot be empty")
+ }
+
+ ctr.config.CgroupParent = parent
+
+ return nil
+ }
+}
+
// Pod Creation Options
// WithPodName sets the name of the pod