--- - 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: '/etc/s6-rc/service/{{ item }}' 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: '/etc/s6-rc/service/{{ item }}' 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: '/etc/s6-rc/service/{{ item.name }}' 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 -u -v 2 change mlmmj-maintd register: change changed_when: change.stdout | length > 0 - name: Enable mlmmj-maintd lineinfile: path: /etc/s6-rc/service/enabled/contents 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: ' 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: ' 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: ' 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: ' 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: Moderate subscription copy: dest: '/var/vmail/mlmmj/{{ item.name }}/control/submod' content: '' 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 }}'