kayobe/ansible/roles/kolla-ansible/templates/overcloud-top-level.j2
Mark Goddard 8dc7ba7889 Use host vars files for kolla ansible inventory
Kayobe writes out several host variables to the Kolla ansible inventory
files, etc/kolla/inventory/seed and etc/kolla/inventory/overcloud. These
include ansible_host, and network interfaces such as api_interface,
ironic_dnsmasq_interface, etc.

In Ansible, these should have a higher precedence than the kolla ansible
group variables in ansible/group_vars/all.yml that set the defaults.
However, in Ansible 2.4+, if the host has the same name as a group that
it is in, the group variables now take precedence, meaning that it is
not possible to override them.

This was observed when using the kayobe-config-dev repo for testing,
where the seed host is in the seed group.

Admittedly ansible does tell you not to do this: [WARNING]:
Found both group and host with same name: localhost

The solution used here is to use a separate host_vars file for each
host. Alternatively we could enforce that hostnames and groups do not
overlap.

Change-Id: I349c8279d85a591689ac8108bce14d96889440fe
Story: 2004418
Task: 28065
2018-12-20 17:03:16 +00:00

66 lines
1.9 KiB
Django/Jinja

# This inventory section provides a mapping of the top level groups to hosts.
#
# Top level groups define the roles of hosts, e.g. controller or compute.
# Components define groups of services, e.g. nova or ironic.
# Services define single containers, e.g. nova-compute or ironic-api.
{% for group in kolla_overcloud_top_level_groups %}
# Top level {{ group }} group.
[{{ group }}]
# These hostnames must be resolvable from your deployment host
{% for host in groups.get(group, []) %}
{{ host }}
{% endfor %}
{% endfor %}
[overcloud:children]
{% for group in kolla_overcloud_top_level_groups %}
{{ group }}
{% endfor %}
[overcloud:vars]
ansible_user={{ kolla_ansible_user }}
{% if kolla_ansible_become | bool %}
ansible_become=true
{% endif %}
{% if kolla_ansible_target_venv is not none %}
# Execute ansible modules on the remote target hosts using a virtualenv.
ansible_python_interpreter={{ kolla_ansible_target_venv }}/bin/python
{% endif %}
{% for kolla_group, kolla_group_config in kolla_overcloud_inventory_top_level_group_map.items() %}
{% if 'groups' in kolla_group_config %}
{% set renamed_groups = kolla_group_config.groups | difference([kolla_group]) | list %}
{% if renamed_groups | length > 0 %}
# Mapping from kolla-ansible group {{ kolla_group }} to top level kayobe
# groups.
[{{ kolla_group }}:children]
{% for group in kolla_group_config.groups %}
{{ group }}
{% endfor %}
{% endif %}
{% endif %}
{% if 'vars' in kolla_group_config %}
# Mapping from kolla-ansible group {{ kolla_group }} to top level kayobe
# variables.
[{{ kolla_group }}:vars]
{% for var_name, var_value in kayobe_group_config.vars.items() %}
{{ var_name }}={{ var_value }}
{% endfor %}
{% endif %}
{% endfor %}
{% for group in kolla_overcloud_inventory_kolla_top_level_groups %}
{% if not kolla_overcloud_inventory_top_level_group_map.get(group, {}).get('groups') %}
# Empty group definition for {{ group }}.
[{{ group }}]
{% endif %}
{% endfor %}
[compute:children]
inner-compute
external-compute