03_seed-database-to-backup.ymlยถ

---
- name: "๐Ÿ“– Read the seeded database definitions once per host"
  include_tasks: 05_read-seeded-databases.yml
  when: svc_bkp_volume_2_local_seeded is not defined

- name: "๐Ÿ› BKP | Debug seed context (sanitized)"
  ansible.builtin.debug:
    msg: |
      database_consumer_id: "{{ database_consumer_id | default('undefined') }}"
      database_instance: "{{ database_instance | default('undefined') }}"
      database_name: "{{ database_name | default('undefined') }}"
      database_type: "{{ database_type | default('undefined') }}"
      database_host: "{{ database_host | default('undefined') }}"
      database_port: "{{ database_port | default('undefined') }}"
      database_username: "{{ database_username | default('undefined') }}"
  when: MODE_DEBUG | bool
  changed_when: false

- name: "โœ… BKP | Assert required database variables are explicitly passed"
  ansible.builtin.assert:
    that:
      - database_instance is defined
      - (database_instance | string | trim) != ""

      - database_type is defined
      - (database_type | string | trim) != ""

      - database_host is defined
      - (database_host | string | trim) != ""

      - database_port is defined
      - (database_port | string | trim) != ""

      - database_username is defined
      - (database_username | string | trim) != ""

      - database_password is defined
      - (database_password | string | trim) != ""

      - database_name is defined
    fail_msg: >-
      You must pass ALL database variables explicitly when including
      svc-bkp-volume-2-local/tasks/03_seed-database-to-backup.yml:

        database_instance, database_type, database_host, database_port,
        database_username, database_password, database_name

      Note: database_name may be an empty string to represent "all databases".
  changed_when: false

- name: "๐Ÿงฎ Compare the database definition with the seeded one"
  ansible.builtin.set_fact:
    svc_bkp_volume_2_local_seed_argv: "{{ svc_bkp_volume_2_local_seed_command }}"
    svc_bkp_volume_2_local_seed_current: >-
      {{ svc_bkp_volume_2_local_seeded | baudolo_seed_current(*svc_bkp_volume_2_local_seed_command[2:]) }}
    svc_bkp_volume_2_local_seeded: >-
      {{ svc_bkp_volume_2_local_seeded | baudolo_seed_apply(*svc_bkp_volume_2_local_seed_command[2:]) }}
  vars:
    svc_bkp_volume_2_local_seed_command:
      - baudolo-seed
      - "{{ FILE_DATABASE_SECRETS | string }}"
      - "{{ database_instance | string }}"
      - "{{ '*' if (database_name | string | length) == 0 else (database_name | string) }}"
      - "{{ database_username | string }}"
      - "{{ database_password | string }}"
  no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"

- name: ๐ŸŒฑ Seed database definition via baudolo-seed (system binary)
  ansible.builtin.command:
    argv: "{{ svc_bkp_volume_2_local_seed_argv }}"
  when: not (svc_bkp_volume_2_local_seed_current | bool)
  no_log: "{{ MASK_CREDENTIALS_IN_LOGS | bool }}"
  # todo: add flock to baudolo-seed upstream, then async seeding becomes safe again.
  throttle: 1