]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
ftests: Add a method to get a controller's cgroup version
authorTom Hromatka <tom.hromatka@oracle.com>
Mon, 26 Oct 2020 17:53:06 +0000 (11:53 -0600)
committerTom Hromatka <tom.hromatka@oracle.com>
Mon, 2 Nov 2020 21:59:44 +0000 (14:59 -0700)
Add a static method to the Cgroup class to get a
controller's cgroup version.

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Reviewed-by: Michal Koutný <mkoutny@suse.com>
ftests/cgroup.py

index c8bffa54489e77c5d99268cb840f5991beef42c9..6f7042d61efc03f2e65e80ca3f73fac9e9722ec3 100644 (file)
 #
 
 import consts
+from enum import Enum
 import os
 from run import Run
 
-class Cgroup(object):
+class Cgroup(Enum):
+    CGROUP_UNK = 0
+    CGROUP_V1 = 1
+    CGROUP_V2 = 2
+
     @staticmethod
     def build_cmd_path(in_container, cmd):
         if in_container:
@@ -170,3 +175,22 @@ class Cgroup(object):
             ret = Run.run(cmd)
 
         return ret
+
+    @staticmethod
+    def version(controller):
+        with open('/proc/mounts', 'r') as mntf:
+            for line in mntf.readlines():
+                mnt_path = line.split()[1]
+
+                if line.split()[0] == 'cgroup':
+                    for option in line.split()[3].split(','):
+                        if option == controller:
+                            return Cgroup.CGROUP_V1
+                elif line.split()[0] == 'cgroup2':
+                    with open(os.path.join(mnt_path, 'cgroup.controllers'), 'r') as ctrlf:
+                        controllers = ctrlf.readline()
+                        for ctrl in controllers.split():
+                            if ctrl == controller:
+                                return Cgroup.CGROUP_V2
+
+        return Cgroup.CGROUP_UNK