From 5cbc8b7ada76b861e9477ecf99a009fc816ae230 Mon Sep 17 00:00:00 2001
From: Thomas Woerner <twoerner@redhat.com>
Date: Tue, 18 Apr 2023 13:03:04 +0200
Subject: [PATCH] New utils/facts.py: Provide facts about the repo like role
 and module lists

The list of modules and roles is needed in several scripts now,
therefore it makes sense to have one place for this.

Here are the current variables:

BASE_DIR:           Base directory of the repo
ROLES:              List of roles in the roles folder
MANAGEMENT_MODULES: List of management modules in the plugins/modules
                    folder
ROLES_MODULES:      List of modules in the roles/*/library folders
ALL_MODULES:        List of all modules, the management and the roles
                    modules

All lists are sorted.
---
 utils/facts.py | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 utils/facts.py

diff --git a/utils/facts.py b/utils/facts.py
new file mode 100644
index 00000000..36871234
--- /dev/null
+++ b/utils/facts.py
@@ -0,0 +1,41 @@
+import os
+
+
+def get_roles(dir):
+    roles = []
+
+    _rolesdir = "%s/roles/" % dir
+    for _role in os.listdir(_rolesdir):
+        _roledir = "%s/%s" % (_rolesdir, _role)
+        if not os.path.isdir(_roledir) or \
+           not os.path.isdir("%s/meta" % _roledir) or \
+           not os.path.isdir("%s/tasks" % _roledir):
+            continue
+        roles.append(_role)
+
+    return sorted(roles)
+
+
+def get_modules(dir):
+    management_modules = []
+    roles_modules = []
+
+    for root, _dirs, files in os.walk(dir):
+        if not root.startswith("%s/plugins/" % dir) and \
+           not root.startswith("%s/roles/" % dir):
+            continue
+        for _file in files:
+            if _file.endswith(".py"):
+                if root == "%s/plugins/modules" % dir:
+                    management_modules.append(_file[:-3])
+                elif root.startswith("%s/roles/" % dir):
+                    if root.endswith("/library"):
+                        roles_modules.append(_file[:-3])
+
+    return sorted(management_modules), sorted(roles_modules)
+
+
+BASE_DIR = os.path.abspath(os.path.dirname(__file__) + "/..")
+ROLES = get_roles(BASE_DIR)
+MANAGEMENT_MODULES, ROLES_MODULES = get_modules(BASE_DIR)
+ALL_MODULES = sorted(MANAGEMENT_MODULES + ROLES_MODULES)
-- 
GitLab