--- # Run this playbook that way: # $ ansible-playbook -i ocp-master-node-hostname-or-ip, get_ocp_info.yaml # Ansible runner machine info - hosts: localhost gather_facts: no tasks: - name: Generate name for data file set_fact: data_file_path: "{{ lookup('env', 'VIRTUAL_ENV') }}/../../ocp_{{ (groups['all'][0]).replace('.', '_') }}_info.yaml" - name: Print data file name debug: msg: "Data file path is '{{ data_file_path }}'" - name: "[Re]Create file where we are going to store gathered data" copy: content: "" dest: "{{ data_file_path }}" mode: 0644 force: yes - name: Get Linux kernel version of ansible runner shell: "uname -a" register: ansible_runner_linux_kernel_version - name: Get Red Hat release info for ansible runner shell: "cat /etc/redhat-release" register: ansible_runner_rh_release ignore_errors: yes - name: Get ansible-playbook version from ansible runner shell: "{{ lookup('env', 'VIRTUAL_ENV') }}/bin/ansible-playbook --version | grep '^ansible-playbook' | awk '{print $2}'" register: ansible_runner_ansible_playbook_version - name: Get 'openshift-ansible' lib version used by ansible runner shell: "echo \"openshift-ansible-$(cat {{ lookup('env', 'VIRTUAL_ENV') }}/usr/share/ansible/openshift-ansible/.tito/packages/openshift-ansible | awk '{print $1}')\"" register: ansible_runner_oc_lib_version - name: Write ansible runner data to the data file yedit: src: "{{ data_file_path }}" state: present backup: false edits: - key: 01_ansible_runner value: Linux kernel version: "{{ ansible_runner_linux_kernel_version.stdout_lines }}" Red Hat release info: "{{ ansible_runner_rh_release.stdout_lines or 'File /etc/redhat-release was not found. Not RHEL machine?' }}" ansible-playbook version: "{{ ansible_runner_ansible_playbook_version.stdout_lines }}" openshift-ansible lib version: "{{ ansible_runner_oc_lib_version.stdout_lines }}" # === Master node info === - hosts: all[0] gather_facts: no vars: master_package_list: - docker - heketi master_service_list: - docker - multipathd gluster_pod_package_list: - gluster - heketi - targetcli - gluster-block - tcmu-runner - python-configshell - python-rtslib gluster_pod_service_list: - glusterd - heketi - gluster-blockd - gluster-block-target - tcmu-runner - rpcbind heketi_pod_package_list: - gluster - heketi # NOTE(vponomar): we do not process list of Heketi POD services for 2 reasons: # 1) No requirement to get status of any of services on Heketi POD. # 2) 'systemctl' does not work on it. tasks: - name: Get distro version of ansible runner shell: "uname -a" register: master_linux_kernel_version - name: Get Red Hat release info for ansible runner shell: "cat /etc/redhat-release" register: master_rh_release - name: Create grep filter with all the packages we are interested in set_fact: package_filter: "{{ package_filter | default('grep') + ' -e ' + item }}" with_items: "{{ master_package_list }}" - name: Get list of installed packages we are interested in shell: "rpm -qa | {{ package_filter }}" register: master_packages - name: Get status of services on OCP Master node shell: "systemctl list-units {{ master_service_list | join('.service ') }}.service --type=service --all --no-pager --no-legend" register: master_services - name: Get OpenShift client version shell: "oc version | grep -e 'oc ' -e 'openshift' -e 'kube'" register: master_oc_version - name: Get list of OCP nodes shell: "oc get nodes" register: master_ocp_nodes - name: Get info about all the docker images used in OCP cluster shell: "oc get pods --all-namespaces -o=custom-columns=:.status.containerStatuses[*].image | grep -v -e '^$' | uniq" register: master_image_info - name: Write master data to the data file delegate_to: localhost yedit: src: "{{ hostvars['localhost']['data_file_path'] }}" state: present edits: - key: 02_master value: Linux kernel version: "{{ master_linux_kernel_version.stdout_lines }}" Red Hat release info: "{{ master_rh_release.stdout_lines }}" List of Packages: "{{ master_packages.stdout_lines }}" List of services: "{{ master_services.stdout_lines }}" OC Version: "{{ master_oc_version.stdout_lines }}" OCP nodes: "{{ master_ocp_nodes.stdout_lines }}" Images info: "{{ master_image_info.stdout_lines }}" # Heketi POD - name: Get heketi POD shell: "oc get pods --all-namespaces -l heketi -o=custom-columns=:.metadata.name,:.metadata.namespace" register: heketi_pods - name: DEBUG HEKETI debug: msg: "{{ heketi_pods }}" - block: - name: Get storage release version from Heketi POD shell: "oc exec {{ (heketi_pods.stdout_lines[1].split(' ') | list)[0] }} --namespace {{ (heketi_pods.stdout_lines[1].split(' ') | list)[-1] }} -- cat /etc/redhat-storage-release" register: heketi_pod_storage_release_version - name: Get info about packages on Heketi POD shell: "oc exec {{ (heketi_pods.stdout_lines[1].split(' ') | list)[0] }} --namespace {{ (heketi_pods.stdout_lines[1].split(' ') | list)[-1] }} -- rpm -qa | grep -e {{ heketi_pod_package_list | join(' -e ') }}" register: heketi_pod_packages - name: Write Heketi data to the data file delegate_to: localhost yedit: src: "{{ hostvars['localhost']['data_file_path'] }}" state: present edits: - key: 03_heketi_pod value: Storage release version: "{{ heketi_pod_storage_release_version.stdout_lines }}" List of Packages: "{{ heketi_pod_packages.stdout_lines }}" when: "{{ ((heketi_pods.stdout_lines | join('')).strip() | length) > 0 }}" # Gluster PODs - name: Get list of Gluster PODs shell: "oc get pods --all-namespaces -l glusterfs-node -o=custom-columns=:.metadata.name,:.metadata.namespace" register: gluster_pods - name: DEBUG GLUSTER debug: msg: "{{ gluster_pods }}" - block: - name: Get storage release version from Gluster PODs shell: "oc exec {{ (item.split(' ') | list)[0] }} --namespace {{ (item.split(' ') | list)[-1] }} -- cat /etc/redhat-storage-release" with_items: "{{ gluster_pods.stdout_lines[1:] }}" register: gluster_pod_storage_release_version_results - name: Process gluster PODs storage release versions results set_fact: gluster_pod_storage_release_version_processed: "{{ gluster_pod_storage_release_version_processed | default({}) | combine( {(item.item.strip().split(' ')[0]): item.stdout_lines}, recursive=True ) }}" with_items: "{{ gluster_pod_storage_release_version_results.results }}" - name: Get info about packages on Gluster PODs shell: "oc exec {{ (item.split(' ') | list)[0] }} --namespace {{ (item.split(' ') | list)[-1] }} -- rpm -qa | grep -e {{ gluster_pod_package_list | join(' -e ') }}" with_items: "{{ gluster_pods.stdout_lines[1:] }}" register: gluster_pod_package_list_results - name: Process gluster PODs package lists results set_fact: gluster_pod_package_list_processed: "{{ gluster_pod_package_list_processed | default({}) | combine( {(item.item.strip().split(' ')[0]): item.stdout_lines}, recursive=True ) }}" with_items: "{{ gluster_pod_package_list_results.results }}" - name: Get info about services on Gluster PODs shell: "oc exec {{ (item.split(' ') | list)[0] }} --namespace {{ (item.split(' ') | list)[-1] }} -- systemctl list-units {{ gluster_pod_service_list | join('.service ') }}.service --type=service --all --no-pager --no-legend" with_items: "{{ gluster_pods.stdout_lines[1:] }}" register: gluster_pod_service_list_results - name: Process gluster PODs service lists results set_fact: gluster_pod_service_list_processed: "{{ gluster_pod_service_list_processed | default({}) | combine( {(item.item.strip().split(' ')[0]): item.stdout_lines}, recursive=True ) }}" with_items: "{{ gluster_pod_service_list_results.results }}" - name: Write Gluster PODs data to the data file delegate_to: localhost yedit: src: "{{ hostvars['localhost']['data_file_path'] }}" state: present edits: - key: 04_gluster_pods value: Storage release version: "{{ gluster_pod_storage_release_version_processed }}" List of Packages: "{{ gluster_pod_package_list_processed }}" List of Services: "{{ gluster_pod_service_list_processed }}" when: "{{ ((gluster_pods.stdout_lines | join('')).strip() | length) > 0 }}" - hosts: localhost gather_facts: no tasks: - shell: "cat {{ data_file_path }}" register: data_file_content - name: Print gathered data debug: msg: "{{ data_file_content.stdout_lines }}"