kayobe/ansible/overcloud-inventory-discover.yml
Mark Goddard 425e0020d3 Add redfish_address variable and support discovering it
During the ``kayobe overcloud inventory discover`` command, Kayobe
queries the Bifrost ironic node list and updates the Kayobe inventory.
If the nodes have a driver_info.ipmi_address field set, an ipmi_address
variable will be defined in the Kayobe inventory for the host.

This does not work for Redfish based hosts, which use
driver_info.redfish_address in the Ironic node. This change adds a new
``redfish_address`` variable and extends the command to discover the
address from the Bifrost node inventory.

Change-Id: Ieb1e61ddadb542732739d1f478b1e5a176e0ac88
2024-09-06 10:11:05 +00:00

58 lines
2.4 KiB
YAML

---
# Gather an inventory of nodes from the seed's Ironic service. Use this to
# generate an Ansible inventory for Kayobe.
- name: Ensure the overcloud Ansible inventory is populated
hosts: seed
tags:
- inventory-discover
tasks:
- name: Gather the Ironic node inventory using Bifrost
command: >
docker exec bifrost_deploy
bash -c '
export OS_CLOUD=bifrost &&
export BIFROST_INVENTORY_SOURCE=ironic &&
/bifrost/playbooks/inventory/bifrost_inventory.py'
register: inventory_result
changed_when: False
- name: Set a fact containing the Ironic node inventory
set_fact:
ironic_inventory: "{{ inventory_result.stdout | from_json }}"
- name: Ensure Kayobe overcloud inventory exists
local_action:
module: copy
content: |
# Managed by Ansible - do not edit.
# This is the Kayobe overcloud inventory, autogenerated from the seed
# node's Ironic inventory.
{# Build a list of all hosts with explicit mappings. #}
{% set all_mapped_hosts = [] %}
{% for hosts in overcloud_group_hosts_map.values() %}
{% set _ = all_mapped_hosts.extend(hosts) %}
{% endfor %}
{% set ignore_hosts = overcloud_group_hosts_map.get("ignore", []) %}
{# Add a section for each group. #}
{% for group in overcloud_groups | sort %}
[{{ group }}]
{% set group_hosts = overcloud_group_hosts_map.get(group, []) %}
{% for host in ironic_inventory.baremetal.hosts | sort %}
{% if (host in group_hosts or
(group == overcloud_group_default and host not in all_mapped_hosts))
and host not in ignore_hosts %}
{% set hostvars=ironic_inventory._meta.hostvars[host] %}
{% set ipmi_address=hostvars.driver_info.ipmi_address | default %}
{% set redfish_address=hostvars.driver_info.redfish_address | default %}
{% set system_vendor=hostvars.extra.system_vendor | default %}
{% set bmc_type=system_vendor | bmc_type_from_system_vendor %}
{{ host }} {% if redfish_address %}redfish_address={{ redfish_address }} {% elif ipmi_address %}ipmi_address={{ ipmi_address }} {% endif %}bmc_type={{ bmc_type }}
{% endif %}
{% endfor %}
{% endfor %}
dest: "{{ kayobe_env_config_path }}/inventory/overcloud"