]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
python: Add support to create a cgroup on-disk 94/head
authorTom Hromatka <tom.hromatka@oracle.com>
Wed, 9 Feb 2022 19:28:57 +0000 (12:28 -0700)
committerTom Hromatka <tom.hromatka@oracle.com>
Thu, 10 Feb 2022 21:13:54 +0000 (14:13 -0700)
Add support to the python bindings to create a cgroup
on disk.

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
src/python/cgroup.pxd
src/python/libcgroup.pyx

index ac0f770267973fd02473c6a3d038ec19207fd626..29beca53347ef1c22a7756f3d07c77246737cba4 100644 (file)
@@ -43,6 +43,7 @@ cdef extern from "libcgroup.h":
     const cgroup_library_version * cgroup_version()
 
     cgroup *cgroup_new_cgroup(const char *name)
+    int cgroup_create_cgroup(cgroup *cg, int ignore_ownership)
     int cgroup_convert_cgroup(cgroup *out_cg, cg_version_t out_version,
                               cgroup  *in_cg, cg_version_t in_version)
     void cgroup_free(cgroup **cg)
index 0001cd28f6c847008b2c47c64fe35b66b7604a0e..558fbf5f29aa2837338ad5463396a5656b8e5578 100644 (file)
@@ -147,6 +147,12 @@ cdef class Cgroup:
         if cgcp == NULL:
             self.add_controller(ctrl_name)
 
+            cgcp = cgroup.cgroup_get_controller(self._cgp,
+                                                c_str(ctrl_name))
+            if cgcp == NULL:
+                raise RuntimeError("Failed to get controller {}".format(
+                                   ctrl_name))
+
         if setting_value == None:
             ret = cgroup.cgroup_add_value_string(cgcp,
                       c_str(setting_name), NULL)
@@ -270,5 +276,19 @@ cdef class Cgroup:
         if ret != 0:
             raise RuntimeError("cgxset failed: {}".format(ret))
 
+    def create(self, ignore_ownership=True):
+        """Write this cgroup to the cgroup sysfs
+
+        Arguments:
+        ignore_ownership - if true, all errors are ignored when setting ownership
+                           of the group and its tasks file
+
+        Return:
+        None
+        """
+        ret = cgroup.cgroup_create_cgroup(self._cgp, ignore_ownership)
+        if ret != 0:
+            raise RuntimeError("Failed to create cgroup: {}".format(ret))
+
     def __dealloc__(self):
         cgroup.cgroup_free(&self._cgp);