Files
openstack-ansible-os_nova/tasks/main.yml
Jesse Pretorius 7fc1497ebe Implement data migrations for rolling upgrades
In order to cater for artifact-based installed, and
rolling upgrades, this patch implements a set of local
facts to inform the online migrations task.

The 'nova_all_software_updated' variable will be
set by the playbook on each run to ensure that the
online migrations only happen once all venvs are
homogenous. This ensures that the playbook can be
executed in a serialised fashion and the data will
not be corrupted.

The ``upgrade_levels`` setting for ``compute`` is set
to ``auto`` to ensure that a mixed RPC version
deployment can operate properly when doing a rolling
upgrade as suggested by [1].

Additional changes are made to improve the role's
ability to be executed using serialised playbooks.

Finally, the nova-manage command references to the
config file location have been removed as they refer
to the default location.

[1] https://docs.openstack.org/developer/nova/upgrade.html
Change-Id: I08e5a7f0ce526b11aa52c35ee29c458954a5f22d
2017-07-06 06:18:21 +00:00

117 lines
3.0 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 variables for each operating system
include_vars: "{{ item }}"
with_first_found:
- "{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
- "{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
- "{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
- "{{ ansible_distribution | lower }}.yml"
- "{{ ansible_os_family | lower }}.yml"
tags:
- always
- name: Fail when virt type is unsupported
fail:
msg: "Unsupported Virt Type Provided {{ nova_supported_virt_types }}"
when:
- nova_virt_type is defined
- nova_virt_type not in nova_supported_virt_types
tags:
- always
- include: nova_virt_detect.yml
static: no
when:
- nova_virt_type is not defined
tags:
- always
- nova-config
- include: nova_pre_install.yml
tags:
- nova-install
- include: nova_install.yml
tags:
- nova-install
- name: refresh local facts
setup:
filter: ansible_local
gather_subset: "!all"
tags:
- nova-config
- include: nova_post_install.yml
tags:
- nova-config
- include: nova_db_setup.yml
static: no
when:
- "'nova_conductor' in group_names"
- "inventory_hostname == ansible_play_hosts[0]"
tags:
- nova-config
- include: "nova_init_{{ ansible_service_mgr}}.yml"
tags:
- nova-config
- include: nova_service_setup.yml
static: no
when:
- "'nova_conductor' in group_names"
- "inventory_hostname == ansible_play_hosts[0]"
tags:
- nova-config
- include: nova_placement.yml
static: no
when:
- "nova_placement_service_enabled | bool"
- "'nova_api_placement' in group_names"
tags:
- nova-placement
- include: nova_compute.yml
static: no
when:
- "'nova_compute' in group_names"
tags:
- nova-compute
- name: Flush handlers
meta: flush_handlers
# We have to delegate this back to the conductor
# because the compute hosts do not have access to
# the database connection string and therefore
# cannot run nova-manage.
# Also, we delegate this to a random host in the
# conductor group in order to spread the load of
# multiple forks across the group members.
- include: nova_db_post_setup.yml
delegate_to: "{{ conductor_host }}"
with_random_choice: "{{ groups['nova_conductor'] }}"
loop_control:
loop_var: conductor_host
when:
- "'nova_compute' in group_names"
tags:
- nova-config