feat(role): Initial commit
This commit is contained in:
2
tasks/main.yml
Normal file
2
tasks/main.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
- import_tasks: postfix-setup.yml
|
78
tasks/postfix-setup.yml
Normal file
78
tasks/postfix-setup.yml
Normal file
@@ -0,0 +1,78 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
- name: 'If OS is a Linux flavor install Postfix'
|
||||
when: ansible_facts['system'] | lower == 'linux'
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- 'postfix'
|
||||
- 'postfix-pcre'
|
||||
state: 'present'
|
||||
|
||||
- name: 'Ensure Postfix lookup table files exist with correct perms'
|
||||
loop_control:
|
||||
loop_var: 'somta_postfix_postconf_lookup_table'
|
||||
label: 'Copy lookup table file ''/etc/postfix/{{ somta_postfix_postconf_lookup_table.file }}'' and set perms'
|
||||
loop:
|
||||
- { mode: '0600', file: 'sasl_passwd' }
|
||||
- { mode: '0644', file: 'sender_canonical_maps' }
|
||||
- { mode: '0644', file: 'smtp_header_checks' }
|
||||
ansible.builtin.template:
|
||||
src: 'etc/postfix/{{ somta_postfix_postconf_lookup_table.file }}.j2'
|
||||
dest: '/etc/postfix/{{ somta_postfix_postconf_lookup_table.file }}'
|
||||
mode: '{{ somta_postfix_postconf_lookup_table.mode }}'
|
||||
notify:
|
||||
- 'Ensure that a Mail Transfer Agent is running with newest config'
|
||||
|
||||
- name: 'Add e-mail alias for user ''root'''
|
||||
ansible.builtin.lineinfile:
|
||||
path: '/etc/aliases'
|
||||
insertafter: 'EOF'
|
||||
regexp: '^root:.*'
|
||||
line: 'root: {{ somta__e_mail_default_recipient_addr_spec }}'
|
||||
notify:
|
||||
- 'Ensure that a Mail Transfer Agent is running with newest config'
|
||||
|
||||
# Add our own config block to the end of Postfix' main.cf file. In
|
||||
# 'ansible.builtin.blockinfile' we use the default 'marker' param '#
|
||||
# {mark} ANSIBLE MANAGED BLOCK'. We 'insertafter: EOF' so we know for a
|
||||
# fact that our config block is the bottommost thing in main.cf. The
|
||||
# next task 'ansible.builtin.replace' uses the marker string as an
|
||||
# anchor to comment out any duplicate parameters /before/ the marker.
|
||||
- name: 'Configure Postfix main.cf to SMTP-deliver e-mails to an upstream mail gateway'
|
||||
ansible.builtin.blockinfile:
|
||||
block: "{{ lookup('ansible.builtin.template', 'etc/postfix/main.cf.blockinfile.j2') }}"
|
||||
path: '/etc/postfix/main.cf'
|
||||
create: true
|
||||
insertafter: 'EOF'
|
||||
prepend_newline: true
|
||||
notify:
|
||||
- 'Ensure that a Mail Transfer Agent is running with newest config'
|
||||
|
||||
- name: 'In Postfix main.cf comment out params managed by this playbook; Postfix doesn''t like dupes'
|
||||
loop_control:
|
||||
label: 'Comment out unmanaged occurrences of param ''{{ item | regex_replace(''^(#\s?)?(?P<param>[^=\s]+)([^\r\n\f]*)'', ''\g<param>'') }}'''
|
||||
# Look up file content from our main.cf config template file. Split the
|
||||
# result by line delimiters into a list that contains each line as a
|
||||
# list item via Python string splitlines() method. Now that we have a
|
||||
# list apply the Jinja2 'select' filter to it. For each list item filter
|
||||
# it by using the Jinja2 built-in test 'search' against it to search for
|
||||
# an occurrence of the equals sign '=' in that list item. When a config
|
||||
# line (i.e. a list item) does not contain an equals sign we reject it
|
||||
# thus pruning it from the list. We lastly generate a new list from our
|
||||
# result, one that only contains lines where an equals sign appears.
|
||||
loop: '{{ lookup(''ansible.builtin.template'', ''etc/postfix/main.cf.blockinfile.j2'').splitlines() | select(''search'', ''='') | list }}'
|
||||
ansible.builtin.replace:
|
||||
path: '/etc/postfix/main.cf'
|
||||
before: '.*?# BEGIN ANSIBLE MANAGED BLOCK'
|
||||
# regex_replace each {{ item }}. Instead of one complete line from
|
||||
# the main.cf template file we only want the name of each parameter;
|
||||
# that's whatever appears in front of the first equals sign ('=') in
|
||||
# that line minus any comment markers ('#') we may have put in our
|
||||
# our main.cf template. Store the param name in a named capture
|
||||
# group (?P<param>...) - with a capital letter P because this
|
||||
# behavior is a Python-specific regex extension
|
||||
# (https://stackoverflow.com/a/10060065) - and lastly reuse
|
||||
# '\g<param>' as our 'regexp:' string.
|
||||
regexp: '^(#\s?)?({{ item | regex_replace(''^(#\s?)?(?P<param>[^=\s]+)([^\r\n\f]*)'', ''\g<param>'') }})'
|
||||
replace: '# \2'
|
||||
notify:
|
||||
- 'Ensure that a Mail Transfer Agent is running with newest config'
|
Reference in New Issue
Block a user