summaryrefslogtreecommitdiffstats
path: root/roles/common/tasks/mail.yml
blob: cbec8cf14c1026cb0ac9e90947b3f45bae39c5c9 (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
- name: Install Postfix
  apt: pkg={{ item }}
  with_items:
    # That one is nicer than GNU mailutils' mailx(1)
    - heirloom-mailx
    - postfix
    - postfix-cdb

- name: Create Postfix instances
  postmulti: instance={{ postfix_instance[item].name }}
             group={{ postfix_instance[item].group | default('') }}
  register: r1
  with_items: postfix_instance.keys() | intersect(group_names) | list
  notify:
    - Restart Postfix

- name: Link the dynamic maps & master.cf of each children to the master's
  # main.cf is specialized to each dedicated role, though
  file: src=../postfix/{{ item.1 }}
        dest=/etc/postfix-{{ postfix_instance[item.0].name }}/{{ item.1 }}
        owner=root group=root
        state=link force=yes
  register: r2
  with_nested:
    - postfix_instance.keys() | intersect(group_names) | list
    - [ 'dynamicmaps.cf', 'master.cf' ]
  notify:
    - Restart Postfix

- name: Configure Postfix (1)
  copy: src=etc/postfix/master.cf
        dest=/etc/postfix/master.cf
        owner=root group=root
        mode=0644
  register: r3
  notify:
    - Restart Postfix

- name: Configure Postfix (2)
  template: src=etc/postfix/main.cf.j2
            dest=/etc/postfix/main.cf
            owner=root group=root
            mode=0644
  notify:
    - Reload Postfix

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

- name: Generate a private key and a X.509 certificate for Postfix
  command: genkeypair.sh x509
                         --pubkey=/etc/postfix/ssl/{{ ansible_fqdn }}.pem
                         --privkey=/etc/postfix/ssl/{{ ansible_fqdn }}.key
                         --dns={{ ansible_fqdn }}
                         -t ecdsa -b secp384r1 -h sha512
  register: r4
  changed_when: r4.rc == 0
  failed_when: r4.rc > 1
  tags:
    - genkey

- name: Fetch Postfix's X.509 certificate
  # Ensure we don't fetch private data
  sudo: False
  fetch: src=/etc/postfix/ssl/{{ ansible_fqdn }}.pem
         dest=certs/postfix/
         fail_on_missing=yes
         flat=yes
  tags:
    - genkey

- name: Compile the static local Postfix database
  postmap: cmd=postalias src=/etc/aliases db=cdb
           owner=root group=root
           mode=0644

# We're using CDB
- name: Delete /etc/aliases.db
  file: path=/etc/aliases.db state=absent

- name: Build the Postfix TLS policy map
  sudo: False
  # smtp_tls_fingerprint_digest MUST be sha256!
  local_action: shell openssl x509 -in certs/postfix/{{ item }}.pem -noout -fingerprint -sha256 | cut -d= -f2
  with_items: groups.out | sort
  register: tls_policy
  changed_when: False
  when: "'out' not in group_names"

- name: Copy the Postfix TLS policy map
  template: src=etc/postfix/tls_policy.j2
            dest=/etc/postfix/tls_policy
            owner=root group=root
            mode=0644
  when: "'out' not in group_names"

- name: Compile the Postfix TLS policy map
  postmap: cmd=postmap src=/etc/postfix/tls_policy db=cdb
           owner=root group=root
           mode=0644
  when: "'out' not in group_names"

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

- meta: flush_handlers