5e23c765b3
Based on conversation on an ansible issue[1], I implemented a LB orchestration role[2] similar to the POC here[3]. This will allow external loadbalancer management roles to hook into a universal notify listener "Manage LB" to perform before/ after endpoint management actions when the service is being restarted. [1]: https://github.com/ansible/ansible/issues/27813 [2]: https://github.com/Logan2211/ansible-haproxy-endpoints [3]: https://github.com/Logan2211/tmp-ansible-27813 Change-Id: Ide9efbc79e4fd2c761a3ee4f463f501181da1df2
94 lines
3.2 KiB
YAML
94 lines
3.2 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. We therefore use failed_when for the task
|
|
# to catch a failure that's outside the norm.
|
|
- name: Ensure keystone service is stopped
|
|
service:
|
|
name: "{{ item }}"
|
|
state: stopped
|
|
register: _stop
|
|
until: _stop | success
|
|
retries: 5
|
|
delay: 2
|
|
with_items: "{{ keystone_wsgi_program_names }}"
|
|
when:
|
|
- "(ansible_local['openstack_ansible']['keystone']['need_db_expand'] | bool) or
|
|
(ansible_local['openstack_ansible']['keystone']['need_db_migrate'] | bool)"
|
|
failed_when:
|
|
- "_stop.msg is defined"
|
|
- "'no service or tool' not in _stop.msg"
|
|
- "'systemd could not find' not in _stop.msg"
|
|
- "'Could not find the requested service' not in _stop.msg"
|
|
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
|
|
|
|
- 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
|
|
|
|
- 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
|