diff --git a/ansible/roles/mariadb/handlers/main.yml b/ansible/roles/mariadb/handlers/main.yml index 500f489c63..c5d120615f 100644 --- a/ansible/roles/mariadb/handlers/main.yml +++ b/ansible/roles/mariadb/handlers/main.yml @@ -35,17 +35,20 @@ - name: Wait for first MariaDB service to sync WSREP become: true - command: >- - {{ kolla_container_engine }} exec {{ mariadb_service.container_name }} - mariadb -uroot -p{{ database_password }} - --silent --skip-column-names - -e 'SHOW STATUS LIKE "wsrep_local_state_comment"' - changed_when: false + kolla_toolbox: + container_engine: "{{ kolla_container_engine }}" + module_name: mysql_query + module_args: + login_db: "mysql" + login_host: "{{ api_interface_address }}" + login_port: "{{ mariadb_port }}" + login_user: "{{ database_user }}" + login_password: "{{ database_password }}" + query: 'SHOW STATUS LIKE "wsrep_local_state_comment"' register: result - until: result.stdout == "wsrep_local_state_comment\tSynced" + until: result.query_result[0][0]['Value'] == "Synced" retries: 10 delay: 6 - no_log: true listen: Bootstrap MariaDB cluster - name: Ensure MariaDB is running normally on bootstrap host diff --git a/ansible/roles/mariadb/tasks/check.yml b/ansible/roles/mariadb/tasks/check.yml index 4d246c8f86..79591ef13e 100644 --- a/ansible/roles/mariadb/tasks/check.yml +++ b/ansible/roles/mariadb/tasks/check.yml @@ -5,13 +5,18 @@ - name: Wait for MariaDB service to be ready through VIP become: true - command: > - {{ kolla_container_engine }} exec {{ mariadb_service.container_name }} - mariadb -h {{ database_address }} -P {{ database_port }} - -u {{ mariadb_shard_database_user }} -p{{ database_password }} -e 'show databases;' + kolla_toolbox: + container_engine: "{{ kolla_container_engine }}" + module_name: mysql_query + module_args: + login_db: "mysql" + login_host: "{{ api_interface_address }}" + login_port: "{{ mariadb_port }}" + login_user: "{{ database_user }}" + login_password: "{{ database_password }}" + query: "SHOW DATABASES;" register: result until: result is success changed_when: False retries: 6 delay: 10 - when: mariadb_shard_id == mariadb_default_database_shard_id diff --git a/ansible/roles/mariadb/tasks/lookup_cluster.yml b/ansible/roles/mariadb/tasks/lookup_cluster.yml index b1ed909610..a17322002d 100644 --- a/ansible/roles/mariadb/tasks/lookup_cluster.yml +++ b/ansible/roles/mariadb/tasks/lookup_cluster.yml @@ -44,22 +44,22 @@ - block: - name: Check MariaDB service WSREP sync status become: true - command: >- - {{ kolla_container_engine }} exec {{ mariadb_service.container_name }} - mariadb -uroot -p{{ database_password }} - --silent --skip-column-names - -e 'SHOW STATUS LIKE "wsrep_local_state_comment"' - changed_when: false + kolla_toolbox: + container_engine: "{{ kolla_container_engine }}" + module_name: mysql_query + module_args: + login_db: "mysql" + login_host: "{{ api_interface_address }}" + login_port: "{{ mariadb_port }}" + login_user: "{{ database_user }}" + login_password: "{{ database_password }}" + query: 'SHOW STATUS LIKE "wsrep_local_state_comment"' check_mode: false register: check_mariadb_sync_status - no_log: true - # NOTE(yoctozepto): this is extracted separately to properly escape - # the TAB character which likes to go wrong due to interaction between - # Python/Ansible/Jinja2/YAML, the way below works - name: Extract MariaDB service WSREP sync status set_fact: - mariadb_sync_status: "{{ check_mariadb_sync_status.stdout.split('\t')[1] }}" + mariadb_sync_status: "{{ check_mariadb_sync_status.query_result[0][0]['Value'] }}" when: - groups[mariadb_shard_group + '_port_alive_True'] is defined - inventory_hostname in groups[mariadb_shard_group + '_port_alive_True'] diff --git a/ansible/roles/mariadb/tasks/recover_cluster.yml b/ansible/roles/mariadb/tasks/recover_cluster.yml index 5046e9b01e..11e4b8333e 100644 --- a/ansible/roles/mariadb/tasks/recover_cluster.yml +++ b/ansible/roles/mariadb/tasks/recover_cluster.yml @@ -154,17 +154,20 @@ - name: Wait for MariaDB to become operational become: true - command: >- - {{ kolla_container_engine }} exec {{ mariadb_service.container_name }} - mariadb -uroot -p{{ database_password }} - --silent --skip-column-names - -e 'SHOW STATUS LIKE "wsrep_evs_state"' - changed_when: false + kolla_toolbox: + container_engine: "{{ kolla_container_engine }}" + module_name: mysql_query + module_args: + login_db: "mysql" + login_host: "{{ api_interface_address }}" + login_port: "{{ mariadb_port }}" + login_user: "{{ database_user }}" + login_password: "{{ database_password }}" + query: 'SHOW STATUS LIKE "wsrep_evs_state"' register: result - until: '"OPERATIONAL" in result.stdout' + until: result.query_result[0][0]['Value'] == "OPERATIONAL" retries: 10 delay: 6 - no_log: true when: - bootstrap_host is defined - bootstrap_host == inventory_hostname diff --git a/ansible/roles/mariadb/tasks/restart_services.yml b/ansible/roles/mariadb/tasks/restart_services.yml index 2e82923929..e864c3fa4b 100644 --- a/ansible/roles/mariadb/tasks/restart_services.yml +++ b/ansible/roles/mariadb/tasks/restart_services.yml @@ -30,18 +30,20 @@ - name: Wait for MariaDB service to sync WSREP become: true - command: >- - {{ kolla_container_engine }} exec {{ mariadb_service.container_name }} - mariadb -uroot -p{{ database_password }} - -h {{ api_interface_address }} -P {{ mariadb_port }} - --silent --skip-column-names - -e 'SHOW STATUS LIKE "wsrep_local_state_comment"' - changed_when: false + kolla_toolbox: + container_engine: "{{ kolla_container_engine }}" + module_name: mysql_query + module_args: + login_db: "mysql" + login_host: "{{ api_interface_address }}" + login_port: "{{ mariadb_port }}" + login_user: "{{ database_user }}" + login_password: "{{ database_password }}" + query: 'SHOW STATUS LIKE "wsrep_local_state_comment"' register: result - until: result.stdout == "wsrep_local_state_comment\tSynced" + until: result.query_result[0][0]['Value'] == "Synced" retries: 10 delay: 6 - no_log: true check_mode: false when: # NOTE(yoctozepto): we don't want to wait for new nodes to fully sync