openstack-ansible/playbooks/os-nova-install.yml
Damian Dabrowski 60750a2796 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
2023-07-11 21:00:19 +02:00

59 lines
1.9 KiB
YAML

---
# Copyright 2014, Rackspace US, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# 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:
service_group:
- nova_api_os_compute
- nova_api_metadata
- nova_console
- nova_ironic_console
service_variable: "nova_haproxy_services"
when: groups['nova_all'] | length > 0
tags:
- haproxy-service-config
- name: Install nova-conductor services
import_playbook: common-playbooks/nova.yml
vars:
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:
nova_hosts: "nova_compute:!nova_conductor:!nova_scheduler:!nova_api_os_compute:!nova_api_metadata:!nova_console"
nova_serial: "{{ nova_compute_serial | default('100%') }}"