mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-08-30 07:18:09 +02:00
Add custom Ansible filter plugin get_category_entries
This commit introduces a new Ansible filter plugin named 'get_category_entries', which returns all role names under the roles/ directory that start with a given prefix. Additionally, unit tests (unittest framework) have been added under tests/unit/filterplugins/ to ensure correct behavior, including: - Returns empty list when roles/ directory is missing - Correctly filters and sorts by prefix - Ignores non-directory entries - Supports custom roles_path argument - Returns all roles when prefix is empty Reference: https://chatgpt.com/share/68a2f1ab-1fe8-800f-b22a-28c1c95802c2
This commit is contained in:
31
filter_plugins/get_category_entries.py
Normal file
31
filter_plugins/get_category_entries.py
Normal file
@@ -0,0 +1,31 @@
|
||||
# Custom Ansible filter to get all role names under "roles/" with a given prefix.
|
||||
|
||||
import os
|
||||
|
||||
def get_category_entries(prefix, roles_path="roles"):
|
||||
"""
|
||||
Returns a list of role names under the given roles_path
|
||||
that start with the specified prefix.
|
||||
|
||||
:param prefix: String prefix to match role names.
|
||||
:param roles_path: Path to the roles directory (default: 'roles').
|
||||
:return: List of matching role names.
|
||||
"""
|
||||
if not os.path.isdir(roles_path):
|
||||
return []
|
||||
|
||||
roles = []
|
||||
for entry in os.listdir(roles_path):
|
||||
full_path = os.path.join(roles_path, entry)
|
||||
if os.path.isdir(full_path) and entry.startswith(prefix):
|
||||
roles.append(entry)
|
||||
|
||||
return sorted(roles)
|
||||
|
||||
class FilterModule(object):
|
||||
""" Custom filters for Ansible """
|
||||
|
||||
def filters(self):
|
||||
return {
|
||||
"get_category_entries": get_category_entries
|
||||
}
|
Reference in New Issue
Block a user