diff --git a/roles/database_backup/database_backup-mysql/tasks/cleanup-dump.yml b/roles/database_backup/database_backup-mysql/tasks/cleanup-dump.yml index d5774a78..a9ea9ae2 100644 --- a/roles/database_backup/database_backup-mysql/tasks/cleanup-dump.yml +++ b/roles/database_backup/database_backup-mysql/tasks/cleanup-dump.yml @@ -1,7 +1,7 @@ --- # We assume it's safe to only go back 50 build back. - name: Delete mysql dumps. - file: + ansible.builtin.file: path: "{{ mysql_backup.dumps_directory }}/{{ _mysql_host }}/{{ database.database }}-{{ item }}.sql.bz2" state: absent with_sequence: start={{ [previous_build_number | int - 50, 0] | max }} end={{ [previous_build_number | int - mysql_backup.keep, 0] | max }} diff --git a/roles/database_backup/database_backup-mysql/tasks/cleanup-rolling.yml b/roles/database_backup/database_backup-mysql/tasks/cleanup-rolling.yml index b131f8e6..2bdf29ee 100644 --- a/roles/database_backup/database_backup-mysql/tasks/cleanup-rolling.yml +++ b/roles/database_backup/database_backup-mysql/tasks/cleanup-rolling.yml @@ -1,7 +1,7 @@ --- # We assume it's safe to only go back 50 build back. - name: Delete mysql databases. - mysql_db: + community.mysql.mysql_db: name: "{{ database.database }}_{{ item }}" state: absent login_host: "{{ _mysql_host }}" diff --git a/roles/database_backup/database_backup-mysql/tasks/cleanup.yml b/roles/database_backup/database_backup-mysql/tasks/cleanup.yml index 71570baa..ac71fcbb 100644 --- a/roles/database_backup/database_backup-mysql/tasks/cleanup.yml +++ b/roles/database_backup/database_backup-mysql/tasks/cleanup.yml @@ -1,23 +1,23 @@ --- - name: Grab mysql credentials. - fetch: + ansible.builtin.fetch: src: "{{ database.credentials_file }}" dest: "{{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini" flat: true # Credentials for "managing" databases. -- set_fact: +- ansible.builtin.set_fact: _mysql_host: "{{ lookup('ini', 'host section=client file={{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini') }}" -- set_fact: +- ansible.builtin.set_fact: _mysql_user: "{{ lookup('ini', 'user section=client file={{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini') }}" -- set_fact: +- ansible.builtin.set_fact: _mysql_password: "{{ lookup('ini', 'password section=client file={{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini') }}" -- include_tasks: "cleanup-{{ mysql_backup.handling }}.yml" +- ansible.builtin.include_tasks: "cleanup-{{ mysql_backup.handling }}.yml" # We assume it's safe to only go back 50 build back. - name: Delete mysql users. - mysql_user: + community.mysql.mysql_user: name: "{{ database.user }}_{{ item }}" host_all: true state: absent 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 65c68978..dea8fe9f 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-none.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-none.yml @@ -1,11 +1,11 @@ --- -- set_fact: +- ansible.builtin.set_fact: _mysql_build_database_name: "{{ database.database }}" -- set_fact: +- ansible.builtin.set_fact: _mysql_previous_build_database_name: "{{ database.database }}" - name: Create initial database. - mysql_db: + community.mysql.mysql_db: name: "{{ _mysql_build_database_name }}" state: present login_host: "{{ _mysql_host }}" 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 1db841b0..71fa7580 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy-rolling.yml @@ -1,17 +1,17 @@ --- # Setup database names. -- set_fact: +- ansible.builtin.set_fact: _mysql_build_database_name: "{{ database.database }}_{{ build_number }}" -- set_fact: +- 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. - name: Create new database. - command: mysql --defaults-extra-file={{ database.credentials_file }} -e "CREATE DATABASE {{ _mysql_build_database_name }};" + ansible.builtin.command: mysql --defaults-extra-file={{ database.credentials_file }} -e "CREATE DATABASE {{ _mysql_build_database_name }};" run_once: true - name: Populate new database. - shell: "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 }}" + ansible.builtin.shell: "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 }}" when: previous_build_number > 0 run_once: true diff --git a/roles/database_backup/database_backup-mysql/tasks/deploy.yml b/roles/database_backup/database_backup-mysql/tasks/deploy.yml index f5a7130a..fc06be74 100644 --- a/roles/database_backup/database_backup-mysql/tasks/deploy.yml +++ b/roles/database_backup/database_backup-mysql/tasks/deploy.yml @@ -1,27 +1,27 @@ --- - name: Grab mysql credentials. - fetch: + ansible.builtin.fetch: src: "{{ database.credentials_file }}" dest: "{{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini" flat: true # Credentials for "managing" databases. -- set_fact: +- ansible.builtin.set_fact: _mysql_host: "{{ lookup('ini', 'host section=client file={{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini') }}" -- set_fact: +- ansible.builtin.set_fact: _mysql_user: "{{ lookup('ini', 'user section=client file={{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini') }}" -- set_fact: +- ansible.builtin.set_fact: _mysql_password: "{{ lookup('ini', 'password section=client file={{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini') }}" # Credentials for the app itself. # Manual: reuse given creds. Note the user gets ignored. -- set_fact: +- ansible.builtin.set_fact: _mysql_build_user_name: "{{ _mysql_user }}" when: mysql_backup.credentials_handling == 'manual' -- set_fact: +- ansible.builtin.set_fact: _mysql_build_password: "{{ _mysql_password }}" when: mysql_backup.credentials_handling == 'manual' # Static: create/update user/pwd only once. -- set_fact: +- ansible.builtin.set_fact: _mysql_build_user_name: "{{ database.user }}" when: mysql_backup.credentials_handling == 'static' @@ -71,18 +71,18 @@ - _legacy_static_creds.stat.exists ### End of legacy handling. -- set_fact: +- ansible.builtin.set_fact: _mysql_build_password: "{{ lookup('password', '{{ _ce_deploy_data_dir }}/{{ project_name }}_{{ build_type }}/mysql/{{ _mysql_host }}/{{ database.database }}') }}" when: mysql_backup.credentials_handling == 'static' # Rotate: create user/pwd on each build. -- set_fact: +- ansible.builtin.set_fact: _mysql_build_user_name: "{{ database.user }}_{{ build_number }}" when: mysql_backup.credentials_handling == 'rotate' -- set_fact: +- ansible.builtin.set_fact: _mysql_build_password: "{{ lookup('password', '/dev/shm/{{ project_name }}_{{ build_type }}_{{ build_number }}') }}" when: mysql_backup.credentials_handling == 'rotate' -- include_tasks: "deploy-{{ mysql_backup.handling }}.yml" +- ansible.builtin.include_tasks: "deploy-{{ mysql_backup.handling }}.yml" # We append privileges instead of replacing, # to allow this role to be looped over, @@ -90,11 +90,11 @@ # @see https://www.thesysadmin.rocks/2020/10/08/rds-mariadb-grant-all-permission-access-denied-for-user/ for why we cannot GRANT ALL. # As of MySQL 8.0 the GRANT operation has no password option, you must CREATE your user first. - name: Create/update mysql user. - command: mysql --defaults-extra-file={{ database.credentials_file }} -e "CREATE USER IF NOT EXISTS '{{ _mysql_build_user_name }}'@'%' IDENTIFIED BY '{{ _mysql_build_password }}'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON {{ _mysql_build_database_name }}.* TO '{{ _mysql_build_user_name }}'@'%';" + ansible.builtin.command: mysql --defaults-extra-file={{ database.credentials_file }} -e "CREATE USER IF NOT EXISTS '{{ _mysql_build_user_name }}'@'%' IDENTIFIED BY '{{ _mysql_build_password }}'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON {{ _mysql_build_database_name }}.* TO '{{ _mysql_build_user_name }}'@'%';" when: ( mysql_backup.credentials_handling == 'rotate' ) or ( mysql_backup.credentials_handling == 'static' ) run_once: true -- set_fact: +- ansible.builtin.set_fact: _build_database: original: "{{ database }}" name: "{{ _mysql_build_database_name }}" @@ -102,5 +102,5 @@ password: "{{ _mysql_build_password }}" host: "{{ _mysql_host }}" -- set_fact: +- ansible.builtin.set_fact: build_databases: "{{ build_databases + [ _build_database ] }}" diff --git a/roles/database_backup/database_backup-mysql/tasks/main.yml b/roles/database_backup/database_backup-mysql/tasks/main.yml index ec10df75..b015ac09 100644 --- a/roles/database_backup/database_backup-mysql/tasks/main.yml +++ b/roles/database_backup/database_backup-mysql/tasks/main.yml @@ -1,6 +1,6 @@ --- - name: Take database backup. - include_tasks: "{{ deploy_operation }}.yml" + ansible.builtin.include_tasks: "{{ deploy_operation }}.yml" with_items: "{{ mysql_backup.databases }}" loop_control: loop_var: database diff --git a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml index 735a9805..f914ee78 100644 --- a/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml +++ b/roles/database_backup/database_backup-mysql/tasks/revert-dump.yml @@ -1,5 +1,5 @@ --- - name: Revert database from dump. - shell: "bzcat {{ mysql_backup.dumps_directory }}/{{ _mysql_host }}/{{ database.database }}-{{ previous_build_number }}.sql.bz2 | mysql --defaults-extra-file={{ database.credentials_file }} {{ database.database }}" + ansible.builtin.shell: "bzcat {{ mysql_backup.dumps_directory }}/{{ _mysql_host }}/{{ database.database }}-{{ previous_build_number }}.sql.bz2 | mysql --defaults-extra-file={{ database.credentials_file }} {{ database.database }}" when: previous_build_number > 0 run_once: true diff --git a/roles/database_backup/database_backup-mysql/tasks/revert.yml b/roles/database_backup/database_backup-mysql/tasks/revert.yml index ba054b44..f6076262 100644 --- a/roles/database_backup/database_backup-mysql/tasks/revert.yml +++ b/roles/database_backup/database_backup-mysql/tasks/revert.yml @@ -1,17 +1,19 @@ --- - name: Grab mysql credentials. - fetch: + ansible.builtin.fetch: src: "{{ database.credentials_file }}" dest: "{{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini" flat: true # Credentials for "managing" databases. -- set_fact: +- ansible.builtin.set_fact: _mysql_host: "{{ lookup('ini', 'host section=client file={{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini') }}" -- set_fact: +- ansible.builtin.set_fact: _mysql_user: "{{ lookup('ini', 'user section=client file={{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini') }}" -- set_fact: +- ansible.builtin.set_fact: _mysql_password: "{{ lookup('ini', 'password section=client file={{ _ce_deploy_build_dir }}/mysql_backup_credentials.ini') }}" -- include_tasks: "revert-{{ mysql_backup.handling }}.yml" - when: previous_build_number > 0 +- ansible.builtin.include_tasks: "revert-{{ mysql_backup.handling }}.yml" + when: + - previous_build_number > 0 + - database_backup.revert diff --git a/roles/database_backup/defaults/main.yml b/roles/database_backup/defaults/main.yml index 9201fa20..df4881c0 100644 --- a/roles/database_backup/defaults/main.yml +++ b/roles/database_backup/defaults/main.yml @@ -2,3 +2,4 @@ database_backup: engines: - mysql + revert: true \ No newline at end of file diff --git a/roles/database_backup/tasks/main.yml b/roles/database_backup/tasks/main.yml index 83adedf9..829536c2 100644 --- a/roles/database_backup/tasks/main.yml +++ b/roles/database_backup/tasks/main.yml @@ -1,9 +1,9 @@ --- -- set_fact: +- ansible.builtin.set_fact: build_databases: [] - name: Take database dumps. - include_role: + ansible.builtin.include_role: name: "database_backup/database_backup-{{ engine }}" with_items: "{{ database_backup.engines }}" loop_control: