diff --git a/roles/docker-portfolio/lookup_plugins/docker_cards.py b/roles/docker-portfolio/lookup_plugins/docker_cards.py index 6c7566f1..cab23990 100644 --- a/roles/docker-portfolio/lookup_plugins/docker_cards.py +++ b/roles/docker-portfolio/lookup_plugins/docker_cards.py @@ -9,75 +9,87 @@ import yaml from ansible.plugins.lookup import LookupBase from ansible.errors import AnsibleError + class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): """ This lookup iterates over all roles whose folder name starts with 'docker-' and generates a list of dictionaries (cards). For each role, it: + - Extracts the application_id (everything after "docker-") - Reads the title from the role's README.md (the first H1 line) - Retrieves the description from galaxy_info.description in meta/main.yml - Retrieves the icon class from galaxy_info.logo.class + - Retrieves the tags from galaxy_info.galaxy_tags - Builds the URL using the 'domains' variable (e.g. domains[application_id]) - Sets the iframe flag from applications[application_id].landingpage_iframe_enabled Only cards whose application_id is included in the variable group_names are returned. """ - # Default to "roles" if no directory is provided + # Default to "roles" directory if no path is provided roles_dir = terms[0] if len(terms) > 0 else "roles" cards = [] - # Get group_names from variables; default to empty list if not set + # Retrieve group_names from variables (used to filter roles) group_names = variables.get("group_names", []) - # Pattern to match roles starting with "docker-" + # Search for all roles starting with "docker-" pattern = os.path.join(roles_dir, "docker-*") for role_path in glob.glob(pattern): role_dir = role_path.rstrip("/") role_basename = os.path.basename(role_dir) + + # Skip roles not starting with "docker-" if not role_basename.startswith("docker-"): continue - # The application_id is the substring after "docker-" + # Extract application_id from role name application_id = role_basename[len("docker-"):] - # Only add card if the application_id is in group_names + # Skip roles not listed in group_names if application_id not in group_names: continue - # Define paths for the README.md and meta/main.yml + # Define paths to README.md and meta/main.yml readme_path = os.path.join(role_dir, "README.md") meta_path = os.path.join(role_dir, "meta", "main.yml") + + # Skip role if required files are missing if not os.path.exists(readme_path) or not os.path.exists(meta_path): continue + # Extract title from first H1 line in README.md try: with open(readme_path, "r", encoding="utf-8") as f: readme_content = f.read() - # Extract the first H1 line (title) via regex title_match = re.search(r'^#\s+(.*)$', readme_content, re.MULTILINE) title = title_match.group(1).strip() if title_match else application_id except Exception as e: raise AnsibleError("Error reading '{}': {}".format(readme_path, str(e))) + # Extract metadata from meta/main.yml try: with open(meta_path, "r", encoding="utf-8") as f: meta_data = yaml.safe_load(f) + galaxy_info = meta_data.get("galaxy_info", {}) description = galaxy_info.get("description", "") logo = galaxy_info.get("logo", {}) icon_class = logo.get("class", "fa-solid fa-cube") + tags = galaxy_info.get("galaxy_tags", []) except Exception as e: raise AnsibleError("Error reading '{}': {}".format(meta_path, str(e))) - # Retrieve variables for domain and application settings. + # Build URL and retrieve iframe flag domains = variables.get("domains", {}) applications = variables.get("applications", {}) domain_url = domains.get(application_id, "") url = "https://" + domain_url if domain_url else "" + app_data = applications.get(application_id, {}) iframe = app_data.get("landingpage_iframe_enabled", False) + # Build card dictionary card = { "icon": {"class": icon_class}, "title": title, @@ -85,6 +97,10 @@ class LookupModule(LookupBase): "url": url, "link_text": "Discover {} Now!".format(title), "iframe": iframe, + "tags": tags, } + cards.append(card) + + # Return the list of cards return [cards] diff --git a/roles/docker-presentation/README.md b/roles/docker-presentation/README.md index 5ea20040..ede60e5c 100644 --- a/roles/docker-presentation/README.md +++ b/roles/docker-presentation/README.md @@ -1,4 +1,4 @@ -# CyMaIS Presentation 🚀 +# Presentation ## Description diff --git a/roles/docker-presentation/meta/main.yml b/roles/docker-presentation/meta/main.yml index 42d101bc..562f0b8e 100644 --- a/roles/docker-presentation/meta/main.yml +++ b/roles/docker-presentation/meta/main.yml @@ -1,6 +1,6 @@ galaxy_info: author: "Kevin Veen-Birkenbach" - description: "Automates the process of presenting CyMaIS using Reveal.js in a containerized environment. Ideal for administrators, developers, end-users, businesses, and investors." + description: "This Presentation Software is a powerful tool designed for showcasing the CyMaIS platform to various audiences, including Administrators, Developers, End-Users, Businesses, and Investors." license: "CyMaIS NonCommercial License (CNCL)" license_url: "https://s.veen.world/cncl" company: | @@ -25,6 +25,6 @@ galaxy_info: issue_tracker_url: "https://s.veen.world/cymaisissues" documentation: "https://s.veen.world/cymais" logo: - class: "fa-solid fa-presentation-screen" + class: "fas fa-chalkboard-teacher" dependencies: - package-manager \ No newline at end of file