ansible/roles/mlmmj/tasks/main.yml

344 lines
8.6 KiB
YAML
Raw Normal View History

2021-01-31 19:45:58 -06:00
---
- name: Install mlmmj
package:
name:
- mlmmj
state: present
- name: Create mlmmj group
group:
name: mlmmj
gid: 20003
- name: Create mlmmj user
user:
name: mlmmj
uid: 20003
group: mlmmj
create_home: no
home: /var/vmail/mlmmj
shell: /sbin/nologin
- name: Create lists directory
file:
path: /var/vmail/mlmmj
state: directory
owner: mlmmj
group: mlmmj
- name: Create archive directory
file:
path: /var/vmail/mlmmj-archive
state: directory
owner: mlmmj
group: mlmmj
- name: Create mlmmj postfix service
lineinfile:
path: /usr/local/etc/postfix/master.cf
regexp: '^{{ transport_service.name }} +{{ transport_service.type }}'
value: '{{ transport_service.value }}'
notify:
- Restart Postfix
- name: Configure Postfix
postconf:
name: '{{ item.name }}'
value: '{{ item.value | default(omit) }}'
state: '{{ item.state | default(omit) }}'
with_items: '{{ postfix_config }}'
notify:
- Reload Postfix
- name: Generate mlmmj virtual aliases
template:
dest: /usr/local/etc/postfix/virtual_mlmmj
src: virtual_mlmmj.j2
mode: 0444
owner: root
group: wheel
notify:
- Rebuild mlmmj virtual aliases
- name: Generate mlmmj transport map
template:
dest: /usr/local/etc/postfix/transport_mlmmj
src: transport_mlmmj.j2
mode: 0444
owner: root
group: wheel
notify:
- Rebuild mlmmj transport map
- name: Create mlmmj-maintd service directories
file:
path: '{{ s6_etc_dir }}/service/{{ item }}'
2021-01-31 19:45:58 -06:00
state: directory
owner: root
group: wheel
mode: 0755
with_items: '{{ mlmmj_service_dirs }}'
notify:
- Reload s6-rc
- Restart mlmmj-maintd
- name: Generate mlmmj-maintd service scripts
template:
dest: '{{ s6_etc_dir }}/service/{{ item }}'
2021-01-31 19:45:58 -06:00
src: '{{ item }}.j2'
mode: 0555
owner: root
group: wheel
with_items: '{{ mlmmj_service_scripts }}'
notify:
- Reload s6-rc
- Restart mlmmj-maintd
- name: Generate mlmmj-maintd service configuration
copy:
dest: '{{ s6_etc_dir }}/service/{{ item.name }}'
2021-01-31 19:45:58 -06:00
content: '{{ item.content }}'
mode: 0444
owner: root
group: wheel
loop_control:
label: '{{ item.name }} = {{ item.content }}'
with_items: '{{ mlmmj_service_config }}'
notify:
- Reload s6-rc
- Restart mlmmj-maintd
- name: Flush handlers
meta: flush_handlers
- name: Start mlmmj-maintd
command: fdmove -c 2 1 s6-rc -l {{ s6_live_dir }} -u -v 2 change mlmmj-maintd
2021-01-31 19:45:58 -06:00
register: change
changed_when: change.stdout | length > 0
- name: Enable mlmmj-maintd
lineinfile:
path: '{{ s6_etc_dir }}/service/enabled/contents'
2021-01-31 19:45:58 -06:00
regexp: "^mlmmj-maintd$"
line: "mlmmj-maintd"
notify:
- Reload s6-rc
- name: Flush handlers (again)
meta: flush_handlers
- name: Create mailing lists
command: >
mlmmj-make-ml -s /var/vmail/mlmmj -L {{ item.name }}
args:
creates: '/var/vmail/mlmmj/{{ item.name }}/control/listaddress'
stdin: |
{{ item.domain }}
{{ item.owner }}
en
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Change ownership and permissions
file:
path: '/var/vmail/mlmmj/{{ item.name }}'
recurse: yes
owner: mlmmj
group: mlmmj
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Disable subscriber listing
copy:
dest: '/var/vmail/mlmmj/{{ item.name }}/control/nolistsubsemail'
content: ''
owner: mlmmj
group: mlmmj
mode: 0444
force: no
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Strip these headers from incoming messages
lineinfile:
path: '/var/vmail/mlmmj/{{ item.0.name }}/control/delheaders'
create: yes
owner: mlmmj
group: mlmmj
mode: 0444
regexp: '^{{ item.1 }}:$'
line: '{{ item.1 }}:'
loop_control:
label: '{{ item.0.name }}@{{ item.0.domain }} : {{ item.1 }}'
with_nested:
- '{{ mlmmj_lists }}'
- '{{ mlmmj_delete_headers }}'
- name: Add List-Id header
lineinfile:
path: '/var/vmail/mlmmj/{{ item.name }}/control/customheaders'
create: yes
owner: mlmmj
group: mlmmj
mode: 0444
regexp: '^List-Id:'
line: 'List-Id: {{ item.description }} <{{ item.name }}.{{ item.domain }}>'
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Add List-Subscribe header
lineinfile:
path: '/var/vmail/mlmmj/{{ item.name }}/control/customheaders'
create: yes
owner: mlmmj
group: mlmmj
mode: 0444
regexp: '^List-Subscribe:'
line: 'List-Subscribe: <mailto:{{ item.name }}+subscribe@{{ item.domain }}>'
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Add List-Unsubscribe header
lineinfile:
path: '/var/vmail/mlmmj/{{ item.name }}/control/customheaders'
create: yes
owner: mlmmj
group: mlmmj
mode: 0444
regexp: '^List-Unsubscribe:'
line: 'List-Unsubscribe: <mailto:{{ item.name }}+unsubscribe@{{ item.domain }}>'
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Add List-Post header
lineinfile:
path: '/var/vmail/mlmmj/{{ item.name }}/control/customheaders'
create: yes
owner: mlmmj
group: mlmmj
mode: 0444
regexp: '^List-Post:'
line: 'List-Post: <mailto:{{ item.name }}@{{ item.domain }}>'
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Add List-Help header
lineinfile:
path: '/var/vmail/mlmmj/{{ item.name }}/control/customheaders'
create: yes
owner: mlmmj
group: mlmmj
mode: 0444
regexp: '^List-Help:'
line: 'List-Help: <mailto:{{ item.name }}@{{ item.domain }}?subject=help>'
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Add prefix to subjects
copy:
dest: '/var/vmail/mlmmj/{{ item.name }}/control/prefix'
content: |
{{ item.prefix }}
owner: mlmmj
group: mlmmj
mode: 0444
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Configure list addresses
template:
dest: '/var/vmail/mlmmj/{{ item.name }}/control/listaddress'
src: listaddress.j2
owner: mlmmj
group: mlmmj
mode: 0444
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Set moderate subscription
2021-01-31 19:45:58 -06:00
copy:
dest: '/var/vmail/mlmmj/{{ item.name }}/control/submod'
content: '{{ item.subscription_moderators | default([]) | join("\n") }}'
2021-01-31 19:45:58 -06:00
force: no
owner: mlmmj
group: mlmmj
mode: 0444
when: item.subscription_moderated | default(false)
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Unset moderate subscription
file:
path: '/var/vmail/mlmmj/{{ item.name }}/control/submod'
state: absent
when: not (item.subscription_moderated | default(false))
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Limit posts to subscribers
copy:
dest: '/var/vmail/mlmmj/{{ item.name }}/control/subonlypost'
content: ''
force: no
owner: mlmmj
group: mlmmj
mode: 0444
when: item.subscribers_only | default(false)
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Allow off list posts
file:
path: '/var/vmail/mlmmj/{{ item.name }}/control/subonlypost'
state: absent
when: not (item.subscribers_only | default(false))
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Moderate posts from non subscribers
copy:
dest: '/var/vmail/mlmmj/{{ item.name }}/control/modnonsubposts'
content: ''
force: no
owner: mlmmj
group: mlmmj
mode: 0444
when: item.moderate_nonsubscribers | default(false)
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Deny posts from non subscribers
file:
path: '/var/vmail/mlmmj/{{ item.name }}/control/modnonsubposts'
state: absent
when: not (item.moderate_nonsubscribers | default(false))
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'
- name: Generate list of moderators
template:
dest: '/var/vmail/mlmmj/{{ item.name }}/control/moderators'
src: moderators.j2
owner: mlmmj
group: mlmmj
mode: 0444
loop_control:
label: '{{ item.name }}@{{ item.domain }}'
with_items: '{{ mlmmj_lists }}'