
In some cases when delegated hosts are used with connection plugins and variables are used in the ansible_host var, they can be resolved using the wrong node (the source of the delegated task, rather than the target of the delegated task), causing the connection plugin to run all of the mysql restarts on the same host, rather than delegating to the correct ansible_host. This minor fix improves compatibility in these situations so that ansible_host is set to the correct host, causing the task to run against the correct node. Depends-On: https://review.opendev.org/687142 Change-Id: I082f4920cc8366e3b1309c952a5104d3d63215e5
102 lines
3.1 KiB
YAML
102 lines
3.1 KiB
YAML
---
|
|
# Copyright 2015, 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: Reload the systemd daemon
|
|
systemd:
|
|
daemon_reload: yes
|
|
name: "{{ galera_mariadb_service_name }}"
|
|
enabled: "yes"
|
|
|
|
- name: Check node status
|
|
command: >
|
|
mysql --silent --skip-column-names --connect-timeout=10 -e 'SHOW STATUS LIKE "wsrep_local_state";'
|
|
failed_when: false
|
|
changed_when: true
|
|
register: node_status
|
|
listen: Restart all mysql
|
|
notify:
|
|
- Bootstrap cluster
|
|
- Restart mysql (All)
|
|
|
|
- name: Check if node is in the cluster
|
|
command: >
|
|
mysql --silent --skip-column-names --connect-timeout=10 -e 'SHOW STATUS LIKE "wsrep_incoming_addresses";'
|
|
failed_when: false
|
|
changed_when: false
|
|
register: incoming_addresses
|
|
listen: Bootstrap cluster
|
|
|
|
- name: Set incoming addresses fact (primary)
|
|
set_fact:
|
|
galera_incoming_addresses: "{{ (incoming_addresses.stdout.split()[-1] | default('')).split(',') }}"
|
|
listen: Bootstrap cluster
|
|
|
|
- name: Set node status fact
|
|
set_fact:
|
|
galera_cluster_ready: "{{ (galera_wsrep_address_port in galera_incoming_addresses) or ((node_status.stdout.split()[-1] | default(false)) in ['2', '4']) }}"
|
|
listen: Bootstrap cluster
|
|
|
|
- name: Stop mysql
|
|
service:
|
|
name: mysql
|
|
state: stopped
|
|
changed_when: true
|
|
listen: Bootstrap cluster
|
|
when:
|
|
- not galera_cluster_ready | bool
|
|
|
|
- name: Start new cluster
|
|
command: /usr/local/bin/galera_new_cluster
|
|
failed_when: not start_new_cluster.rc in [0, 3]
|
|
changed_when: start_new_cluster.rc == 3
|
|
register: start_new_cluster
|
|
delegate_to: "{{ galera_server_bootstrap_node }}"
|
|
vars:
|
|
ansible_host: "{{ hostvars[galera_server_bootstrap_node]['ansible_host'] }}"
|
|
run_once: true
|
|
when:
|
|
- not galera_cluster_ready | bool
|
|
listen: Bootstrap cluster
|
|
|
|
- name: Restart mysql (All)
|
|
service:
|
|
name: "{{ galera_mariadb_service_name }}"
|
|
state: "{{ (not hostvars[item]['galera_cluster_ready'] | bool) | ternary('started', 'restarted') }}"
|
|
environment:
|
|
MYSQLD_STARTUP_TIMEOUT: 180
|
|
register: galera_restart
|
|
until: galera_restart is success
|
|
retries: 6
|
|
delay: 5
|
|
delegate_to: "{{ item }}"
|
|
vars:
|
|
ansible_host: "{{ hostvars[item]['ansible_host'] }}"
|
|
when:
|
|
- hostvars[item]['galera_cluster_ready'] is defined
|
|
- hostvars[item]['galera_deployed'] | default(false) | bool
|
|
with_items:
|
|
- "{{ ansible_play_hosts }}"
|
|
run_once: true
|
|
|
|
- meta: noop
|
|
listen: Manage LB
|
|
when: false
|
|
|
|
- name: Restart xinetd
|
|
service:
|
|
name: xinetd
|
|
state: "{{ (galera_monitoring_check_enabled | bool) | ternary('restarted', 'stopped') }}"
|
|
enabled: "{{ galera_monitoring_check_enabled | bool }}"
|