summaryrefslogtreecommitdiffstats
path: root/roles/IMAP/tasks/imap.yml
blob: 71a0cb48814e2009d8d159b0aa6cd69955c49841 (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
128
129
130
131
132
133
134
135
136
137
- name: Install Dovecot
  apt: pkg={{ item }}
  with_items:
    - dovecot-core
    - dovecot-ldap
    - dovecot-imapd
    - dovecot-lmtpd
    - dovecot-antispam
    - dovecot-managesieved
    - dovecot-sieve

- name: Create a user 'vmail'
  user: name=vmail system=yes
        createhome=no
        home=/home/mail
        shell=/bin/false
        password=!
        state=present

# Required for dbox, see
# http://wiki2.dovecot.org/MailboxFormat/dbox#Multi-dbox
- name: Create a nightly cron job to purge expunged messages
  cron: name="Purge expunged messages"
        minute=7 hour=5
        user=vmail cron_file=doveadm-purge
        job="/usr/bin/doveadm purge -A"

# The ownership and permissions ensure that dovecot won't try to
# deliver mails under an umounted mountpoint.
- name: Create a home directory for user 'vmail'
  file: path=/home/mail
        state=directory
        owner=root group=root
        mode=0755

- name: Create virtual mailbox directories
  file: path=/etc/dovecot/virtual/{{ item }}
        state=directory
        owner=root group=root
        mode=0755
  with_items:
    - all
    - flagged
    - recent
    - unseen

- name: Create virtual mailboxes
  copy: src=etc/dovecot/virtual/{{ item }}/dovecot-virtual
        dest=/etc/dovecot/virtual/{{ item }}/dovecot-virtual
        owner=root group=root
        mode=0644
  with_items:
    - all
    - flagged
    - recent
    - unseen

- name: Create directory /home/mail/spamspool
  # There is no possibility for a name clash, since 'spamspool' isn't a
  # valid domain
  file: path=/home/mail/spamspool
        state=directory
        owner=vmail group=vmail
        mode=0700

- name: Create directory /etc/dovecot/ssl
  file: path=/etc/dovecot/ssl
        state=directory
        owner=root group=root
        mode=0755

- name: Generate a private key and a X.509 certificate for Dovecot
  command: genkeypair.sh x509
                         --pubkey=/etc/dovecot/ssl/imap.fripost.org.pem
                         --privkey=/etc/dovecot/ssl/imap.fripost.org.key
                         --dns=imap.fripost.org
                         -t rsa -b 4096 -h sha512
  register: r1
  changed_when: r1.rc == 0
  failed_when: r1.rc > 1
  notify:
    - Restart Dovecot
  tags:
    - genkey

- name: Fetch Dovecot's X.509 certificate
  # Ensure we don't fetch private data
  sudo: False
  fetch: src=/etc/dovecot/ssl/imap.fripost.org.pem
         dest=certs/dovecot/
         fail_on_missing=yes
         flat=yes
  tags:
    - genkey

- name: Configure Dovecot
  copy: src=etc/dovecot/{{ item }}
        dest=/etc/dovecot/{{ item }}
        owner=root group=root
        mode=0644
  register: r2
  with_items:
    - conf.d/10-auth.conf
    - conf.d/10-logging.conf
    - conf.d/10-mail.conf
    - conf.d/10-master.conf
    - conf.d/10-ssl.conf
    - conf.d/15-mailboxes.conf
    - conf.d/20-imap.conf
    - conf.d/20-lmtp.conf
    - conf.d/90-plugin.conf
    - conf.d/90-sieve.conf
    - conf.d/auth-ldap.conf.ext
    - dovecot-ldap.conf.ext
    - dovecot-ldap-userdb.conf.ext
  notify:
    - Restart Dovecot

- name: Tell Dovecot we have a remote IMAP proxy
  # XXX: we should have an automatic lookup here
  lineinfile: dest=/etc/dovecot/dovecot.conf
              regexp='^(\s*#)?\s*login_trusted_networks\s*='
              line='login_trusted_networks = 171.25.193.76/32'
              state=present
              create=yes
              owner=root group=root
              mode=0644
  register: r3
  when: "'IMAP' in group_names and 'webmail' not in group_names"
  notify:
    - Restart Dovecot

- name: Start Dovecot
  service: name=dovecot state=started
  when: not (r1.changed or r2.changed or r3.changed)

- meta: flush_handlers