From b232f7d4786dfd1f90cf99eafa889a713817c8f9 Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 12:42:42 +0200 Subject: [PATCH 01/12] Improving db handling and fixing adding databases later. --- .../tasks/deploy-rolling.yml | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) 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 aec45596..0bd2e2f0 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml @@ -4,26 +4,33 @@ _mysql_build_database_name: "{{ database.database }}_{{ build_number }}" - ansible.builtin.set_fact: _mysql_previous_build_database_name: "{{ database.database }}_{{ previous_build_number }}" - # Note: we don't use the mysql_db Ansible module on purpose. - # If database already exists, we want to fail and not override it - # with previous build. - # @TODO fix this so we check if the database exists and exit with - # the proper plugin instead of using command. -- name: Create new database. - ansible.builtin.command: mysql --defaults-extra-file={{ database.credentials_file }} -e "CREATE DATABASE `{{ _mysql_build_database_name }}`;" + +- name: Check if the new database name 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 + run_once: true + +- name: Create a new database. + community.mysql.mysql_db: + name: "{{ _mysql_build_database_name }}" + state: present + config_file: "{{ database.credentials_file }}" + config_overrides_defaults: true run_once: true -#- name: Create a new database. -# community.mysql.mysql_db: -# name: "{{ _mysql_build_database_name }}" -# state: present -# config_file: "{{ database.credentials_file }}" -# config_overrides_defaults: true -# run_once: true +- name: Check if the previous database exists. + ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep {{ _mysql_previous_build_database_name }}" + register: _previous_db_status + failed_when: _previous_db_status.rc > 1 # only fail if we get an unexpected exitcode + run_once: true +# Importing with shell for speed, we cannot import with mysql_db unless we create a dump file first - name: Populate new database. ansible.builtin.shell: "set -o pipefail && mysqldump --defaults-extra-file={{ database.credentials_file }} {{ mysql_backup.mysqldump_params }} {{ _mysql_previous_build_database_name }} | mysql --defaults-extra-file={{ database.credentials_file }} {{ _mysql_build_database_name }}" args: executable: /bin/bash - when: previous_build_number > 0 + when: + - previous_build_number > 0 + - _previous_db_status.rc == 0 # only run if we have a database run_once: true From 650d6095d4e4dab0639d6580cd139a69a2a113c5 Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 12:48:02 +0200 Subject: [PATCH 02/12] Bad spacing caught by linter. --- .../database_backup-mysql/tasks/deploy-rolling.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 0bd2e2f0..c05f3006 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml @@ -6,9 +6,9 @@ _mysql_previous_build_database_name: "{{ database.database }}_{{ previous_build_number }}" - name: Check if the new database name 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 + 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 run_once: true - name: Create a new database. @@ -20,9 +20,9 @@ run_once: true - name: Check if the previous database exists. - ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep {{ _mysql_previous_build_database_name }}" - register: _previous_db_status - failed_when: _previous_db_status.rc > 1 # only fail if we get an unexpected exitcode + ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep {{ _mysql_previous_build_database_name }}" + register: _previous_db_status + failed_when: _previous_db_status.rc > 1 # only fail if we get an unexpected exitcode run_once: true # Importing with shell for speed, we cannot import with mysql_db unless we create a dump file first From a2ae8b76913f4154a84df0fb744e4a4341a4ed07 Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 13:14:38 +0200 Subject: [PATCH 03/12] Making an explicit debug entry if we skip database population. --- .../database_backup-mysql/tasks/deploy-rolling.yml | 8 ++++++++ 1 file changed, 8 insertions(+) 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 c05f3006..eee94844 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml @@ -34,3 +34,11 @@ - previous_build_number > 0 - _previous_db_status.rc == 0 # only run if we have a database run_once: true + +# Making it clear if we skipped the population of the new database +- name: Populating database skipped. + ansible.builtin.debug: "### Attention - the new database was NOT populated!" + when: + - previous_build_number > 0 + - _previous_db_status.rc != 0 + run_once: true From c3ca5a9d6310aa0131bd2d5882d14fcc5b3a04e3 Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 13:14:58 +0200 Subject: [PATCH 04/12] Allowing override of 'handling' on a database-by-database basis. --- docs/roles/database_backup/database_backup-mysql.md | 1 + roles/database_backup/database_backup-mysql/README.md | 1 + .../database_backup-mysql/defaults/main.yml | 1 + .../database_backup-mysql/tasks/deploy.yml | 10 +++++++++- 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/roles/database_backup/database_backup-mysql.md b/docs/roles/database_backup/database_backup-mysql.md index c52620f6..3a7ec471 100644 --- a/docs/roles/database_backup/database_backup-mysql.md +++ b/docs/roles/database_backup/database_backup-mysql.md @@ -25,6 +25,7 @@ mysql_backup: - database: "{{ (project_name + '_' + build_type) | regex_replace('-', '_') }}" # avoid hyphens in MySQL database names user: "{{ (project_name + '_' + build_type) | truncate(32, true, '', 0) }}" # 32 char limit credentials_file: "/home/{{ deploy_user }}/.mysql.creds" + #handling: static # optional override to the main handling method on a per database basis ``` diff --git a/roles/database_backup/database_backup-mysql/README.md b/roles/database_backup/database_backup-mysql/README.md index c52620f6..3a7ec471 100644 --- a/roles/database_backup/database_backup-mysql/README.md +++ b/roles/database_backup/database_backup-mysql/README.md @@ -25,6 +25,7 @@ mysql_backup: - database: "{{ (project_name + '_' + build_type) | regex_replace('-', '_') }}" # avoid hyphens in MySQL database names user: "{{ (project_name + '_' + build_type) | truncate(32, true, '', 0) }}" # 32 char limit credentials_file: "/home/{{ deploy_user }}/.mysql.creds" + #handling: static # optional override to the main handling method on a per database basis ``` diff --git a/roles/database_backup/database_backup-mysql/defaults/main.yml b/roles/database_backup/database_backup-mysql/defaults/main.yml index 1cbc2e11..777cc6f9 100644 --- a/roles/database_backup/database_backup-mysql/defaults/main.yml +++ b/roles/database_backup/database_backup-mysql/defaults/main.yml @@ -20,3 +20,4 @@ mysql_backup: - database: "{{ (project_name + '_' + build_type) | regex_replace('-', '_') }}" # avoid hyphens in MySQL database names user: "{{ (project_name + '_' + build_type) | truncate(32, true, '', 0) }}" # 32 char limit credentials_file: "/home/{{ deploy_user }}/.mysql.creds" + #handling: static # optional override to the main handling method on a per database basis diff --git a/roles/database_backup/database_backup-mysql/tasks/deploy.yml b/roles/database_backup/database_backup-mysql/tasks/deploy.yml index 4160806c..6e60a96d 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy.yml @@ -82,7 +82,15 @@ _mysql_build_password: "{{ lookup('password', '/dev/shm/{{ project_name }}_{{ build_type }}_{{ build_number }}') }}" when: mysql_backup.credentials_handling == 'rotate' -- ansible.builtin.include_tasks: "deploy-{{ mysql_backup.handling }}.yml" +- ansible.builtin.set_fact: + _mysql_handling: "{{ mysql_backup.handling }}" +# If we have a specific instruction for handling this database differently, use it. +- ansible.builtin.set_fact: + _mysql_handling: "{{ mysql_backup.database.handling }}" + when: + - mysql_backup.database.handling is defined + - mysql_backup.database.handling | length > 0 +- ansible.builtin.include_tasks: "deploy-{{ _mysql_handling }}.yml" # We append privileges instead of replacing, # to allow this role to be looped over, From c26cf092f2fde545b4067c2df994ae517cdfa535 Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 13:18:10 +0200 Subject: [PATCH 05/12] Tab spacing errors caught by linter. --- .../database_backup-mysql/tasks/deploy-rolling.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 eee94844..6a264be1 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml @@ -7,8 +7,8 @@ - name: Check if the new database name 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 + register: _build_db_status + failed_when: _build_db_status.rc == 0 # we want the build to fail if the database exists run_once: true - name: Create a new database. @@ -21,8 +21,8 @@ - name: Check if the previous database exists. ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep {{ _mysql_previous_build_database_name }}" - register: _previous_db_status - failed_when: _previous_db_status.rc > 1 # only fail if we get an unexpected exitcode + register: _previous_db_status + failed_when: _previous_db_status.rc > 1 # only fail if we get an unexpected exitcode run_once: true # Importing with shell for speed, we cannot import with mysql_db unless we create a dump file first From 4f63c79ede631af00d5d6d1a1212895d1a392c2a Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 14:03:09 +0200 Subject: [PATCH 06/12] Syntax error in my debug. --- .../database_backup-mysql/tasks/deploy-rolling.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 6a264be1..d5d9f941 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml @@ -37,7 +37,8 @@ # Making it clear if we skipped the population of the new database - name: Populating database skipped. - ansible.builtin.debug: "### Attention - the new database was NOT populated!" + ansible.builtin.debug: + msg: "### Attention - the new database was NOT populated!" when: - previous_build_number > 0 - _previous_db_status.rc != 0 From 40fefb77c92fed46061d84a702f2b5c42451f661 Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 14:04:56 +0200 Subject: [PATCH 07/12] Being more verbose in task naming. --- .../database_backup-mysql/tasks/deploy.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/roles/database_backup/database_backup-mysql/tasks/deploy.yml b/roles/database_backup/database_backup-mysql/tasks/deploy.yml index 6e60a96d..f6d75658 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy.yml @@ -82,15 +82,18 @@ _mysql_build_password: "{{ lookup('password', '/dev/shm/{{ project_name }}_{{ build_type }}_{{ build_number }}') }}" when: mysql_backup.credentials_handling == 'rotate' -- ansible.builtin.set_fact: +- name: Set database handling type. + ansible.builtin.set_fact: _mysql_handling: "{{ mysql_backup.handling }}" # If we have a specific instruction for handling this database differently, use it. -- ansible.builtin.set_fact: +- name: Override database handling type for this database, if specified. + ansible.builtin.set_fact: _mysql_handling: "{{ mysql_backup.database.handling }}" when: - mysql_backup.database.handling is defined - mysql_backup.database.handling | length > 0 -- ansible.builtin.include_tasks: "deploy-{{ _mysql_handling }}.yml" +- name: Execute backup tasks. + ansible.builtin.include_tasks: "deploy-{{ _mysql_handling }}.yml" # We append privileges instead of replacing, # to allow this role to be looped over, From 520cee905f37fb01de2759894559e06b5e526edb Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 14:46:27 +0200 Subject: [PATCH 08/12] Enforcing bash as the interpretor for shell. --- .../database_backup-mysql/tasks/deploy-rolling.yml | 4 ++++ 1 file changed, 4 insertions(+) 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 d5d9f941..5a82a644 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml @@ -10,6 +10,8 @@ register: _build_db_status failed_when: _build_db_status.rc == 0 # we want the build to fail if the database exists run_once: true + args: + executable: /bin/bash - name: Create a new database. community.mysql.mysql_db: @@ -24,6 +26,8 @@ register: _previous_db_status failed_when: _previous_db_status.rc > 1 # only fail if we get an unexpected exitcode run_once: true + args: + executable: /bin/bash # Importing with shell for speed, we cannot import with mysql_db unless we create a dump file first - name: Populate new database. From 2701d407f98069909f66de2ccf8d204e0b7756db Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 15:06:49 +0200 Subject: [PATCH 09/12] Adding new database handling to dump and none types. --- .../database_backup-mysql/tasks/deploy-dump.yml | 13 ++++++++++++- .../database_backup-mysql/tasks/deploy-none.yml | 11 ++++++++++- .../database_backup-mysql/tasks/deploy-rolling.yml | 2 +- .../database_backup-mysql/tasks/deploy.yml | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) 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. From d977f0f6ed7bbcb87cb065354bb18c84df68c5ef Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 15:10:21 +0200 Subject: [PATCH 10/12] Accidentally doubled the args key on a task. --- .../database_backup/database_backup-mysql/tasks/deploy-dump.yml | 2 -- 1 file changed, 2 deletions(-) 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 3bd7e69e..c07a922f 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-dump.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-dump.yml @@ -37,5 +37,3 @@ executable: /bin/bash when: previous_build_number > 0 run_once: true - args: - executable: /bin/bash From 198c2cd3f40922713d60cd42d0a0e8d4c005906e Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 15:26:22 +0200 Subject: [PATCH 11/12] Variable naming error. --- .../database_backup/database_backup-mysql/tasks/deploy.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/roles/database_backup/database_backup-mysql/tasks/deploy.yml b/roles/database_backup/database_backup-mysql/tasks/deploy.yml index 67d460e9..4304c3e4 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy.yml @@ -88,10 +88,10 @@ # If we have a specific instruction for handling this database differently, use it. - name: Override database handling type for this database, if specified. ansible.builtin.set_fact: - _mysql_handling: "{{ mysql_backup.database.handling }}" + _mysql_handling: "{{ database.handling }}" when: - - mysql_backup.database.handling is defined - - mysql_backup.database.handling | length > 0 + - database.handling is defined + - database.handling | length > 0 - name: Execute backup tasks. ansible.builtin.include_tasks: "deploy-{{ _mysql_handling }}.yml" From ef2c456a7c14d5bc4c0c3ea7325e601d8cb7ab83 Mon Sep 17 00:00:00 2001 From: gregharvey Date: Fri, 22 Sep 2023 15:34:24 +0200 Subject: [PATCH 12/12] Add -w flag to grep to match only the whole database name when checking for db existence. --- .../database_backup-mysql/tasks/deploy-dump.yml | 2 +- .../database_backup-mysql/tasks/deploy-none.yml | 2 +- .../database_backup-mysql/tasks/deploy-rolling.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) 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 c07a922f..49bda27e 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-dump.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-dump.yml @@ -5,7 +5,7 @@ _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 }}" + ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep -w {{ _mysql_build_database_name }}" register: _build_db_status failed_when: _build_db_status.rc > 1 # only exit on abnormal errors run_once: true 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 8447b3ee..4c4b1624 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-none.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-none.yml @@ -5,7 +5,7 @@ _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 }}" + ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep -w {{ _mysql_build_database_name }}" register: _build_db_status failed_when: _build_db_status.rc > 1 # only exit on abnormal errors 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 094da9fc..30fbaa62 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml @@ -6,7 +6,7 @@ _mysql_previous_build_database_name: "{{ database.database }}_{{ previous_build_number }}" - 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 }}" + ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep -w {{ _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 run_once: true @@ -22,7 +22,7 @@ run_once: true - name: Check if the previous database exists. - ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep {{ _mysql_previous_build_database_name }}" + ansible.builtin.shell: "set -o pipefail && mysql --defaults-extra-file={{ database.credentials_file }} -e 'SHOW DATABASES;' | grep -w {{ _mysql_previous_build_database_name }}" register: _previous_db_status failed_when: _previous_db_status.rc > 1 # only fail if we get an unexpected exitcode run_once: true