diff --git a/roles/database_backup/database_backup-mysql/tasks/deploy-dump.yml b/roles/database_backup/database_backup-mysql/tasks/deploy-dump.yml index 9c11857f..3bd7e69e 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-dump.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-dump.yml @@ -4,6 +4,15 @@ - ansible.builtin.set_fact: _mysql_previous_build_database_name: "{{ database.database }}" +- name: Check if the database exists already. + ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep {{ _mysql_build_database_name }}" + register: _build_db_status + failed_when: _build_db_status.rc > 1 # only exit on abnormal errors + run_once: true + args: + executable: /bin/bash + +# Create database if this is an initial build or it doesn't exist yet - name: Create initial database. community.mysql.mysql_db: name: "{{ _mysql_build_database_name }}" @@ -11,7 +20,7 @@ login_host: "{{ _mysql_host }}" login_user: "{{ _mysql_user }}" login_password: "{{ _mysql_password }}" - when: previous_build_number == 0 + when: previous_build_number == 0 or _build_db_status.rc == 1 run_once: true - name: Ensure the dump directory exists. @@ -28,3 +37,5 @@ executable: /bin/bash when: previous_build_number > 0 run_once: true + args: + executable: /bin/bash diff --git a/roles/database_backup/database_backup-mysql/tasks/deploy-none.yml b/roles/database_backup/database_backup-mysql/tasks/deploy-none.yml index dea8fe9f..8447b3ee 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-none.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-none.yml @@ -4,6 +4,15 @@ - ansible.builtin.set_fact: _mysql_previous_build_database_name: "{{ database.database }}" +- name: Check if the database exists already. + ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep {{ _mysql_build_database_name }}" + register: _build_db_status + failed_when: _build_db_status.rc > 1 # only exit on abnormal errors + run_once: true + args: + executable: /bin/bash + +# Create database if this is an initial build or it doesn't exist yet - name: Create initial database. community.mysql.mysql_db: name: "{{ _mysql_build_database_name }}" @@ -11,5 +20,5 @@ login_host: "{{ _mysql_host }}" login_user: "{{ _mysql_user }}" login_password: "{{ _mysql_password }}" - when: previous_build_number == 0 + when: previous_build_number == 0 or _build_db_status.rc == 1 run_once: true diff --git a/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml b/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml index 5a82a644..094da9fc 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml @@ -5,7 +5,7 @@ - ansible.builtin.set_fact: _mysql_previous_build_database_name: "{{ database.database }}_{{ previous_build_number }}" -- name: Check if the new database name exists already. +- name: Check if the new database exists already. ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep {{ _mysql_build_database_name }}" register: _build_db_status failed_when: _build_db_status.rc == 0 # we want the build to fail if the database exists diff --git a/roles/database_backup/database_backup-mysql/tasks/deploy.yml b/roles/database_backup/database_backup-mysql/tasks/deploy.yml index f6d75658..67d460e9 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy.yml @@ -82,7 +82,7 @@ _mysql_build_password: "{{ lookup('password', '/dev/shm/{{ project_name }}_{{ build_type }}_{{ build_number }}') }}" when: mysql_backup.credentials_handling == 'rotate' -- name: Set database handling type. +- name: "Set database handling type to {{ mysql_backup.handling }}." ansible.builtin.set_fact: _mysql_handling: "{{ mysql_backup.handling }}" # If we have a specific instruction for handling this database differently, use it.