- name: Create Docker network for MariaDB
  docker_network:
    name: central_mariadb
    state: present
    ipam_config:
      - subnet: "{{ networks.local.mariadb.subnet }}"
  when: run_once_docker_mariadb is not defined

- name: install MariaDB
  docker_container:
    name: central-mariadb
    image: "mariadb:{{applications.mariadb.version}}" #could lead to problems with nextcloud
    detach: yes
    env:
      MARIADB_ROOT_PASSWORD:  "{{central_mariadb_root_password}}"
      MARIADB_AUTO_UPGRADE:   "1"
    networks:
      - name: central_mariadb
    volumes:
      - central_mariadb_database:/var/lib/mysql
    published_ports:
      - "127.0.0.1:{{database_port}}:3306" # can be that this will be removed if all applications use sockets
    command: "--transaction-isolation=READ-COMMITTED --binlog-format=ROW" #for nextcloud
    restart_policy: "{{docker_restart_policy}}"
    healthcheck:
      test: "/usr/bin/mariadb --user=root --password={{central_mariadb_root_password}} --execute \"SHOW DATABASES;\""
      interval: 3s
      timeout: 1s
      retries: 5
  when: run_once_docker_mariadb is not defined
  register: setup_mariadb_container_result

- name: install python-mysqlclient
  pacman: 
    name: python-mysqlclient
    state: present
  when: run_once_docker_mariadb is not defined

- name: Wait for MariaDB inside the container to respond
  shell: docker exec central-mariadb mysqladmin ping -h localhost --silent
  register: mysql_ping
  until: mysql_ping.rc == 0
  retries: 30
  delay: 5
  when:
    - setup_mariadb_container_result is defined
    - setup_mariadb_container_result.changed
    - run_once_docker_mariadb is not defined

- name: "Create database: {{ database_name }}"
  mysql_db:
    name: "{{ database_name }}"
    state: present
    login_user: root
    login_password: "{{ central_mariadb_root_password }}"
    login_host: 127.0.0.1
    login_port: "{{database_port}}"

- name: "Create database user: {{ database_username }}"
  mysql_user:
    name: "{{database_username}}"
    password: "{{database_password}}"
    host: "%"
    priv: '{{database_name}}.*:ALL'
    state: present
    login_user: root
    login_password: "{{central_mariadb_root_password}}"
    login_host: 127.0.0.1
    login_port: "{{database_port}}"

- name: Grant database privileges
  ansible.builtin.shell:
    cmd: "docker exec central-mariadb mariadb -u root -p{{ central_mariadb_root_password }} -e \"GRANT ALL PRIVILEGES ON {{database_name}}.* TO '{{database_username}}'@'%';\""
  args:
    executable: /bin/bash

- name: run the docker_mariadb tasks once
  set_fact:
    run_once_docker_mariadb: true
  when: run_once_docker_mariadb is not defined