---
# Example call:
# ansible-playbook upload-database-dumb.yml --ask-vault-pass -e "cluster_features=['connect',...] cluster_size='1' stage='dev' upload_file='dumps/import.sql' uploaded_file='import.sql'

# How this stuff works:
# If `upload_file` is defined the upload role save the binary to `upload_directory` (default /tmp)
# If `database_backup_file` and `target_database` are defined the import role imports from file basename `database_backup_file` to `target_database`
# If both role conditions match the upload role trigger first.

# Parameters:
#   playbook inventory
#     stage := the name of the stage (e.g. dev, int, qa, prod)
#     cluster_features := (services to setup, e.g. ['connect', 'wordpress', ...])
#     upload_file := the local file to upload (e.g. dumps/wordpress_portal.sql)
#     database_backup_file := the dump file to import (e.g. wordpress_portal.sql)

#############################################################
#   Creating inventory dynamically for given parameters
#############################################################

- hosts: localhost
  connection: local
  gather_facts: false

  pre_tasks:
    - name: "Check if ansible version is at least 2.10.x"
      assert:
        that:
          - ansible_version.major >= 2
          - ansible_version.minor >= 10
        msg: "The ansible version has to be at least ({{ ansible_version.full }})"

  tasks:
    - name: "Add maria servers to hosts if necessary"
      add_host:
        name: "{{ stage }}-maria-01"
        groups:
        - "stage_{{ stage }}"
        - "{{ item }}"
      changed_when: False
      with_items: "{{ cluster_features }}"
      when: item in ['connect_wordpress']

#############################################################
#   Uploading database backups for created inventory
#############################################################

- hosts: "stage_{{ stage }}"
  serial: "{{ serial_number | default(1) }}"
  remote_user: root
  vars:
    ansible_ssh_host: "{{ stage_server_domain }}"

  pre_tasks:
    - name: "Import autodiscover pre-tasks"
      import_tasks: tasks/autodiscover_pre_tasks.yml
      become: false
      tags:
        - always

  roles:
    - role: upload_local_file
      when:
        - "'connect_wordpress' in group_names"
        - "upload_file is defined"
