diff --git a/README.md b/README.md index 6f0b93e..82ab705 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ This collection includes the following roles for managing OpenShift Virtualizati * [aap_seed](roles/aap_seed/README.md) - Seed AAP with Migration Factory Configuration as Code content * [mtv_provider](roles/mtv_provider/README.md) - Create MTV/Forklift source provider CRs on OpenShift target clusters. Designed to run from AAP with credential injection. +* [mtv_query_inventory](roles/mtv_query_inventory/README.md) - Queries MTV inventory. * [utility_aap_deploy](roles/utility_aap_deploy/README.md) - Deploys an instance of Ansible Automation Platform. * [utility_openshift_target_credential](roles/utility_openshift_target_credential/README.md) - A utility role to manage OpenShift target cluster credentials for migration diff --git a/roles/mtv_query_inventory/README.md b/roles/mtv_query_inventory/README.md new file mode 100644 index 0000000..ebc84c4 --- /dev/null +++ b/roles/mtv_query_inventory/README.md @@ -0,0 +1,286 @@ + +# 📃 Role overview + + + + +## mtv_query_inventory + +``` +Role belongs to infra/openshift_virtualization_migration +Namespace - infra +Collection - openshift_virtualization_migration +Version - 1.25.0 +Repository - https://github.com/redhat-cop/openshift_virtualization_migration +``` + +Description: Queries MTV inventory. + +### Argument Specifications + +
+🧩 Argument Specifications in `meta/argument_specs` + +#### Key: main + +* **Description**: Query the MTV (Migration Toolkit for Virtualization) inventory. +* **Options**: + * **mtv_query_inventory_api_scheme**: + * **Required**: False + * **Type**: str + * **Default**: https + * **Description**: Scheme to use when constructing the MTV Inventory URL. + * **mtv_query_inventory_endpoint_path**: + * **Required**: True + * **Type**: str + * **Default**: none + * **Description**: Relative path to the MTV inventory retrieval endpoint (eg. /providers). + * **mtv_query_inventory_namespace**: + * **Required**: False + * **Type**: str + * **Default**: openshift-mtv + * **Description**: Namespace containing the MTV inventory service. + * **mtv_query_inventory_openshift_api_key**: + * **Required**: True + * **Type**: str + * **Default**: none + * **Description**: OpenShift API key. + * **mtv_query_inventory_openshift_ca_cert_path**: + * **Required**: False + * **Type**: str + * **Default**: none + * **Description**: Path to the OpenShift CA Certificate. + * **mtv_query_inventory_openshift_host**: + * **Required**: True + * **Type**: str + * **Default**: none + * **Description**: OpenShift host (eg. https://api.openshift.example.com:6443). + * **mtv_query_inventory_openshift_verify_ssl**: + * **Required**: False + * **Type**: bool + * **Default**: True + * **Description**: Whether to verify SSL certificates. + * **mtv_query_inventory_result_var**: + * **Required**: False + * **Type**: str + * **Default**: mtv_query_inventory_query_result + * **Description**: Name of the variable to store the query result. + * **mtv_query_inventory_retrieval_method**: + * **Required**: False + * **Type**: str + * **Default**: api + * **Description**: Method to retrieve inventory data from MTV. + * **Choices**: + * api + * exec + * **mtv_query_inventory_route_name**: + * **Required**: False + * **Type**: str + * **Default**: forklift-inventory + * **Description**: MTV Inventory Route Name. + * **mtv_query_inventory_secure_logging**: + * **Required**: False + * **Type**: bool + * **Default**: True + * **Description**: Whether to enable secure logging. + * **mtv_query_inventory_service_name**: + * **Required**: False + * **Type**: str + * **Default**: forklift-inventory + * **Description**: MTV Inventory Service Name. + * **mtv_query_inventory_url**: + * **Required**: False + * **Type**: str + * **Default**: + * **Description**: URL of the MTV Inventory Service. If not provided, the URL will be determined from the MTV Inventory Route. + +
+ +### Defaults + +**These are static variables with lower priority** + +#### File: defaults/main.yml + +| Var | Type | Value |Choices |Required | Title | +|--------------|--------------|-------------|-------------|-------------|-------------| +| [`mtv_query_inventory_api_scheme`](defaults/main.yml#L52) | str | `https` | None | False | MTV Retrieval Method | +| [`mtv_query_inventory_endpoint_path`](defaults/main.yml#L57) | NoneType | `None` | None | True | MTV Inventory Retrieval Endpoint | +| [`mtv_query_inventory_namespace`](defaults/main.yml#L84) | str | `openshift-mtv` | None | False | Inventory Namespace | +| [`mtv_query_inventory_openshift_api_key`](defaults/main.yml#L14) | str | `` | None | True | OpenShift API Key | +| [`mtv_query_inventory_openshift_ca_cert_path`](defaults/main.yml#L29) | str | `` | None | False | OpenShift CA Certificate Path | +| [`mtv_query_inventory_openshift_host`](defaults/main.yml#L6) | str | `` | None | True | OpenShift Host | +| [`mtv_query_inventory_openshift_verify_ssl`](defaults/main.yml#L38) | str | `` | None | False | OpenShift Verify SSL | +| [`mtv_query_inventory_query_delay`](defaults/main.yml#L99) | int | `5` | None | False | Inventory Query Delay | +| [`mtv_query_inventory_query_retries`](defaults/main.yml#L94) | int | `5` | None | False | Inventory Query Retries | +| [`mtv_query_inventory_result_var`](defaults/main.yml#L89) | str | `mtv_query_inventory_query_result` | None | False | Inventory Result Variable | +| [`mtv_query_inventory_retrieval_method`](defaults/main.yml#L47) | str | `api` | None | False | MTV Retrieval Method | +| [`mtv_query_inventory_route_name`](defaults/main.yml#L74) | str | `forklift-inventory` | None | False | Inventory Route Name | +| [`mtv_query_inventory_secure_logging`](defaults/main.yml#L69) | str | `{{ secure_logging ¦ default(true) }}` | None | False | Secure Logging | +| [`mtv_query_inventory_service_name`](defaults/main.yml#L79) | str | `forklift-inventory` | None | False | Inventory Service Name | +| [`mtv_query_inventory_url`](defaults/main.yml#L64) | str | `` | None | False | Inventory URL | + +🖇️ Full descriptions for vars in defaults/main.yml +
+`mtv_query_inventory_api_scheme`: Method to retrieve inventory data from MTV. Valid options are 'api' and 'exec'. +
+`mtv_query_inventory_endpoint_path`: MTV inventory retrieval endpoint. +
+`mtv_query_inventory_namespace`: Inventory Namespace +
+`mtv_query_inventory_openshift_api_key`: OpenShift API key. +
+`mtv_query_inventory_openshift_ca_cert_path`: Path to the OpenShift CA Certificate. +
+`mtv_query_inventory_openshift_host`: OpenShift host. +
+`mtv_query_inventory_openshift_verify_ssl`: Whether to verify SSL certificates. +
+`mtv_query_inventory_query_delay`: Delay between inventory query retries in seconds. +
+`mtv_query_inventory_query_retries`: Number of retries for the inventory queries. +
+`mtv_query_inventory_result_var`: Name of the variable to store the query result. +
+`mtv_query_inventory_retrieval_method`: Method to retrieve inventory data from MTV. Valid options are 'api' and 'exec'. +
+`mtv_query_inventory_route_name`: Inventory Route Name +
+`mtv_query_inventory_secure_logging`: Whether to enable secure logging. +
+`mtv_query_inventory_service_name`: Inventory Service Name +
+`mtv_query_inventory_url`: >- +
+
+ +### Vars + +**These are variables with higher priority** + +#### File: vars/main.yml + +| Var | Type | Value | +|--------------|--------------|-------------| +| [__mtv_query_inventory_valid_retrieval_methods](vars/main.yml#L2) | list | `[]` | +| [__mtv_query_inventory_valid_retrieval_methods.0](vars/main.yml#L3) | str | `api` | +| [__mtv_query_inventory_valid_retrieval_methods.1](vars/main.yml#L4) | str | `exec` | + +### Tasks + +#### File: tasks/main.yml + +| Name | Module | Has Conditions | +| ---- | ------ | --------- | +| Verify valid retrieval method provided | `ansible.builtin.assert` | False | +| Verify MTV inventory endpoint is provided | `ansible.builtin.assert` | False | +| Query MTV inventory via api | `ansible.builtin.include_tasks` | True | +| Query MTV inventory via exec | `ansible.builtin.include_tasks` | True | + +#### File: tasks/query_api.yml + +| Name | Module | Has Conditions | +| ---- | ------ | --------- | +| query_api ¦ Determine MTV Inventory URL | `block` | True | +| query_api ¦ Locate MTV Inventory Route | `kubernetes.core.k8s_info` | False | +| query_api ¦ Fail if MTV Inventory Route not found | `ansible.builtin.fail` | True | +| query_api ¦ Set MTV Inventory URL | `ansible.builtin.set_fact` | False | +| query_api ¦ Execute Query (api) | `ansible.builtin.uri` | False | +| query_api ¦ Set Inventory Result Fact | `ansible.builtin.set_fact` | False | + +#### File: tasks/query_exec.yml + +| Name | Module | Has Conditions | +| ---- | ------ | --------- | +| query_exec ¦ Obtain the name of a Running Forklift Inventory Pod | `kubernetes.core.k8s_info` | False | +| query_exec ¦ Set name of the MTV Inventory Pod | `ansible.builtin.set_fact` | False | +| query_exec ¦ Execute Query (exec) | `kubernetes.core.k8s_exec` | False | +| query_exec ¦ Set Result Fact | `ansible.builtin.set_fact` | False | + +## Task Flow Graphs + +### Graph for main.yml + +```mermaid +flowchart TD +Start +classDef block stroke:#3498db,stroke-width:2px; +classDef task stroke:#4b76bb,stroke-width:2px; +classDef includeTasks stroke:#16a085,stroke-width:2px; +classDef importTasks stroke:#34495e,stroke-width:2px; +classDef includeRole stroke:#2980b9,stroke-width:2px; +classDef importRole stroke:#699ba7,stroke-width:2px; +classDef includeVars stroke:#8e44ad,stroke-width:2px; +classDef rescue stroke:#665352,stroke-width:2px; + + Start-->|Task| Verify_valid_retrieval_method_provided0[verify valid retrieval method provided]:::task + Verify_valid_retrieval_method_provided0-->|Task| Verify_MTV_inventory_endpoint_is_provided1[verify mtv inventory endpoint is provided]:::task + Verify_MTV_inventory_endpoint_is_provided1-->|Include task| Query_MTV_inventory_via_api_query_api_yml_2[query mtv inventory via api
When: **mtv query inventory retrieval method api**
include_task: query api yml]:::includeTasks + Query_MTV_inventory_via_api_query_api_yml_2-->|Include task| Query_MTV_inventory_via_exec_query_exec_yml_3[query mtv inventory via exec
When: **mtv query inventory retrieval method exec**
include_task: query exec yml]:::includeTasks + Query_MTV_inventory_via_exec_query_exec_yml_3-->End +``` + +### Graph for query_api.yml + +```mermaid +flowchart TD +Start +classDef block stroke:#3498db,stroke-width:2px; +classDef task stroke:#4b76bb,stroke-width:2px; +classDef includeTasks stroke:#16a085,stroke-width:2px; +classDef importTasks stroke:#34495e,stroke-width:2px; +classDef includeRole stroke:#2980b9,stroke-width:2px; +classDef importRole stroke:#699ba7,stroke-width:2px; +classDef includeVars stroke:#8e44ad,stroke-width:2px; +classDef rescue stroke:#665352,stroke-width:2px; + + Start-->|Block Start| query_api___Determine_MTV_Inventory_URL0_block_start_0[[query api determine mtv inventory url
When: **mtv query inventory url default true
length 0**]]:::block + query_api___Determine_MTV_Inventory_URL0_block_start_0-->|Task| query_api___Locate_MTV_Inventory_Route0[query api locate mtv inventory route]:::task + query_api___Locate_MTV_Inventory_Route0-->|Task| query_api___Fail_if_MTV_Inventory_Route_not_found1[query api fail if mtv inventory route not found
When: **mtv query inventory route info is not defined or
mtv query inventory route info resources is not
defined or mtv query inventory route info
resources length 0**]:::task + query_api___Fail_if_MTV_Inventory_Route_not_found1-->|Task| query_api___Set_MTV_Inventory_URL2[query api set mtv inventory url]:::task + query_api___Set_MTV_Inventory_URL2-.->|End of Block| query_api___Determine_MTV_Inventory_URL0_block_start_0 + query_api___Set_MTV_Inventory_URL2-->|Task| query_api___Execute_Query__api_1[query api execute query api ]:::task + query_api___Execute_Query__api_1-->|Task| query_api___Set_Inventory_Result_Fact2[query api set inventory result fact]:::task + query_api___Set_Inventory_Result_Fact2-->End +``` + +### Graph for query_exec.yml + +```mermaid +flowchart TD +Start +classDef block stroke:#3498db,stroke-width:2px; +classDef task stroke:#4b76bb,stroke-width:2px; +classDef includeTasks stroke:#16a085,stroke-width:2px; +classDef importTasks stroke:#34495e,stroke-width:2px; +classDef includeRole stroke:#2980b9,stroke-width:2px; +classDef importRole stroke:#699ba7,stroke-width:2px; +classDef includeVars stroke:#8e44ad,stroke-width:2px; +classDef rescue stroke:#665352,stroke-width:2px; + + Start-->|Task| query_exec___Obtain_the_name_of_a_Running_Forklift_Inventory_Pod0[query exec obtain the name of a running forklift
inventory pod]:::task + query_exec___Obtain_the_name_of_a_Running_Forklift_Inventory_Pod0-->|Task| query_exec___Set_name_of_the_MTV_Inventory_Pod1[query exec set name of the mtv inventory pod]:::task + query_exec___Set_name_of_the_MTV_Inventory_Pod1-->|Task| query_exec___Execute_Query__exec_2[query exec execute query exec ]:::task + query_exec___Execute_Query__exec_2-->|Task| query_exec___Set_Result_Fact3[query exec set result fact]:::task + query_exec___Set_Result_Fact3-->End +``` + +## Author Information + +Red Hat + +## License + +GPL-3.0-only + +## Minimum Ansible Version + +2.15.0 + +## Platforms + +No platforms specified. + + \ No newline at end of file diff --git a/roles/mtv_query_inventory/defaults/main.yml b/roles/mtv_query_inventory/defaults/main.yml new file mode 100644 index 0000000..479949e --- /dev/null +++ b/roles/mtv_query_inventory/defaults/main.yml @@ -0,0 +1,100 @@ +--- + +# title: OpenShift Host +# required: True +# description: OpenShift host. +mtv_query_inventory_openshift_host: >- + {{ + lookup('env', 'K8S_AUTH_HOST') | default(openshift_host, true) + }} + +# title: OpenShift API Key +# required: True +# description: OpenShift API key. +mtv_query_inventory_openshift_api_key: >- + {{ + lookup('env', 'K8S_AUTH_API_KEY') + | default( + openshift_credential.openshift_api_key + | default(openshift_credential.openshift_temporary_api_key) + if openshift_credential is defined + else openshift_api_key | default(openshift_temporary_api_key), + true + ) + }} + +# title: OpenShift CA Certificate Path +# required: False +# description: Path to the OpenShift CA Certificate. +mtv_query_inventory_openshift_ca_cert_path: >- + {{ + lookup('env', 'K8S_AUTH_SSL_CA_CERT') + | default(openshift_ca_cert_path | default(omit), true) + }} + +# title: OpenShift Verify SSL +# required: False +# description: Whether to verify SSL certificates. +mtv_query_inventory_openshift_verify_ssl: >- + {{ + lookup('env', 'K8S_AUTH_VERIFY_SSL') + | default(openshift_verify_ssl | default(true), true) + }} + +# title: MTV Retrieval Method +# required: False +# description: Method to retrieve inventory data from MTV. Valid options are 'api' and 'exec'. +mtv_query_inventory_retrieval_method: api + +# title: MTV Retrieval Method +# required: False +# description: Method to retrieve inventory data from MTV. Valid options are 'api' and 'exec'. +mtv_query_inventory_api_scheme: https + +# title: MTV Inventory Retrieval Endpoint +# required: True +# description: MTV inventory retrieval endpoint. +mtv_query_inventory_endpoint_path: + +# title: Inventory URL +# required: False +# description: >- +# URL of the MTV Inventory Service. If not provided, +# the URL will be determined from the MTV Inventory Route. +mtv_query_inventory_url: "" + +# title: Secure Logging +# required: False +# description: Whether to enable secure logging. +mtv_query_inventory_secure_logging: "{{ secure_logging | default(true) }}" + +# title: Inventory Route Name +# required: False +# description: Inventory Route Name +mtv_query_inventory_route_name: forklift-inventory + +# title: Inventory Service Name +# required: False +# description: Inventory Service Name +mtv_query_inventory_service_name: forklift-inventory + +# title: Inventory Namespace +# required: False +# description: Inventory Namespace +mtv_query_inventory_namespace: "openshift-mtv" + +# title: Inventory Result Variable +# required: False +# description: Name of the variable to store the query result. +mtv_query_inventory_result_var: mtv_query_inventory_query_result + +# title: Inventory Query Retries +# required: False +# description: Number of retries for the inventory queries. +mtv_query_inventory_query_retries: 5 + +# title: Inventory Query Delay +# required: False +# description: Delay between inventory query retries in seconds. +mtv_query_inventory_query_delay: 5 +... diff --git a/roles/mtv_query_inventory/meta/argument_specs.yml b/roles/mtv_query_inventory/meta/argument_specs.yml new file mode 100644 index 0000000..7901417 --- /dev/null +++ b/roles/mtv_query_inventory/meta/argument_specs.yml @@ -0,0 +1,86 @@ +--- +argument_specs: + main: + short_description: Query the MTV (Migration Toolkit for Virtualization) inventory. + options: + mtv_query_inventory_openshift_host: + type: str + required: true + description: OpenShift host (eg. https://api.openshift.example.com:6443). + + mtv_query_inventory_openshift_api_key: + type: str + required: true + description: OpenShift API key. + + mtv_query_inventory_openshift_ca_cert_path: + type: str + required: false + description: Path to the OpenShift CA Certificate. + + mtv_query_inventory_openshift_verify_ssl: + type: bool + required: false + default: true + description: Whether to verify SSL certificates. + + mtv_query_inventory_retrieval_method: + type: str + required: false + default: "api" + choices: + - api + - exec + description: >- + Method to retrieve inventory data from MTV. + + mtv_query_inventory_api_scheme: + type: str + required: false + default: "https" + description: Scheme to use when constructing the MTV Inventory URL. + + mtv_query_inventory_url: + type: str + required: false + default: "" + description: >- + URL of the MTV Inventory Service. If not provided, + the URL will be determined from the MTV Inventory Route. + + mtv_query_inventory_endpoint_path: + type: str + required: true + description: Relative path to the MTV inventory retrieval endpoint (eg. /providers). + + mtv_query_inventory_secure_logging: + type: bool + required: false + default: true + description: Whether to enable secure logging. + + mtv_query_inventory_route_name: + type: str + required: false + default: "forklift-inventory" + description: MTV Inventory Route Name. + + mtv_query_inventory_service_name: + type: str + required: false + default: "forklift-inventory" + description: MTV Inventory Service Name. + + mtv_query_inventory_namespace: + type: str + required: false + default: "openshift-mtv" + description: Namespace containing the MTV inventory service. + + mtv_query_inventory_result_var: + type: str + required: false + default: "mtv_query_inventory_query_result" + description: >- + Name of the variable to store the query result. +... diff --git a/roles/mtv_query_inventory/meta/main.yml b/roles/mtv_query_inventory/meta/main.yml new file mode 100644 index 0000000..ab2dc43 --- /dev/null +++ b/roles/mtv_query_inventory/meta/main.yml @@ -0,0 +1,10 @@ +--- +galaxy_info: + author: Red Hat + description: Queries MTV inventory. + company: "Red Hat" + license: GPL-3.0-only + min_ansible_version: 2.15.0 + galaxy_tags: [] +dependencies: [] +... diff --git a/roles/mtv_query_inventory/tasks/main.yml b/roles/mtv_query_inventory/tasks/main.yml new file mode 100644 index 0000000..304271f --- /dev/null +++ b/roles/mtv_query_inventory/tasks/main.yml @@ -0,0 +1,31 @@ +--- + +- name: Verify valid retrieval method provided + ansible.builtin.assert: + that: + - mtv_query_inventory_retrieval_method in __mtv_query_inventory_valid_retrieval_methods + fail_msg: >- + "{{ mtv_query_inventory_retrieval_method }} is not a valid MTV inventory retrieval method. + Valid options are {{ __mtv_query_inventory_valid_retrieval_methods | join(', ') }}." + quiet: true + +- name: Verify MTV inventory endpoint is provided + ansible.builtin.assert: + that: + - mtv_query_inventory_endpoint_path | default('', true) | length > 0 + - mtv_query_inventory_endpoint_path is ansible.builtin.match('^/[a-zA-Z0-9_\\-/]*(\\?[a-zA-Z0-9_\\-/.%&=]*)?$') + fail_msg: >- + Invalid MTV inventory endpoint provided: {{ mtv_query_inventory_endpoint_path }}. + Ensure that a valid URL context path is provided for the MTV inventory endpoint. + quiet: true + +- name: Query MTV inventory via api + when: mtv_query_inventory_retrieval_method == 'api' + ansible.builtin.include_tasks: + file: query_api.yml + +- name: Query MTV inventory via exec + when: mtv_query_inventory_retrieval_method == 'exec' + ansible.builtin.include_tasks: + file: query_exec.yml +... diff --git a/roles/mtv_query_inventory/tasks/query_api.yml b/roles/mtv_query_inventory/tasks/query_api.yml new file mode 100644 index 0000000..50052a7 --- /dev/null +++ b/roles/mtv_query_inventory/tasks/query_api.yml @@ -0,0 +1,60 @@ +--- +- name: query_api | Determine MTV Inventory URL + when: mtv_query_inventory_url | default('', true) | length == 0 + block: + - name: query_api | Locate MTV Inventory Route + no_log: "{{ mtv_query_inventory_secure_logging }}" + kubernetes.core.k8s_info: + host: "{{ mtv_query_inventory_openshift_host }}" + api_key: "{{ mtv_query_inventory_openshift_api_key }}" + validate_certs: "{{ mtv_query_inventory_openshift_verify_ssl }}" + ca_cert: "{{ mtv_query_inventory_openshift_ca_cert_path | default(omit) }}" + api_version: route.openshift.io/v1 + kind: Route + name: "{{ mtv_query_inventory_route_name }}" + namespace: "{{ mtv_query_inventory_namespace }}" + register: __mtv_query_inventory_route_info + retries: "{{ mtv_query_inventory_query_retries }}" + until: + - __mtv_query_inventory_route_info.resources is defined + - __mtv_query_inventory_route_info.resources | length > 0 + delay: "{{ mtv_query_inventory_query_delay }}" + + - name: query_api | Fail if MTV Inventory Route not found + ansible.builtin.fail: + msg: >- + MTV Inventory Route {{ mtv_query_inventory_route_name }} + not found in namespace {{ mtv_query_inventory_namespace }}. + Ensure that the MTV Inventory Route is created and accessible. + when: >- + __mtv_query_inventory_route_info is not defined + or __mtv_query_inventory_route_info.resources is not defined + or __mtv_query_inventory_route_info.resources | length == 0 + + - name: query_api | Set MTV Inventory URL + ansible.builtin.set_fact: + mtv_query_inventory_url: >- + {{ mtv_query_inventory_api_scheme }}://{{ __mtv_query_inventory_route_info.resources[0].spec.host }} + +- name: query_api | Execute Query (api) + ansible.builtin.uri: + url: "{{ mtv_query_inventory_url }}{{ mtv_query_inventory_endpoint_path }}" + method: GET + body_format: json + status_code: 200 + return_content: true + validate_certs: "{{ mtv_query_inventory_openshift_verify_ssl }}" + ca_cert: "{{ mtv_query_inventory_openshift_ca_cert_path | default(omit) }}" + headers: + Authorization: Bearer {{ mtv_query_inventory_openshift_api_key }} + register: __mtv_query_inventory_query_result + retries: "{{ mtv_query_inventory_query_retries }}" + until: __mtv_query_inventory_query_result.status == 200 + delay: "{{ mtv_query_inventory_query_delay }}" + no_log: "{{ mtv_query_inventory_secure_logging }}" + +- name: query_api | Set Inventory Result Fact # noqa var-naming[no-jinja] + ansible.builtin.set_fact: + "{{ mtv_query_inventory_query_result_var | default(mtv_query_inventory_result_var) }}": >- + {{ __mtv_query_inventory_query_result.json }} +... diff --git a/roles/mtv_query_inventory/tasks/query_exec.yml b/roles/mtv_query_inventory/tasks/query_exec.yml new file mode 100644 index 0000000..f7af440 --- /dev/null +++ b/roles/mtv_query_inventory/tasks/query_exec.yml @@ -0,0 +1,51 @@ +--- + +- name: query_exec | Obtain the name of a Running Forklift Inventory Pod + kubernetes.core.k8s_info: + kind: EndpointSlice + host: "{{ mtv_query_inventory_openshift_host }}" + api_key: "{{ mtv_query_inventory_openshift_api_key }}" + validate_certs: "{{ mtv_query_inventory_openshift_verify_ssl }}" + ca_cert: "{{ mtv_query_inventory_openshift_ca_cert_path | default(omit) }}" + namespace: "{{ mtv_query_inventory_namespace }}" + label_selectors: + kubernetes.io/service-name={{ mtv_query_inventory_service_name }} + register: _mtv_query_inventory_endpoint_slice + until: + - "'resources' in _mtv_query_inventory_endpoint_slice" + - _mtv_query_inventory_endpoint_slice.resources | length > 0 + - "'endpoints' in (_mtv_query_inventory_endpoint_slice.resources | first)" + - (_mtv_query_inventory_endpoint_slice.resources | first).endpoints | length > 0 + retries: "{{ mtv_query_inventory_query_retries }}" + delay: "{{ mtv_query_inventory_query_delay }}" + no_log: "{{ mtv_query_inventory_secure_logging }}" + +- name: query_exec | Set name of the MTV Inventory Pod + ansible.builtin.set_fact: + mtv_query_inventory_exec_pod_name: >- + {{ (((_mtv_query_inventory_endpoint_slice.resources | first).endpoints | first)).targetRef.name }} + +- name: query_exec | Execute Query (exec) + kubernetes.core.k8s_exec: + host: "{{ mtv_query_inventory_openshift_host }}" + api_key: "{{ mtv_query_inventory_openshift_api_key }}" + validate_certs: "{{ mtv_query_inventory_openshift_verify_ssl }}" + ca_cert: "{{ mtv_query_inventory_openshift_ca_cert_path | default(omit) }}" + namespace: "{{ mtv_query_inventory_namespace }}" + pod: "{{ mtv_query_inventory_exec_pod_name }}" + command: >- + curl -k -s + -H "Authorization: Bearer {{ mtv_query_inventory_openshift_api_key }}" + https://localhost:8443{{ mtv_query_inventory_endpoint_path }} + register: _mtv_query_inventory_query_result + retries: "{{ mtv_query_inventory_query_retries }}" + until: _mtv_query_inventory_query_result.rc == 0 + delay: "{{ mtv_query_inventory_query_delay }}" + changed_when: false + no_log: "{{ mtv_query_inventory_secure_logging }}" + +- name: query_exec | Set Result Fact # noqa var-naming[no-jinja] + ansible.builtin.set_fact: + "{{ mtv_query_inventory_query_result_var | default(mtv_query_inventory_result_var) }}": >- + {{ _mtv_query_inventory_query_result.stdout | from_json }} +... diff --git a/roles/mtv_query_inventory/tests/inventory b/roles/mtv_query_inventory/tests/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/roles/mtv_query_inventory/tests/inventory @@ -0,0 +1 @@ +localhost diff --git a/roles/mtv_query_inventory/vars/main.yml b/roles/mtv_query_inventory/vars/main.yml new file mode 100644 index 0000000..73a2f30 --- /dev/null +++ b/roles/mtv_query_inventory/vars/main.yml @@ -0,0 +1,5 @@ +--- +__mtv_query_inventory_valid_retrieval_methods: + - api + - exec +...