- name: Install Dovecot #apt: pkg={{ item }} default_release={{ ansible_lsb.codename }}-backports apt: pkg={{ item }} with_items: - dovecot-core - dovecot-imapd - name: Create a user 'imapproxy' user: name=imapproxy system=yes createhome=no home=/home/imapproxy shell=/usr/sbin/nologin password=! state=present - name: Create a home directory for user 'imapproxy' file: path=/home/imapproxy state=directory owner=imapproxy group=imapproxy mode=0700 - name: Configure Dovecot copy: src=etc/dovecot/conf.d/{{ item }} dest=/etc/dovecot/conf.d/{{ item }} owner=root group=root mode=0644 register: r with_items: - 10-auth.conf - 10-logging.conf - 10-mail.conf - 10-master.conf - 15-mailboxes.conf - 20-imapc.conf - auth-imap.conf.ext notify: - Restart Dovecot - name: Start Dovecot service: name=dovecot state=started when: not r.changed - meta: flush_handlers - name: Install stunnel apt: pkg=stunnel4 - name: Auto-enable stunnel lineinfile: dest=/etc/default/stunnel4 regexp='^(\s*#)?\s*ENABLED=' line='ENABLED=1' owner=root group=root mode=0644 - name: Create /etc/stunnel/certs file: path=/etc/stunnel/certs state=directory owner=root group=root mode=0755 - name: Copy Dovecot's X.509 certificate # XXX: it's unfortunate that we have to store the whole CA chain... # for some reason stunnel's level 4 "verify" (CA chain and only verify # peer certificate) doesn't always work: # https://www.stunnel.org/pipermail/stunnel-users/2013-July/004249.html assemble: src=certs/dovecot remote_src=no dest=/etc/stunnel/certs/imap.fripost.org.pem owner=root group=root mode=0644 register: r1 notify: - Restart stunnel - name: Copy slapd's X.509 certificate copy: src=certs/ldap/ldap.fripost.org.pem dest=/etc/stunnel/certs/ldap.fripost.org.pem owner=root group=root mode=0644 register: r2 notify: - Restart stunnel - name: Configure stunnel copy: src=etc/stunnel/roundcube.conf dest=/etc/stunnel/roundcube.conf owner=root group=root mode=0644 register: r3 notify: - Restart stunnel - name: Start stunnel service: name=stunnel4 pattern=/usr/bin/stunnel4 state=started when: not (r1.changed or r2.changed or r3.changed) - meta: flush_handlers