openstack-ansible-os_keystone/tasks/keystone_db_sync.yml
Mohammed Naser 4ea410ffcd db_setup: refactor database setup to a common file
This patch refactors the database creation to db_setup.yml which
will eventually be managed by openstack-ansible-tests.

This also re-orders the mq_setup to be done earlier so these system
level dependencies are ready before service activation.

We have been using run_once only for keystone role. As we have a
keystone group in the inventory, we re replacing run_once for the
conditionals to match the pattern across all the other roles.

Change-Id: Idb5ea861a87fe077f7c716f1157acd8e39257c5b
2019-06-27 12:36:50 +00:00

99 lines
3.3 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: Check current state of Keystone DB
command: "{{ keystone_bin }}/keystone-manage db_sync --check"
become: yes
become_user: "{{ keystone_system_user_name }}"
register: keystone_db_sync_check
failed_when: "keystone_db_sync_check.rc == 1"
changed_when: "keystone_db_sync_check.rc not in [2, 3, 4]"
run_once: yes
- name: Set the db sync local facts
ini_file:
dest: "/etc/ansible/facts.d/openstack_ansible.fact"
section: keystone
option: "{{ item.name }}"
value: "{{ item.state }}"
with_items:
- name: "need_db_expand"
state: "{{ (keystone_db_sync_check.rc | int == 2) | bool }}"
- name: "need_db_migrate"
state: "{{ (keystone_db_sync_check.rc | int in [2, 3] ) | bool }}"
- name: "need_db_contract"
state: "{{ (keystone_db_sync_check.rc | int in [2, 3, 4]) | bool }}"
- name: Refresh local facts
setup:
filter: ansible_local
gather_subset: "!all"
tags:
- keystone-config
# When keystone is initially built, the service does not yet exist on the
# host this task is executed on. Detect the presence of the services.
- name: Test if keystone service exists
service:
name: "{{ item }}"
check_mode: yes
register: keystone_service_exists
with_items: "{{ keystone_services.keys() | list }}"
- name: Ensure keystone service is stopped
service:
name: "{{ item.name }}"
state: stopped
register: _stop
until: _stop is success
retries: 5
delay: 2
with_items: "{{ keystone_service_exists.results }}"
when:
- "(ansible_local['openstack_ansible']['keystone']['need_db_expand'] | bool) or
(ansible_local['openstack_ansible']['keystone']['need_db_migrate'] | bool)"
- "(item.status['LoadState'] == 'loaded' | bool)"
notify:
- Manage LB
- Restart uWSGI
- name: Perform a Keystone DB sync expand
command: "{{ keystone_bin }}/keystone-manage db_sync --expand"
become: yes
become_user: "{{ keystone_system_user_name }}"
when:
- "ansible_local['openstack_ansible']['keystone']['need_db_expand'] | bool"
run_once: yes
notify: flush cache
- name: Perform a Keystone DB sync migrate
command: "{{ keystone_bin }}/keystone-manage db_sync --migrate"
become: yes
become_user: "{{ keystone_system_user_name }}"
when:
- "ansible_local['openstack_ansible']['keystone']['need_db_migrate'] | bool"
run_once: yes
notify: flush cache
- name: Perform a Keystone DB sync contract
command: "{{ keystone_bin }}/keystone-manage db_sync --contract"
become: yes
become_user: "{{ keystone_system_user_name }}"
when:
- "(keystone_all_software_updated | default('no')) | bool"
- "ansible_local['openstack_ansible']['keystone']['need_db_contract'] | bool"
run_once: yes
notify: flush cache