From eb5bfcf187bbcaea3f0549a014650a168a3de1b6 Mon Sep 17 00:00:00 2001 From: James Slagle Date: Fri, 23 Aug 2019 09:44:47 -0400 Subject: [PATCH] Choose first node as bootstrap node name/ip Previously when Heat was choosing the bootstrap node, it always chose the first node due to the ResourceGroup ordering. When it was switched to ansible, the last node was chosen instead due to unpredictable dict sorting from the inventory. This patch restores the previous behavior and makes sure the first node in a group is chosen as the bootstrap node for the both the name and ip if the sorted_bootstrap_node variable is set. The variable is used so that the tripleo-heat-templates patch and this patch can merge, otherwise they'd block each other from merging. See I6b93f5b0747c5a11d24615a3bbb5516f9be81401 for the tripleo-heat-templates patch. Change-Id: I3d595ea5b84f940a3b2dbc69798f69fe03529c10 --- .../molecule/hieradata_vars/molecule.yml | 1 + .../tripleo-hieradata/templates/all_nodes.j2 | 20 ++++++++++++++++--- .../templates/bootstrap_node.j2 | 6 +++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/tripleo_ansible/roles/tripleo-hieradata/molecule/hieradata_vars/molecule.yml b/tripleo_ansible/roles/tripleo-hieradata/molecule/hieradata_vars/molecule.yml index 76eae946f..3bf4ca896 100644 --- a/tripleo_ansible/roles/tripleo-hieradata/molecule/hieradata_vars/molecule.yml +++ b/tripleo_ansible/roles/tripleo-hieradata/molecule/hieradata_vars/molecule.yml @@ -195,6 +195,7 @@ provisioner: zaqar_api_network: ctlplane stack_action: CREATE stack_update_type: '' + tripleo_role_name: Standalone validate_controllers_icmp: true validate_fqdn: false validate_gateways_icmp: true diff --git a/tripleo_ansible/roles/tripleo-hieradata/templates/all_nodes.j2 b/tripleo_ansible/roles/tripleo-hieradata/templates/all_nodes.j2 index 32830fb84..d1aea57b2 100644 --- a/tripleo_ansible/roles/tripleo-hieradata/templates/all_nodes.j2 +++ b/tripleo_ansible/roles/tripleo-hieradata/templates/all_nodes.j2 @@ -15,12 +15,26 @@ {# _short_node_names: #} {% set _ = all_nodes.__setitem__((service ~ '_short_node_names'), (groups[service] | default ([]) | map('extract', hostvars, 'inventory_hostname') | list) + all_nodes_extra_map_data[service ~ '_short_node_names'] | default([])) %} {# _short_bootstrap_node_name: hostname #} -{% set services = (groups[service] | default ([]) | map('extract', hostvars, 'inventory_hostname')) | list + [all_nodes_extra_map_data[service ~ '_short_bootstrap_node_name'] | default('')] %} +{% set services = (groups[service] | default ([]) | list ) %} +{% if all_nodes_extra_map_data[service ~ '_short_bootstrap_node_name'] is defined %} +{% set services = services + all_nodes_extra_map_data[service ~ '_short_bootstrap_node_name'] %} +{% endif %} {% if (services | length) > 0 %} -{% set _ = all_nodes.__setitem__((service ~ '_short_bootstrap_node_name'), (services | first)) %} +{% if sorted_bootstrap_node | default(false) %} +{% set _ = all_nodes.__setitem__((service ~ '_short_bootstrap_node_name'), (services | sort | first)) %} +{% else %} +{% set _ = all_nodes.__setitem__((service ~ '_short_bootstrap_node_name'), (services | first)) %} +{% endif %} {% endif %} {# _bootstrap_node_ip: hostname #} -{% set services = (groups[service] | default ([]) | map('extract', hostvars, service_net_map[service ~ '_network'] | default('ctlplane') ~ '_ip')) | list + [all_nodes_extra_map_data[service ~ '_short_bootstrap_node_ip'] | default('')] %} +{% if sorted_bootstrap_node | default(false) %} +{% set services = (groups[service] | default ([]) | sort | map('extract', hostvars, service_net_map[service ~ '_network'] | default('ctlplane') ~ '_ip')) | list %} +{% else %} +{% set services = (groups[service] | default ([]) | map('extract', hostvars, service_net_map[service ~ '_network'] | default('ctlplane') ~ '_ip')) | list %} +{% endif %} +{% if all_nodes_extra_map_data[service ~ '_short_bootstrap_node_ip'] is defined %} +{% set services = services + [all_nodes_extra_map_data[service ~ '_short_bootstrap_node_ip']] %} +{% endif %} {% if (services | length) > 0 %} {% set _ = all_nodes.__setitem__((service ~ '_bootstrap_node_ip'), (services | first)) %} {% endif %} diff --git a/tripleo_ansible/roles/tripleo-hieradata/templates/bootstrap_node.j2 b/tripleo_ansible/roles/tripleo-hieradata/templates/bootstrap_node.j2 index e129963f8..00a196910 100644 --- a/tripleo_ansible/roles/tripleo-hieradata/templates/bootstrap_node.j2 +++ b/tripleo_ansible/roles/tripleo-hieradata/templates/bootstrap_node.j2 @@ -1,4 +1,8 @@ {% set boostrap_node = {} %} -{% set _ = boostrap_node.__setitem__('boostrap_node_id', bootstrap_nodeid) %} +{% if sorted_bootstrap_node | default(false) %} +{% set _ = boostrap_node.__setitem__('boostrap_node_id', groups[tripleo_role_name] | sort | first) %} +{% else %} +{% set _ = boostrap_node.__setitem__('boostrap_node_id', groups[tripleo_role_name] | first) %} +{% endif %} {# RENDER #} {{ boostrap_node | to_nice_json }}