From 072ad6f1863a5daa6f128178b055554b50db41a2 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Fri, 11 Jul 2025 10:15:58 +0200 Subject: [PATCH] Removed load button --- .gitignore | 3 +- cli/generate/roles_list.py | 65 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 cli/generate/roles_list.py diff --git a/.gitignore b/.gitignore index ee603803..c5bd2756 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ site.retry venv *.log *.bak -*tree.json \ No newline at end of file +*tree.json +roles/list.json diff --git a/cli/generate/roles_list.py b/cli/generate/roles_list.py new file mode 100644 index 00000000..40a2bb4a --- /dev/null +++ b/cli/generate/roles_list.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +""" +Generate a JSON file listing all Ansible role directories. + +Usage: + python roles_list.py [--roles-dir path/to/roles] [--output path/to/roles/list.json | console] +""" +import os +import json +import argparse + + +def find_roles(roles_dir: str): + """Return sorted list of role names under roles_dir.""" + return sorted([ + entry for entry in os.listdir(roles_dir) + if os.path.isdir(os.path.join(roles_dir, entry)) + ]) + + +def write_roles_list(roles, out_file): + """Write the list of roles to out_file as JSON.""" + os.makedirs(os.path.dirname(out_file), exist_ok=True) + with open(out_file, 'w', encoding='utf-8') as f: + json.dump(roles, f, indent=2) + print(f"Wrote roles list to {out_file}") + + +def main(): + # Determine default roles_dir relative to this script: ../../.. -> roles + script_dir = os.path.dirname(os.path.abspath(__file__)) + default_roles_dir = os.path.abspath( + os.path.join(script_dir, '..', '..', 'roles') + ) + default_output = os.path.join(default_roles_dir, 'list.json') + + parser = argparse.ArgumentParser(description='Generate roles/list.json') + parser.add_argument( + '--roles-dir', '-r', + default=default_roles_dir, + help=f'Directory containing role subfolders (default: {default_roles_dir})' + ) + parser.add_argument( + '--output', '-o', + default=default_output, + help=( + 'Output path for roles list JSON ' + '(or "console" to print to stdout, default: %(default)s)' + ) + ) + args = parser.parse_args() + + if not os.path.isdir(args.roles_dir): + parser.error(f"Roles directory not found: {args.roles_dir}") + + roles = find_roles(args.roles_dir) + + if args.output.lower() == 'console': + # Print JSON to stdout + print(json.dumps(roles, indent=2)) + else: + write_roles_list(roles, args.output) + +if __name__ == '__main__': + main()