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-<service>-install.yml playbooks, instead of doing this inside
common-playbooks/<service>.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
This commit is contained in:
Damian Dabrowski 2023-07-11 21:00:19 +02:00
parent ea0bbd2c58
commit 60750a2796
6 changed files with 57 additions and 66 deletions

View File

@ -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 }}"

View File

@ -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 }}"

View File

@ -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 }}"

View File

@ -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:

View File

@ -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:

View File

@ -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: