---
- name: create matrix volume folders
  file:
    name: "{{ services.matrix.volume_folder }}/{{ volume }}"
    state: directory
    owner: "991"
    group: "991"
  loop:
    - "data"
    - "data/uploads"
    - "data/media"
  loop_control:
    loop_var: volume

- name: create matrix DB folder
  file:
    name: "{{ services.matrix.volume_folder }}/db"
    state: "directory"

- name: create riot volume folders
  file:
    name: "{{ services.riot.volume_folder }}/{{ volume }}"
    state: directory
  loop:
    - "data"
  loop_control:
    loop_var: volume

- name: upload riot config.json
  template:
    src: files/configs/riot/config.json
    dest: "{{ services.riot.volume_folder }}/data/config.json"

- name: upload riot.im.conf
  template:
    src: files/configs/riot/riot.im.conf
    dest: "{{ services.riot.volume_folder }}/data/riot.im.conf"

- name: upload vhost config for root domain
  template:
    src: files/configs/matrix/vhost-root
    dest: "{{ services.nginx_proxy.volume_folder }}/vhost/{{ base_domain }}"

- name: upload vhost config for matrix domain
  template:
    src: files/configs/matrix/vhost-matrix
    dest: "{{ services.nginx_proxy.volume_folder }}/vhost/{{ services.matrix.domain }}"

- name: upload vhost config for riot domain
  template:
    src: files/configs/matrix/vhost-riot
    dest: "{{ services.nginx_proxy.volume_folder }}/vhost/{{ item }}"
  loop: "{{ services.riot.domains }}"

- name: upload homeserver.yaml
  template:
    src: "files/configs/matrix/homeserver.yaml.j2"
    dest: "{{ services.matrix.volume_folder }}/data/homeserver.yaml"

- name: upload matrix logging config
  template:
    src: "files/configs/matrix/matrix.data.coop.log.config"
    dest: "{{ services.matrix.volume_folder }}/data/matrix.data.coop.log.config"

- name: set up matrix and riot
  docker_compose:
    project_name: matrix
    pull: yes
    definition:
      version: "3.6"
      services:
        matrix_db:
          container_name: matrix_db
          image: postgres:10
          restart: unless-stopped
          networks:
            - matrix
          volumes:
            - "{{ services.matrix.volume_folder }}/db:/var/lib/postgresql/data"
          environment:
            POSTGRES_USER: "synapse"
            POSTGRES_PASSWORD: "{{ postgres_passwords.matrix }}"

        matrix_app:
          container_name: matrix
          image: matrixdotorg/synapse:{{ services.matrix.version }}
          restart: unless-stopped
          networks:
            - matrix
            - external_services
          volumes:
            - "{{ services.matrix.volume_folder }}/data:/data"
          environment:
            SYNAPSE_CONFIG_PATH: "/data/homeserver.yaml"
            SYNAPSE_CACHE_FACTOR: "2"
            SYNAPSE_LOG_LEVEL: "INFO"
            VIRTUAL_HOST: "{{ services.matrix.domain }}"
            VIRTUAL_PORT: "8008"
            LETSENCRYPT_HOST: "{{ services.matrix.domain }}"
            LETSENCRYPT_EMAIL: "{{ letsencrypt_email }}"

        riot:
          container_name: riot_app
          image: avhost/docker-matrix-riot:{{ services.riot.version }}
          restart: unless-stopped
          networks:
            - matrix
            - external_services
          expose:
            - 8080
          volumes:
            - "{{ services.riot.volume_folder }}/data:/data"
          environment:
            VIRTUAL_HOST: "{{ services.riot.domains|join(',') }}"
            VIRTUAL_PORT: "8080"
            LETSENCRYPT_HOST: "{{ services.riot.domains|join(',') }}"
            LETSENCRYPT_EMAIL: "{{ letsencrypt_email }}"

      networks:
        external_services:
          external:
            name: external_services
        matrix:
          name: "matrix"