aboutsummaryrefslogtreecommitdiffstats
path: root/roles/dovecot/tasks/main.yml
blob: 09f2e2e6e24d38c1787a225afd204eab7abf4180 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
- name: install dovecot
  dnf:
    name: '{{ dovecot_packages }}'
    state: present

- name: add vmail user
  user:
    name: '{{ dovecot_vmail_user }}'
    system: yes
    home: '{{ dovecot_vmail_dir }}'
    shell: /sbin/nologin
    create_home: no
  register: dovecot_vmail_user_result

- name: create vmail directory
  file:
    path: '{{ dovecot_vmail_dir }}'
    state: directory
    owner: '{{ dovecot_vmail_user }}'
    group: '{{ dovecot_vmail_user }}'
    setype: mail_spool_t
    mode: 0770

- name: set selinux context for vmail directory
  sefcontext:
    target: '{{ dovecot_vmail_dir }}(/.*)?'
    setype: mail_spool_t
    state: present
  register: dovecot_vmail_sefcontext

- name: apply selinux context to vmail directory
  command: 'restorecon -R {{ dovecot_vmail_dir }}'
  when: dovecot_vmail_sefcontext.changed

- name: set up FreeIPA integration for IMAP
  import_tasks: freeipa.yml

- name: request TLS certificate
  include_role:
    name: getcert_request
  vars:
    certificate_service: imap
    certificate_path: '{{ dovecot_certificate_path }}'
    certificate_key_path: '{{ dovecot_certificate_key_path }}'
    certificate_owner: dovecot
    certificate_hook: systemctl reload dovecot

- name: generate dhparams
  openssl_dhparam:
    path: '{{ dovecot_dhparams_path }}'
    size: 2048

- name: configure Apache Solr for full-text search
  import_tasks: solr.yml
  tags: solr

- name: create virtual config directory
  file:
    path: /etc/dovecot/virtual
    state: directory

- name: create global sieve directories
  file:
    path: '{{ item }}'
    state: directory
    recurse: yes
  loop:
    - '{{ dovecot_sieve_dir }}'
    - '{{ dovecot_sieve_before_dir }}'
    - '{{ dovecot_sieve_pipe_bin_dir }}'

- name: create virtual mailbox definitions
  copy:
    src: etc/dovecot/virtual/
    dest: /etc/dovecot/virtual/

- name: generate dovecot configuration
  template:
    src: '{{ item.src }}'
    dest: /etc/dovecot/{{ item.path | splitext | first }}
  loop: "{{ lookup('filetree', '../templates/etc/dovecot', wantlist=True) }}"
  loop_control:
    label: '{{ item.path }}'
  when: item.state == 'file'
  notify: restart dovecot

- name: copy quota warn script
  template:
    src: '{{ dovecot_quota_warning_script[1:] }}.j2'
    dest: '{{ dovecot_quota_warning_script }}'
    mode: 0555

- name: start dovecot
  systemd:
    name: dovecot
    enabled: yes
    state: started

- import_tasks: rspamd.yml

- name: open firewall ports
  firewalld:
    service: '{{ item }}'
    permanent: yes
    immediate: yes
    state: enabled
  loop:
    - imaps
    - managesieve
  tags: firewalld

- name: open firewall ports
  firewalld:
    port: '{{ item }}'
    permanent: yes
    immediate: yes
    state: enabled
  loop:
    - '{{ dovecot_quota_status_port }}/tcp'
    - '{{ dovecot_lmtp_port }}/tcp'
  tags: firewalld

- name: generate archive script
  template:
    src: '{{ dovecot_archive_script[1:] }}.j2'
    dest: '{{ dovecot_archive_script }}'
    mode: 0555