cloud-environments-example/roles/mailcow/tasks/main.yml
2023-08-20 10:30:41 +02:00

112 lines
3.2 KiB
YAML
Executable File

---
# Basic
- name: install requirements for mailcow
apt:
update_cache: yes
state: "{% if cloud_update | bool %}latest{% else %}present{% endif %}"
install_recommends: yes
pkg:
- python3-openssl
# Mailcow Setup
- name: clone mailcow repository
git:
repo: https://github.com/mailcow/mailcow-dockerized
dest: "{{ mailcow_folder }}"
update: no
# Mailcow Config
- name: setup mailcow config
template:
src: opt/mailcow/mailcow.conf.j2
dest: "{{ mailcow_folder }}/mailcow.conf"
mode: 0600
notify: restart mailcow docker containers
- name: setup env link to mailcow conf
file:
src: "{{ mailcow_folder }}/mailcow.conf"
dest: "{{ mailcow_folder }}/.env"
state: link
- name: setup ssl folder
file:
path: "{{ mailcow_ssl_path }}"
state: directory
- name: generate dh params
openssl_dhparam:
path: "{{ mailcow_ssl_path }}/dhparams.pem"
size: 2048
notify: restart mailcow docker containers
when: not (mailcow_use_letsencrypt | default('false'))
- name: use predefined dh params
copy:
remote_src: yes
src: "{{ mailcow_folder }}/data/assets/ssl-example/dhparams.pem"
dest: "{{ mailcow_ssl_path }}/dhparams.pem"
notify: restart mailcow docker containers
when: (mailcow_use_letsencrypt | default('false'))
- name: generate ssl private key
openssl_privatekey:
path: "{{ mailcow_ssl_path }}/key.pem"
size: 4096
register: key_generation
notify: restart mailcow docker containers
- name: generate ssl cert request
openssl_csr:
path: "{{ mailcow_ssl_path }}/csr.pem"
privatekey_path: "{{ mailcow_ssl_path }}/key.pem"
common_name: "{{ mailcow_cert_subjects.CN }}"
country_name: "{{ mailcow_cert_subjects.C }}"
locality_name: "{{ mailcow_cert_subjects.L }}"
organization_name: "{{ mailcow_cert_subjects.O }}"
organizational_unit_name: "{{ mailcow_cert_subjects.OU }}"
state_or_province_name: "{{ mailcow_cert_subjects.ST }}"
when: key_generation.changed
register: cert_request
- name: generate selfsigned certificate
openssl_certificate:
provider: selfsigned
path: "{{ mailcow_ssl_path }}/cert.pem"
privatekey_path: "{{ mailcow_ssl_path }}/key.pem"
csr_path: "{{ mailcow_ssl_path }}/csr.pem"
when: cert_request.changed
notify: restart mailcow docker containers
- name: set http redirect to https
template:
src: opt/mailcow/data/conf/nginx/redirect.conf.j2
dest: "{{ mailcow_folder }}/data/conf/nginx/redirect.conf"
notify: restart mailcow docker containers
when: mailcow_no_http
# Mailcow build
- name: check mailcow image availability
command: docker image list
changed_when: false
register: docker_image_list
- name: pull images for mailcow containers
command:
cmd: docker-compose pull
chdir: "{{ mailcow_folder }}/"
when: "'mailcow' not in docker_image_list.stdout"
- name: find running mailcow containers
command:
cmd: "{% raw %}docker ps --format '{{.Image}}'{% endraw %}"
chdir: "{{ mailcow_folder }}/"
changed_when: false
register: docker_running_list
- name: start mailcow containers if not running
command:
cmd: docker-compose up -d
chdir: "{{ mailcow_folder }}/"
when: "'mailcow' not in docker_running_list.stdout"
register: mailcow_start