Only sync glance database on major versions

Since Glance doesn't yet have rolling upgrades, nor is the tooling
idempotent, we avoid running the database operations during minor
upgrades to maintain uptime.

Major upgrades will still run the sync operations, and the database will
be synced if there is no existing database regardless of the type of
upgrade.

Change-Id: I4a4d8f23f05a16d25878340ede019be7ccdb7196
This commit is contained in:
Nolan Brubaker 2017-06-19 13:39:32 -04:00
parent eea85d2cd5
commit 647c4e33f1
2 changed files with 49 additions and 6 deletions

View File

@ -13,14 +13,43 @@
# See the License for the specific language governing permissions and
# limitations under the License.
- name: Perform a Glance DB sync
command: "{{ glance_bin }}/glance-manage db_sync"
- name: Check Glance DB version
command: "{{ glance_bin }}/glance-manage db version"
become: yes
become_user: "{{ glance_system_user_name }}"
register: db_version
changed_when: false
- name: Load glance metadata definitions
command: "{{ glance_bin }}/glance-manage db_load_metadefs {{ glance_etc_dir }}/metadefs"
# We only set to minor here if the version_compare filter passes, and we make
# sure that can't be accessed unless there's actually a '.' in the version.
# Passing in 'major' or 'testing' to version_compare causes a Jinja error.
- name: Determine whether a major or minor release was installed
set_fact:
upgrade_type: |-
{% set existing = glance_venv_tag %}
{% set upgrade_type = 'major' %}
{% if '.' in existing %}
{% set existing_major = existing.split('.')[0] %}
{% set venv_major = glance_venv_tag.split('.')[0] %}
{% if existing_major != venv_major %}
{% set upgrade_type = 'major' %}
{% elif existing | version_compare(glance_venv_tag, '!=', strict=True) %}
{% set upgrade_type = 'minor' %}
{% endif %}
{% endif %}
{{ upgrade_type }}
delegate_to: localhost
- name: Perform a Glance DB sync
command: "{{ glance_bin }}/glance-manage db sync"
changed_when: false
become: yes
become_user: "{{ glance_system_user_name }}"
when: upgrade_type == 'major' or db_version.stdout.startswith('Database is either not under migration control')
- name: Load glance metadata definitions
command: "{{ glance_bin }}/glance-manage db load_metadefs"
changed_when: false
become: yes
become_user: "{{ glance_system_user_name }}"
when: upgrade_type == 'major' or db_version.stdout.startswith('Database is either not under migration control')

View File

@ -33,6 +33,13 @@
tags:
- glance-install
- name: refresh local facts
setup:
filter: ansible_local
gather_subset: "!all"
tags:
- glance-config
- include: glance_post_install.yml
tags:
- glance-config
@ -42,12 +49,19 @@
- glance-config
- include: glance_db_setup.yml
when: inventory_hostname == groups['glance_all'][0]
run_once: true
tags:
- glance-config
- include: glance_service_setup.yml
when: inventory_hostname == groups['glance_all'][0]
run_once: true
tags:
- glance-config
- name: refresh local facts
setup:
filter: ansible_local
gather_subset: "!all"
tags:
- glance-config