Files
openstack-ansible-os_nova/tasks/nova_db_setup.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

75 lines
2.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: Get the api_db version
command: "{{ nova_bin }}/nova-manage api_db version"
become: yes
become_user: "{{ nova_system_user_name }}"
register: nova_api_db_version
changed_when: false
- name: Perform a Nova API DB sync
command: "{{ nova_bin }}/nova-manage api_db sync"
become: yes
become_user: "{{ nova_system_user_name }}"
changed_when: false
when:
- nova_api_db_version.stdout == "0"
- name: Perform cell_v2 map cell0
command: "{{ nova_bin }}/nova-manage cell_v2 map_cell0 --database_connection mysql+pymysql://{{ nova_api_galera_user }}:{{ nova_api_container_mysql_password }}@{{ nova_api_galera_address }}/{{ nova_cell0_database }}?charset=utf8"
become: yes
become_user: "{{ nova_system_user_name }}"
changed_when: false
- name: Perform cell_v2 initial cell setup
command: "{{ nova_bin }}/nova-manage cell_v2 create_cell --name {{ nova_cell1_name }} --database_connection mysql+pymysql://{{ nova_galera_user }}:{{ nova_container_mysql_password }}@{{ nova_galera_address }}/{{ nova_galera_database }}?charset=utf8 --transport-url rabbit://{% for host in nova_rabbitmq_servers.split(',') %}{{ nova_rabbitmq_userid }}:{{ nova_rabbitmq_password }}@{{ host }}:{{ nova_rabbitmq_port }}{% if not loop.last %},{% else %}/{{ nova_rabbitmq_vhost }}{% endif %}{% endfor %}"
become: yes
become_user: "{{ nova_system_user_name }}"
register: nova_cell1_create
failed_when: "nova_cell1_create.rc not in [0, 2]"
changed_when: "nova_cell1_create.rc == 0"
- name: Perform a Nova API DB sync
command: "{{ nova_bin }}/nova-manage api_db sync"
become: yes
become_user: "{{ nova_system_user_name }}"
changed_when: false
- name: Perform a Nova DB sync
command: "{{ nova_bin }}/nova-manage db sync"
become: yes
become_user: "{{ nova_system_user_name }}"
changed_when: false
- name: Perform online data migrations
command: "{{ nova_bin }}/nova-manage db online_data_migrations"
become: yes
become_user: "{{ nova_system_user_name }}"
when:
- "(nova_all_software_updated | default('no')) | bool"
- "ansible_local['openstack_ansible']['nova']['need_online_data_migrations'] | bool"
changed_when: false
register: data_migrations
- name: Disable the online migrations requirement
ini_file:
dest: "/etc/ansible/facts.d/openstack_ansible.fact"
section: nova
option: need_online_data_migrations
value: False
when:
- data_migrations | succeeded