kayobe/ansible/baremetal-compute-introspec...

74 lines
2.8 KiB
YAML

---
- name: Ensure dependencies are installed
hosts: controllers[0]
gather_facts: true
vars:
venv: "{{ virtualenv_path }}/openstack-cli"
pre_tasks:
- name: Set up openstack cli virtualenv
pip:
virtualenv: "{{ venv }}"
virtualenv_command: python3 -m venv
name:
- python-openstackclient
- python-ironic-inspector-client
state: latest
extra_args: "{% if pip_upper_constraints_file %}-c {{ pip_upper_constraints_file }}{% endif %}"
- name: Ensure the baremetal compute nodes' hardware introspection data is saved
hosts: baremetal-compute
gather_facts: False
max_fail_percentage: >-
{{ baremetal_compute_introspection_data_save_max_fail_percentage |
default(baremetal_compute_max_fail_percentage) |
default(kayobe_max_fail_percentage) |
default(100) }}
vars:
venv: "{{ virtualenv_path }}/openstack-cli"
controller_host: "{{ groups['controllers'][0] }}"
output_dir: "{{ lookup('env', 'PWD') }}/baremetal-compute-introspection-data"
output_format: json
tasks:
- name: Query baremetal compute nodes' hardware introspection data
command: >
{{ venv }}/bin/openstack baremetal introspection data save {{ inventory_hostname }}
register: save_result
changed_when: False
# Ignore errors, log a message later.
failed_when: False
delegate_to: "{{ controller_host }}"
environment: "{{ openstack_auth_env }}"
vars:
# NOTE: Without this, the controller's ansible_host variable will not
# be respected when using delegate_to.
ansible_host: "{{ hostvars[controller_host].ansible_host | default(controller_host) }}"
- name: Ensure introspection data output directory exists
local_action:
module: file
path: "{{ output_dir }}"
state: directory
- name: Ensure introspection data is saved locally
local_action:
module: copy
content: "{{ introspection_data_map[output_format | lower] }}"
dest: "{{ output_dir }}/{{ inventory_hostname }}.{{ output_format | lower }}"
when: save_result.rc == 0
vars:
introspection_data: "{{ save_result.stdout_lines | join('\n') | from_json }}"
introspection_data_json: "{{ introspection_data | to_nice_json(indent=4) }}"
introspection_data_yaml: "{{ introspection_data | to_nice_yaml }}"
introspection_data_map:
json: "{{ introspection_data_json }}"
yaml: "{{ introspection_data_yaml }}"
- name: Log when introspection data could not be queried
debug:
msg: >
Could not query hardware introspection data for
{{ inventory_hostname }}.
Stdout: {{ save_result.stdout }}.
Stderr: {{ save_result.stderr }}.
when: save_result.rc != 0