From 60750a279637b6a0b955efb02de1e1a1a9514ce8 Mon Sep 17 00:00:00 2001 From: Damian Dabrowski Date: Tue, 11 Jul 2023 21:00:19 +0200 Subject: [PATCH] Gather facts before including common-playbooks For nova, neutron and cinder, haproxy service is configured before playbooks from common-playbooks/ are included(and facts for these hosts are gathered). Eventually, haproxy config tasks are executed without common facts. It may lead to several corner cases. For example, after facts cache expires and user runs os-nova-install.yml, haproxy config('Create haproxy service config files' task) will fail because `haproxy_service_configs` uses `nova_console_type` variable which needs `ansible_facts['architecture']`. It can be easily reproduced with: ``` rm -rf /etc/openstack_deploy/ansible_facts/ && \ openstack-ansible /opt/openstack-ansible/playbooks/os-nova-install.yml ``` As a solution, this change gathers facts at the beginning of os--install.yml playbooks, instead of doing this inside common-playbooks/.yml. This bug was not detected by CI because during deployment process, hardware facts are gathered for all hosts (at least) by security-hardening.yml. As long as they exists in cache everything works fine. Change-Id: I27073a1bf85294ff65bde24cae939f28f5c69bd7 --- playbooks/common-playbooks/cinder.yml | 19 ------------------- playbooks/common-playbooks/neutron.yml | 19 ------------------- playbooks/common-playbooks/nova.yml | 19 ------------------- playbooks/os-cinder-install.yml | 23 +++++++++++++++++++---- playbooks/os-neutron-install.yml | 23 +++++++++++++++++++---- playbooks/os-nova-install.yml | 20 +++++++++++++++++++- 6 files changed, 57 insertions(+), 66 deletions(-) diff --git a/playbooks/common-playbooks/cinder.yml b/playbooks/common-playbooks/cinder.yml index c26aaf53b8..7b0421ec75 100644 --- a/playbooks/common-playbooks/cinder.yml +++ b/playbooks/common-playbooks/cinder.yml @@ -13,25 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -- name: Gather cinder facts - hosts: "{{ cinder_hosts }}" - gather_facts: false - tags: - - always - tasks: - - name: Gather minimal facts for cinder - setup: - gather_subset: - - "!all" - - min - when: osa_gather_facts | default(True) - - - name: Gather additional facts for cinder - setup: - gather_subset: "{{ cinder_gather_subset | default('processor_count') }}" - filter: "{{ cinder_gather_filter | default('ansible_processor*') }}" - when: osa_gather_facts | default(True) - - name: Install cinder services hosts: "{{ cinder_hosts }}" serial: "{{ cinder_serial }}" diff --git a/playbooks/common-playbooks/neutron.yml b/playbooks/common-playbooks/neutron.yml index 5627fd3de2..2f5ea75d15 100644 --- a/playbooks/common-playbooks/neutron.yml +++ b/playbooks/common-playbooks/neutron.yml @@ -13,25 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -- name: Gather neutron facts - hosts: "{{ neutron_hosts }}" - gather_facts: false - tags: - - always - tasks: - - name: Gather minimal facts for neutron - setup: - gather_subset: - - "!all" - - min - when: osa_gather_facts | default(True) - - - name: Gather additional facts for neutron - setup: - gather_subset: "{{ neutron_gather_subset | default('processor_count') }}" - filter: "{{ neutron_gather_filter | default('ansible_processor*') }}" - when: osa_gather_facts | default(True) - - name: Install neutron services hosts: "{{ neutron_hosts }}" serial: "{{ neutron_serial }}" diff --git a/playbooks/common-playbooks/nova.yml b/playbooks/common-playbooks/nova.yml index f12ccc7b1f..dad2f529b0 100644 --- a/playbooks/common-playbooks/nova.yml +++ b/playbooks/common-playbooks/nova.yml @@ -13,25 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -- name: Gather nova facts - hosts: "{{ nova_hosts }}" - gather_facts: false - tags: - - always - tasks: - - name: Gather minimal facts for nova - setup: - gather_subset: - - "!all" - - min - when: osa_gather_facts | default(True) - - - name: Gather additional facts for nova - setup: - gather_subset: "{{ nova_gather_subset | default('processor_count') }}" - filter: "{{ nova_gather_filter | default('ansible_processor*') }}" - when: osa_gather_facts | default(True) - - name: Install nova services hosts: "{{ nova_hosts }}" serial: "{{ nova_serial }}" diff --git a/playbooks/os-cinder-install.yml b/playbooks/os-cinder-install.yml index 2ab2b9d07b..a9270a2947 100644 --- a/playbooks/os-cinder-install.yml +++ b/playbooks/os-cinder-install.yml @@ -13,22 +13,37 @@ # See the License for the specific language governing permissions and # limitations under the License. +- name: Gather cinder facts + hosts: cinder_all + gather_facts: false + tags: + - always + tasks: + - name: Gather minimal facts for cinder + setup: + gather_subset: + - "!all" + - min + when: osa_gather_facts | default(True) + + - name: Gather additional facts for cinder + setup: + gather_subset: "{{ cinder_gather_subset | default('processor_count') }}" + filter: "{{ cinder_gather_filter | default('ansible_processor*') }}" + when: osa_gather_facts | default(True) + - name: Install cinder scheduler services import_playbook: common-playbooks/cinder.yml vars: cinder_hosts: "cinder_scheduler:!cinder_api" cinder_serial: "{{ cinder_scheduler_serial | default(['1', '100%']) }}" - - - name: Install cinder volume services import_playbook: common-playbooks/cinder.yml vars: cinder_hosts: "cinder_volume:!cinder_scheduler:!cinder_api" cinder_serial: "{{ cinder_backend_serial | default(['1', '100%']) }}" - - - name: Install cinder backup services import_playbook: common-playbooks/cinder.yml vars: diff --git a/playbooks/os-neutron-install.yml b/playbooks/os-neutron-install.yml index fd394ad92e..b80f686f09 100644 --- a/playbooks/os-neutron-install.yml +++ b/playbooks/os-neutron-install.yml @@ -13,6 +13,25 @@ # See the License for the specific language governing permissions and # limitations under the License. +- name: Gather neutron facts + hosts: neutron_all + gather_facts: false + tags: + - always + tasks: + - name: Gather minimal facts for neutron + setup: + gather_subset: + - "!all" + - min + when: osa_gather_facts | default(True) + + - name: Gather additional facts for neutron + setup: + gather_subset: "{{ neutron_gather_subset | default('processor_count') }}" + filter: "{{ neutron_gather_filter | default('ansible_processor*') }}" + when: osa_gather_facts | default(True) + - name: Configure Neutron dynamic host groupings hosts: localhost gather_facts: no @@ -40,16 +59,12 @@ neutron_hosts: "neutron_server" neutron_serial: "{{ neutron_server_serial | default(['1', '100%']) }}" - - - name: Install neutron L2 agents import_playbook: common-playbooks/neutron.yml vars: neutron_hosts: "neutron_linuxbridge_agent:neutron_openvswitch_agent:!neutron_server" neutron_serial: "{{ neutron_agent_serial | default('50%') }}" - - - name: Install all other neutron agents import_playbook: common-playbooks/neutron.yml vars: diff --git a/playbooks/os-nova-install.yml b/playbooks/os-nova-install.yml index 4e3f25fd08..4dcd60ccc6 100644 --- a/playbooks/os-nova-install.yml +++ b/playbooks/os-nova-install.yml @@ -13,6 +13,25 @@ # See the License for the specific language governing permissions and # limitations under the License. +- name: Gather nova facts + hosts: nova_all + gather_facts: false + tags: + - always + tasks: + - name: Gather minimal facts for nova + setup: + gather_subset: + - "!all" + - min + when: osa_gather_facts | default(True) + + - name: Gather additional facts for nova + setup: + gather_subset: "{{ nova_gather_subset | default('processor_count') }}" + filter: "{{ nova_gather_filter | default('ansible_processor*') }}" + when: osa_gather_facts | default(True) + - name: "Config haproxy service" import_playbook: common-playbooks/haproxy-service-config.yml vars: @@ -32,7 +51,6 @@ nova_hosts: "nova_conductor:nova_scheduler:nova_api_os_compute:nova_api_metadata:nova_console" nova_serial: "{{ nova_conductor_serial | default(['1', '100%']) }}" - - name: Install nova compute import_playbook: common-playbooks/nova.yml vars: