{"id":43478395,"url":"https://github.com/redhat-cop/infra.support_assist","last_synced_at":"2026-02-03T08:11:34.229Z","repository":{"id":319159009,"uuid":"1077632898","full_name":"redhat-cop/infra.support_assist","owner":"redhat-cop","description":"This Ansible Collection will gather various reports/outputs that are commonly asked for in Red Hat Support Cases, and can optionally upload them directly to the Support Case Portal.","archived":false,"fork":false,"pushed_at":"2026-01-08T14:06:40.000Z","size":361,"stargazers_count":6,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"devel","last_synced_at":"2026-01-30T17:59:34.261Z","etag":null,"topics":["validated-content"],"latest_commit_sha":null,"homepage":"","language":"YAML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redhat-cop.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.rst","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-16T14:16:18.000Z","updated_at":"2026-01-08T14:06:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"0d4e7222-e336-426b-85a1-8f60642e7c9f","html_url":"https://github.com/redhat-cop/infra.support_assist","commit_stats":null,"previous_names":["redhat-cop/infra.support_assist"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/redhat-cop/infra.support_assist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-cop%2Finfra.support_assist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-cop%2Finfra.support_assist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-cop%2Finfra.support_assist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-cop%2Finfra.support_assist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redhat-cop","download_url":"https://codeload.github.com/redhat-cop/infra.support_assist/tar.gz/refs/heads/devel","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-cop%2Finfra.support_assist/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29037988,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T06:39:36.383Z","status":"ssl_error","status_checked_at":"2026-02-03T06:39:32.787Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["validated-content"],"created_at":"2026-02-03T08:11:31.757Z","updated_at":"2026-02-03T08:11:34.221Z","avatar_url":"https://github.com/redhat-cop.png","language":"YAML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ansible Collection - infra.support_assist\n\n[![GitHub last commit](https://img.shields.io/github/last-commit/redhat-cop/infra.support_assist.svg)](https://github.com/redhat-cop/infra.support_assist/commits/main) [![GitHub license](https://img.shields.io/github/license/redhat-cop/infra.support_assist.svg)](https://github.com/redhat-cop/infra.support_assist/blob/main/LICENSE) [![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](https://github.com/redhat-cop/infra.support_assist/pulls) ![GitHub contributors](https://img.shields.io/github/contributors/redhat-cop/infra.support_assist) ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/redhat-cop/infra.support_assist/tests.yml) ![GitHub Issues or Pull Requests](https://img.shields.io/github/issues/redhat-cop/infra.support_assist) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/11550/badge)](https://www.bestpractices.dev/projects/11550)\n\nThis Ansible Collection will gather various reports/outputs that are commonly asked for in Red Hat Support Cases, and can optionally **create the case**, and then upload the diagnostics directly to the Support Case Portal.\n\nThis collection currently includes the following playbooks and roles:\n\n* **`aap_api_gather`**: Gathers diagnostic output from Ansible Automation Platform (AAP) component APIs (Controller, Hub, Gateway, EDA) and creates compressed archives for case upload.\n* **`aap_api_token`**: Obtains and manages OAuth2 API tokens for Ansible Automation Platform (AAP).\n* **`ocp_must_gather`**: Gathers an `oc adm must-gather` archive from an OpenShift cluster.\n* **`rh_case`**: Unified role for creating and updating Red Hat Support Cases via API (creates cases, uploads files, adds comments).\n* **`rh_token_refresh`**: Handles Red Hat API token authentication and caching.\n* **`sos_report`**: Gathers a `sosreport` from one or more target hosts.\n\n---\n\n## Requirements\n\n### Ansible Collections\nThis collection requires the following Ansible Collections to be installed:\n* `community.general` (for the `archive` module used in the `ocp_must_gather` role)\n\n### System Dependencies\nThis collection requires the following packages to be installed:\n\n* **On the Target Hosts** (for the `sos_report` role):\n    * `sos`: This is required to generate the `sosreport` and is installed by the role.\n\n* **On the Control Node** (or execution node):\n    * `curl` (for the `rh_case` role): Required for robust, streaming file uploads to the Red Hat support portal.\n    * `oc` (for the `ocp_must_gather` role): The OpenShift CLI (`oc`) must be installed and in the system's `PATH`.\n\n---\n\n## Installing this collection\n\nYou can install the `infra.support_assist` collection with the Ansible Galaxy CLI:\n\n~~~shell\nansible-galaxy collection install git+https://github.com/redhat-cop/infra.support_assist.git\n~~~\n\nYou can also include it in a `requirements.yml` file and install it with `ansible-galaxy collection install -r requirements.yml`, using the format:\n\n~~~yaml\n---\ncollections:\n  - name: infra.support_assist\n    source: https://github.com/redhat-cop/infra.support_assist.git\n    type: git\n    # If you need a specific version of the collection, you can specify like this:\n    # version: ...\n~~~\n\n---\n\n## Usage\n\nThis collection includes primary playbooks that orchestrate the roles in the correct order. All playbooks that access the Red Hat API require a valid **Red Hat Offline Token** (see generation instructions below).\n\n### Preparing Your Offline Token\n\u003e **💡 How to Generate a Red Hat Offline Token**\n\u003e\n\u003e 1.  Navigate to the Red Hat API Token management page: [https://access.redhat.com/management/api](https://access.redhat.com/management/api)\n\u003e 2.  Click the **\"Generate Token\"** button.\n\u003e 3.  Log in with your Red Hat customer portal credentials if prompted.\n\u003e 4.  A new offline token will be generated. **Copy this token immediately**, as Red Hat notes, \"Tokens are only displayed once and are not stored. They will expire after 30 days of inactivity\".\n\nAll playbooks that access the Red Hat API will look for the token in this order:\n1. An extra-var named `offline_token`.\n2. An environment variable named `REDHAT_OFFLINE_TOKEN`.\n\n---\n\n## 📚 AAP Lessons Learned for Must-Gather Pipeline\n\nThis document summarizes critical configuration settings and resource warnings necessary for the **`ocp_must_gather`** pipeline to run successfully on the Red Hat Ansible Automation Platform (AAP).\n\n### 1. ⚙️ Project Synchronization and Collection Download\n\nTo ensure your Project Synchronization successfully downloads the necessary Ansible Collections (e.g., `infra.support_assist`), the correct settings must be enabled, and credentials must be configured at the Organizational level.\n\n### Required AAP Configuration Steps\n\n| Location (Left Navigation Menu) | Setting to **Enable** | Purpose |\n| :--- | :--- | :--- |\n| **Settings** \u003e **Automation Execution** \u003e **Job** | **Enable Role Download** | Allows the Execution Environment to pull dependent Ansible Roles defined outside of a Collection. |\n| **Settings** \u003e **Automation Execution** \u003e **Job** | **Enable Collection(s) Download** | Allows the Execution Environment to pull Collections (e.g., `infra.support_assist`) from configured sources. |\n\n### Organizational Access Check\n\nUnder **Access Management** \u003e **Organizations** \u003e **[Your Organization Name]**:\n\n* Ensure that the **Galaxy Credentials** field has an **Ansible Galaxy Credential** (or a similar credential pointing to a collection source) properly set. If this is missing, the **Project Sync** will fail to download the required collections, causing the Job Template to fail with \"Collection not found\" errors.\n\n### 2. ⚠️ Must-Gather Resource Warning: Ephemeral Storage (Disk Space)\n\nWhen running the **`ocp_must_gather`** pipeline on an AAP instance hosted on OpenShift, the default Execution Environment (EE) Pod resource limits are often insufficient. Uncompressed Must-Gather output can easily exceed **10–20 GiB**, leading to an **\"`No space left on device`\"** error.\n\n### Solution: Create High-Storage Instance Group\n\nTo allocate sufficient storage for the collection, you must create a specialized **Instance Group** with a **Pod Spec Override**.\n\n| Setting | Recommendation | Rationale |\n| :--- | :--- | :--- |\n| **Instance Group Name** | **`MUST-GATHER-HIGH-STORAGE`** | Clear, descriptive name for easy assignment. |\n| **Resource to Increase** | **`ephemeral-storage`** | Must-Gather relies heavily on temporary disk space. |\n| **Pod Spec Override** | Modify the **`resources.limits`** and **`resources.requests`** for the **`main`** container. | A minimum of **`20Gi`** to **`30Gi`** is often necessary for a full OCP collection. |\n\n### Resource Adjustment References\n\n| Customization Option | Reference Link |\n| :--- | :--- |\n| **Customizing Pod Specs via Instance Group** (Specific jobs) | [Customizing the pod specification](https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/performance_considerations_for_operator_environments/assembly-pod-spec-modifications_performance-considerations#proc-customizing-pod-specs_performance-considerations) |\n| **Global Control Plane Adjustments** (All jobs) | [Chapter 2. Control plane adjustments](https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/performance_considerations_for_operator_environments/assembly-control-plane-adjustments_performance-considerations) |\n\n### Pod Spec Override Example Snippet\n\nThis YAML snippet should be used in the **Pod Spec Override** field of the new Instance Group:\n\n~~~yaml\nspec:\n  containers:\n  - name: main\n    resources:\n      limits:\n        ephemeral-storage: 30Gi  # Set limit high enough for full collection\n      requests:\n        ephemeral-storage: 30Gi  # Request sufficient storage to ensure scheduling\n~~~\n\n---\n\n## Playbooks\n\nThis collection provides five main playbooks for common operations:\n\n* **`infra.support_assist.aap_api_gather`**: Gathers diagnostic output from AAP component APIs (Controller, Hub, Gateway, EDA), creates a compressed archive, and optionally uploads it to a Red Hat Support Case.\n    * **Role-specific documentation:** [roles/aap_api_gather/README.md](roles/aap_api_gather/README.md)\n    * **Example (with case upload):**\n        ~~~shell\n        export REDHAT_OFFLINE_TOKEN=\"YOUR_OFFLINE_TOKEN_HERE\"\n        export AAP_CONTROLLER_URL=\"https://aap-controller.example.com\"\n        export AAP_HUB_URL=\"https://aap-hub.example.com\"\n        \n        ansible-playbook playbooks/aap_api_gather.yml \\\n          -e case_id=01234567 \\\n          -e upload=true\n        ~~~\n    * **Example (standalone gather without upload):**\n        ~~~shell\n        export AAP_CONTROLLER_URL=\"https://aap-controller.example.com\"\n        \n        ansible-playbook playbooks/aap_api_gather.yml \\\n          -e upload=false\n        ~~~\n\n* **`infra.support_assist.sos_report`**: Gathers `sosreport`s from all hosts in your inventory, fetches them to the control node, and uploads them to the specified case.\n    * **Role-specific documentation:** [roles/sos_report/README.md](roles/sos_report/README.md)\n    * **Example (using an environment variable):**\n        ~~~shell\n        export REDHAT_OFFLINE_TOKEN=\"YOUR_OFFLINE_TOKEN_HERE\"\n        \n        ansible-playbook -i inventory infra.support_assist.sos_report \\\n          -e case_id=01234567 \\\n          -e upload=true \\\n          -e clean=true\n        ~~~\n\n* **`infra.support_assist.ocp_must_gather` (Pipeline)**: **The primary automation playbook.** This runs the full workflow: **Token Refresh** → **Case Creation (optional)** → **Must-Gather Execution** → **Upload/Comment**. This playbook runs on `localhost`.\n    * **Role-specific documentation:** [roles/ocp_must_gather/README.md](roles/ocp_must_gather/README.md)\n    * **Example (creating a case and uploading with all advanced options):**\n        ~~~shell\n        ansible-playbook -i inventory infra.support_assist.ocp_must_gather \\\n          -e ocp_must_gather_server_url=\"https://api.my-ocp-cluster.com:6443\" \\\n          -e ocp_must_gather_token=\"sha256~...\" \\\n          -e ocp_must_gather_since=\"12h\" \\\n          -e ocp_must_gather_image=\"AAP\" \\\n          -e ocp_disconnected_mode=true \\\n          -e ocp_disconnected_registry=\"my.mirror.registry.com/ocp/mirror\" \\\n          -e case_summary=\"Automated creation of case for OCP diagnostics\" \\\n          -e case_severity=\"3 (Normal)\" \\\n          -e offline_token=YOUR_OFFLINE_TOKEN_HERE\n        ~~~\n    \u003e **Note:** To use this playbook to **create** a case, you must provide **all six mandatory variables**: `case_summary`, `case_description`, `case_product`, `case_product_version`, `case_type`, and `case_severity`. Crucially, you must also **omit** the `case_id` variable. If `case_id` is provided, the playbook skips creation and proceeds directly to upload.\n\n### Valid Case Input Options\n\nFor the fields `case_product`, `case_type`, and `case_severity`, the acceptable values must exactly match the Red Hat Support API's lookup tables.\n\nPlease consult the dedicated documentation file for the full list of valid options:\n\n[**Full Case Option Lists:** `roles/rh_case/docs/CASE_OPTIONS.md`](roles/rh_case/docs/CASE_OPTIONS.md)\n\n* **`infra.support_assist.rh_case` (Utility)**: A unified playbook for creating and updating Red Hat Support Cases via the API. Automatically detects operation mode (create, update, or hybrid).\n    * **Role-specific documentation:** [roles/rh_case/README.md](roles/rh_case/README.md)\n    * **Example (creating a new case):**\n        ~~~shell\n        ansible-playbook -i inventory infra.support_assist.rh_case \\\n          -e case_summary=\"Request for documentation update\" \\\n          -e case_description=\"Need clarification on X.\" \\\n          -e case_severity=\"4 (Low)\" \\\n          -e case_product=\"Red Hat Ansible Automation Platform\" \\\n          -e case_product_version=\"2.4\" \\\n          -e offline_token=YOUR_OFFLINE_TOKEN_HERE\n        ~~~\n        \u003e **Note:** The `case_product_version` must be provided as the **normalized base version** (e.g., `4.16`, `8.9`) and not the full patch version (e.g., `4.16.48`).\n\n    * **Example (updating an existing case - uploading a file):**\n      ~~~shell\n      # Assuming REDHAT_OFFLINE_TOKEN is set as an environment variable\n      ansible-playbook infra.support_assist.rh_case \\\n        -e case_id=01234567 \\\n        -e \"case_updates_needed=[{'attachment': '/path/to/local/file.log', 'attachmentDescription': 'Manual log file upload.'}]\"\n      ~~~\n\n    * **Example (updating an existing case - adding a comment):**\n      ~~~shell\n      # Assuming REDHAT_OFFLINE_TOKEN is set as an environment variable\n      ansible-playbook infra.support_assist.rh_case \\\n        -e case_id=01234567 \\\n        -e \"case_updates_needed=[{'comment': 'Adding a comment via playbook.', 'commentType': 'plaintext'}]\"\n      ~~~\n\n    * **Example (hybrid mode - create case and upload in one operation):**\n      ~~~shell\n      ansible-playbook infra.support_assist.rh_case \\\n        -e case_summary=\"Issue with cluster\" \\\n        -e case_description=\"Experiencing connectivity issues.\" \\\n        -e case_product=\"OpenShift Container Platform\" \\\n        -e case_product_version=\"4.16\" \\\n        -e case_type=\"Configuration Issue\" \\\n        -e case_severity=\"3 (Normal)\" \\\n        -e \"case_updates_needed=[{'attachment': '/path/to/file.log', 'attachmentDescription': 'Diagnostic log'}]\" \\\n        -e offline_token=YOUR_OFFLINE_TOKEN_HERE\n      ~~~\n\n---\n\n## Roles\n\n* **[aap_api_gather](roles/aap_api_gather/README.md)**: Gathers diagnostic output from Ansible Automation Platform (AAP) component APIs (Controller, Hub, Gateway, EDA) and saves them as JSON files. Creates a compressed archive and prepares it for upload to a Red Hat Support Case via the `rh_case` role.\n* **[aap_api_token](roles/aap_api_token/README.md)**: Obtains and manages OAuth2 API tokens for Ansible Automation Platform (AAP). Automatically detects Controller version and uses the appropriate collection (`ansible.controller` or `ansible.platform`).\n* **[ocp_must_gather](roles/ocp_must_gather/README.md)**: Logs into an OpenShift cluster, runs `oc adm must-gather`, and archives the result.\n    \u003e **NEW FEATURES:**\n    \u003e * **Privilege Pre-Check (Safety):** The role now includes an **assertion task** to verify that the authenticated user/Service Account possesses the required **`cluster-admin`** privileges **`before`** executing the long-running **`must-gather`** command, failing early with a custom formatted message if permissions are inadequate.\n    \u003e * **Disk Space Check (Safety):** An **assertion validation** has been implemented to verify the **available disk space** on the Execution Host (EE) filesystem where the Must-Gather output directory resides. This prevents mid-execution failures due to the large size of the raw collection.\n    \u003e * **Case Comment Template:** The content of the automatic comment posted after the Must-Gather upload can be customized via the Jinja2 template: **[roles/ocp_must_gather/templates/support_case_comment.j2](roles/ocp_must_gather/templates/support_case_comment.j2)**.\n    \u003e * **Time Window (`--since`):** Use the `ocp_must_gather_since` variable (e.g., `\"12h\"`, `\"3d\"`, `\"7d\"`) to limit log collection to a specific time range, optimizing file size and relevance. Options include: `\"1h\"`, `\"3h\"`, `\"6h\"`, `\"12h\"`, `\"24h\"`, `\"3d\"`, `\"7d\"`, `\"14d\"`, `\"30d\"`, or blank for \"Full History\".\n    \u003e * **Custom Feature Collection:** The `ocp_must_gather_image` variable allows selecting specialized component collections using their acronyms. Examples include **DEFAULT** (Default Must Gather Collection), **AAP** (Ansible Automation Platform), **OSSM** (OpenShift Service Mesh), **CNV** (Container Native Virtualization), and **ODF** (OpenShift Data Foundation). **All available options are listed in:** [ocp_must_gather/docs/MUST_GATHER_IMAGE_OPTIONS.md](./roles/ocp_must_gather/docs/MUST_GATHER_IMAGE_OPTIONS.md).\n    \u003e * **Disconnected Environment:** Use the `ocp_disconnected_mode: true` flag and provide the `ocp_disconnected_registry` address (e.g., `my.mirror.registry.com/ocp/mirror`) to point the collection to your mirror registry. (See KCS solutions on disconnected must-gather: [https://access.redhat.com/solutions/4647561](https://access.redhat.com/solutions/4647561)).\n    \u003e * **Cluster Name Extraction:** The role now automatically extracts the OpenShift cluster name from the provided API server URL, ensuring accurate identification in case comments and uploads.\n* **[rh_case](roles/rh_case/README.md)**: Unified role for creating and updating Red Hat Support Cases via API. Automatically detects operation mode (create, update, or hybrid) based on provided variables.\n    \u003e * **Case Comment Template:** The content of the automatic comment posted after case creation can be customized via the Jinja2 template: **[roles/rh_case/templates/support_case_comment.j2](roles/rh_case/templates/support_case_comment.j2)**.\n    \u003e **Input Variable Options:** The full list of valid options for `case_product`, `case_type`, and `case_severity` are maintained in the dedicated documentation file: [roles/rh_case/docs/CASE_OPTIONS.md](roles/rh_case/docs/CASE_OPTIONS.md).\n* **[rh_token_refresh](roles/rh_token_refresh/README.md)**: Handles Red Hat API token authentication and caching.\n* **[sos_report](roles/sos_report/README.md)**: Generates `sosreport` on target hosts, fetches to control node, and prepares for upload.\n\n---\n\n## Release and Upgrade Notes\n\nFor details on changes between versions, please see [the changelog for this collection](https://github.com/redhat-cop/infra.support_assist/blob/devel/CHANGELOG.rst).\n\n## Releasing, Versioning and Deprecation\n\nThis collection follows [Semantic Versioning](https://semver.org/). More details on versioning can be found [in the Ansible docs](https://docs.ansible.com/ansible/latest/dev_guide/developing_collections.html#collection-versions).\n\nWe plan to regularly release new minor or bugfix versions once new features or bugfixes have been implemented.\n\nReleasing the current major version happens from the `devel` branch.\n\n## To Do / Roadmap (in no specific order)\n\n  - [x] Add a role to use an offline token to get a refresh token for the Red Hat API\n  - [x] Add a unified role (`rh_case`) that can create cases, upload files, or add comments to a Red Hat Support Case\n  - [x] Add a role that will run `sos report` on one or more hosts\n  - [x] Add a role that will run `oc adm must-gather` on an OpenShift cluster\n  - [x] Add a playbook that can be used to attach other requested files to a Red Hat Support Case\n  - [x] Add a playbook that can be used to add comments in either `markdown` or `plaintext` to a Red Hat Support Case\n  - [x] Add a role for grabbing output from one or more Ansible Automation Platform API endpoints\n  - [ ] Add more CLI parameter options to the `sos_report` role (particularly `clean|mask`, etc.)\n  - [x] Make it easier to pick a defined scope if needed to the `ocp_must_gather` role (would replace/compliment the `container image` option)\n  - [x] Add Custom Feature Collection (acronyms): The `ocp_must_gather_image` variable allows selecting specialized component collections to the `ocp_must_gather` role - **All available options are listed in:** [ocp_must_gather/docs/MUST_GATHER_IMAGE_OPTIONS.md](./roles/ocp_must_gather/docs/MUST_GATHER_IMAGE_OPTIONS.md)\n  - [x] Add the ability to actually open a NEW Red Hat Support Case (Implemented by the unified role: [**`rh_case`**](roles/rh_case/README.md))\n  - [ ] Add the ability to the `sos_report` role to automatically/dynamically add more hosts to the running inventory if discovered running against a cluster (and some of the cluster hosts are missing)\n  - [x] Add Privilege Pre-Check (Safety) to verify that the authenticated user/Service Account possesses the required **`cluster-admin`** privileges **`before`** executing the long-running **`must-gather`** to the `ocp_must_gather` role\n  - [x] Add Disk Space Check (Safety) assertion validation to verify the **available disk space** on the Execution Host (EE) filesystem where the Must-Gather output directory resides to the `ocp_must_gather` role\n  - [x] Add Case Comment Template (Jinja2 customization) to the `ocp_must_gather` role\n  - [x] Add Time Window (`--since`): Use the `ocp_must_gather_since` variable to limit log collection to the `ocp_must_gather` role\n  - [x] Add Disconnected/Air-Gapp Environment flag to the `ocp_must_gather` role to point the collection to custom mirror registry. (See KCS solutions on disconnected must-gather: [https://access.redhat.com/solutions/4647561](https://access.redhat.com/solutions/4647561)).\n  - [x] Add Case Comment Template (Jinja2 customization) to the `rh_case` role\n  - [x] Add documentation for valid Case Input Options (Product, Type, Severity) - [**Full Case Option Lists:** `roles/rh_case/docs/CASE_OPTIONS.md`](roles/rh_case/docs/CASE_OPTIONS.md)\n  - [x] Add Cluster Name Extraction - The role now automatically extracts the OpenShift cluster name from the provided API server URL, ensuring accurate identification in case comments and uploads, to avoid user needs to be inserted manually.\n  - [ ] Add options to the `sos_report` role to gather data from an OCP nodes using the official method as guidance from Red Hat KCS: [Method 1 - Using SSH](https://access.redhat.com/solutions/3820762) or [Method 2 - Using oc debug](https://access.redhat.com/solutions/4387261) - keep in mind the SOS Report from an OCP node is different from a standard Linux host sosreport.\n  - [ ] Add an option to the `ocp_must_gather` or create a new role to gather data for one or more namespace using `oc adm inspect ns/\u003cnamespace\u003e` as guidance from Red Hat KCS: [What are inspect logs, and how can we collect inspect logs from projects/namespaces?](https://access.redhat.com/solutions/7117361)\n  - [x] Add some lessons learned and tips how to use this automation on Ansible Automation Platform (Implemented above some useful tips/guidance: **[AAP Lessons Learned for Must-Gather Pipeline](#-aap-lessons-learned-for-must-gather-pipeline))**\n\n## Getting Help\n\nWe are on the Ansible Forums, if you want to discuss something, ask for help, or participate in the community, please use the `#infra-support-assist` tag on the forum.\n\n[Ansible Forums](https://forum.ansible.com/tag/infra-support-assist)\n\n## Contributing to this collection\n\nWe welcome community contributions to this collection. If you find problems, please open an issue or create a PR.\n\nMore information about contributing can be found in our [Contribution Guidelines.](https://github.com/redhat-cop/infra.support_assist/blob/devel/.github/CONTRIBUTING.md)\n\n## Contributors\n\nA big thank you to all the contributors who have helped improve this project! You can see a full list of everyone who has contributed on the [contributors page](https://github.com/redhat-cop/infra.support_assist/graphs/contributors).\n\n\u003cimg src=\"https://github.com/lennysh.png\" width=\"60px;\"/\u003e\u003cimg src=\"https://github.com/dfmateus.png\" width=\"60px;\"/\u003e\n\n## Code of Conduct\n\nThis collection follows the Ansible project's [Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html). Please read and familiarize yourself with this document.\n\n## Licensing\n\nGNU General Public License v3.0 or later.\n\nSee [LICENSE](https://github.com/redhat-cop/infra.support_assist/blob/devel/LICENSE) to see the full text.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-cop%2Finfra.support_assist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredhat-cop%2Finfra.support_assist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-cop%2Finfra.support_assist/lists"}