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
117 lines
3.0 KiB
YAML
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
|