import os import yaml import argparse import subprocess def convert_md_to_rst(md_content): """Convert Markdown content to reStructuredText using Pandoc.""" try: result = subprocess.run( ["pandoc", "-f", "markdown", "-t", "rst"], input=md_content.encode("utf-8"), capture_output=True, check=True ) return result.stdout.decode("utf-8") except subprocess.CalledProcessError as e: print("Error converting Markdown to reStructuredText:", e) return md_content # Falls Pandoc fehlschlägt, nutze das Original als Fallback def generate_ansible_roles_doc(roles_dir, output_dir): """Generates reStructuredText documentation for Ansible roles.""" if not os.path.exists(output_dir): os.makedirs(output_dir) for role in os.listdir(roles_dir): role_path = os.path.join(roles_dir, role) meta_file = os.path.join(role_path, "meta/main.yml") readme_file = os.path.join(role_path, "README.md") if os.path.exists(meta_file): with open(meta_file, "r", encoding="utf-8") as f: meta_data = yaml.safe_load(f) role_doc = os.path.join(output_dir, f"{role}.rst") with open(role_doc, "w", encoding="utf-8") as f: # Hauptüberschrift f.write(f"{role.capitalize()} Role\n") f.write("=" * (len(role) + 7) + "\n\n") f.write(f"**Description:** {meta_data.get('description', 'No description available')}\n\n") # Unterüberschrift für Variablen f.write("Variables\n") f.write("---------\n\n") for key, value in meta_data.get('galaxy_info', {}).items(): f.write(f"- **{key}**: {value}\n") # README falls vorhanden konvertieren und einfügen if os.path.exists(readme_file): f.write("\nREADME\n") f.write("------\n\n") with open(readme_file, "r", encoding="utf-8") as readme: markdown_content = readme.read() rst_content = convert_md_to_rst(markdown_content) f.write(rst_content) print(f"Ansible roles documentation has been generated in {output_dir}") if __name__ == "__main__": parser = argparse.ArgumentParser(description="Generate documentation for Ansible roles.") parser.add_argument("--roles-dir", required=True, help="Directory containing Ansible roles.") parser.add_argument("--output-dir", required=True, help="Directory where documentation will be saved.") args = parser.parse_args() generate_ansible_roles_doc(args.roles_dir, args.output_dir)