diff --git a/ansible/roles/etc-hosts/defaults/main.yml b/ansible/roles/etc-hosts/defaults/main.yml index 56ea4b372..abc8435f6 100644 --- a/ansible/roles/etc-hosts/defaults/main.yml +++ b/ansible/roles/etc-hosts/defaults/main.yml @@ -3,4 +3,4 @@ customize_etc_hosts: true # List of hosts to add to /etc/hosts. -etc_hosts_hosts: "{{ ansible_play_hosts_all }}" +etc_hosts_hosts: "{{ groups['overcloud'] }}" diff --git a/ansible/roles/gather-facts-delegated/defaults/main.yml b/ansible/roles/gather-facts-delegated/defaults/main.yml index 0f380d934..ad6fe6444 100644 --- a/ansible/roles/gather-facts-delegated/defaults/main.yml +++ b/ansible/roles/gather-facts-delegated/defaults/main.yml @@ -1,8 +1,8 @@ --- -gather_facts_delegated_limit_hosts: "{{ ansible_play_hosts_all }}" -gather_facts_delegated_batch_index: "{{ gather_facts_delegated_limit_hosts.index(inventory_hostname) }}" -gather_facts_delegated_batch_size: "{{ gather_facts_delegated_limit_hosts | length }}" +gather_facts_delegated_limit_hosts: "{{ groups['overcloud'] }}" +gather_facts_delegated_batch_index: "{{ ansible_play_batch.index(inventory_hostname) }}" +gather_facts_delegated_batch_count: "{{ ansible_play_batch | length }}" # Use a python list slice to divide the group up. # Syntax: [::] gather_facts_delegated_delegate_hosts: >- - {{ gather_facts_delegated_limit_hosts[gather_facts_delegated_batch_index | int::gather_facts_delegated_batch_size | int] }} + {{ gather_facts_delegated_limit_hosts[gather_facts_delegated_batch_index | int::gather_facts_delegated_batch_count | int] }} diff --git a/ansible/roles/gather-facts-delegated/tasks/gather-facts-delegated.yml b/ansible/roles/gather-facts-delegated/tasks/gather-facts-delegated.yml new file mode 100644 index 000000000..265d6d5d2 --- /dev/null +++ b/ansible/roles/gather-facts-delegated/tasks/gather-facts-delegated.yml @@ -0,0 +1,12 @@ +--- +- name: Gather facts for delegated host + any_errors_fatal: true + setup: + filter: "{{ kayobe_ansible_setup_filter }}" + gather_subset: "{{ kayobe_ansible_setup_gather_subset }}" + delegate_facts: True + delegate_to: "{{ delegated_host }}" + # NOTE: Without this, the host's ansible_host variable will not be respected + # when using delegate_to. + vars: + ansible_host: "{{ hostvars[delegated_host].ansible_host | default(delegated_host) }}" diff --git a/ansible/roles/gather-facts-delegated/tasks/main.yml b/ansible/roles/gather-facts-delegated/tasks/main.yml index 820916266..2f4ee298a 100644 --- a/ansible/roles/gather-facts-delegated/tasks/main.yml +++ b/ansible/roles/gather-facts-delegated/tasks/main.yml @@ -1,10 +1,10 @@ --- - name: Gather facts for all hosts (if using --limit) - setup: - filter: "{{ kayobe_ansible_setup_filter }}" - gather_subset: "{{ kayobe_ansible_setup_gather_subset }}" - delegate_facts: True - delegate_to: "{{ item }}" - with_items: "{{ gather_facts_delegated_delegate_hosts }}" + include_tasks: gather-facts-delegated.yml + vars: + delegated_host: "{{ gather_facts_delegated_delegate_hosts[item | int] }}" + # Loop over the index into each host's batch, so tasks are not all included serially. + with_sequence: start=0 end="{{ gather_facts_delegated_delegate_hosts | length | int - 1 }}" when: - - not hostvars[item].ansible_facts + - item | int < gather_facts_delegated_delegate_hosts | length + - not hostvars[gather_facts_delegated_delegate_hosts[item | int]].ansible_facts diff --git a/releasenotes/notes/fix-etc-hosts-management-6b33748ab37d6273.yaml b/releasenotes/notes/fix-etc-hosts-management-6b33748ab37d6273.yaml new file mode 100644 index 000000000..73102df71 --- /dev/null +++ b/releasenotes/notes/fix-etc-hosts-management-6b33748ab37d6273.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixes the bug where /etc/hosts was not populated correctly when running + Kayobe using a host limit. + `LP#2051714 `__