debops.postfix default variables

APT packages, version

postfix__base_packages

List of the default APT packages to install for Postfix support.

postfix__base_packages: [ 'postfix', 'postfix-pcre', 'bsd-mailx', 'make',
                          'ssl-cert', 'ca-certificates' ]
postfix__dependent_packages

List of additional APT packages requested by other Ansible roles via role dependent variables.

postfix__dependent_packages: []
postfix__packages

List of additional APT packages to install with Postfix.

postfix__packages: []
postfix__purge_packages

List of APT packages to purge when Postfix is installed, to remove the remnants of other SMTP services.

postfix__purge_packages: [ 'exim4-base', 'exim4-config',
                           'exim4-daemon-light', 'nullmailer' ]
postfix__version

The currently installed Postfix version. This variable is defined by the Ansible local facts and it's here for convenience, shouldn't be set manually.

postfix__version: '{{ ansible_local.postfix.version|d("0.0.0") }}'
postfix__doc_installed

The postfix-doc APT package modifies the /etc/postfix/main.cf configuration file directly, therefore the role takes its presence into account during configuration. The package presence is checked by the Ansible local facts.

postfix__doc_installed: '{{ ansible_local.postfix.doc_installed
                            if (ansible_local|d() and ansible_local.postfix|d() and
                                ansible_local.postfix.doc_installed is defined)
                            else False }}'

DNS, mail next-hop configuration

postfix__fqdn

The host's Fully Qualified Domain Name used in the Postfix configuration.

postfix__fqdn: '{{ ansible_fqdn }}'
postfix__domain

The host's DNS domain name used in the Postfix configuration.

postfix__domain: '{{ ansible_domain }}'
postfix__relayhost

Next-hop destination of non-local mail.

postfix__relayhost: ''
postfix__mailname

The name of this mail system, configured in /etc/mailname file. This name is used as the domain part in sender mail addresses that don't have one. See https://wiki.debian.org/EtcMailName for more details.

postfix__mailname: '{{ postfix__fqdn }}'

Firewall configuration

postfix__accept_any

Specofy the default firewall policy for Postfix services.

If True, any host can connect to the Postfix services unless allow restrictions are defined using the variables below.

If False, no hosts can connect to the Postfix services by default. You need to specify IP addresses or subnets that can access the services using the variables below.

postfix__accept_any: True
postfix_allow_smtp

List of hosts/networks that can access the smtp port (25).

postfix__allow_smtp: []
postfix_allow_submission

List of hosts/networks that can access the submission port (587).

postfix__allow_submission: []
postfix_allow_smtps

List of hosts/networks that can access the smtps port (465).

postfix__allow_smtps: []

PKI / TLS configuration

postfix__pki

Enable or disable support for TLS in Postfix, managed by the debops.pki Ansible role.

postfix__pki: '{{ ansible_local.pki.enabled|d() | bool }}'
postfix__pki_path

Absolute path to the directory where PKI realms are located.

postfix__pki_path: '{{ ansible_local.pki.path|d("/etc/pki/realms") }}'
postfix__pki_realm

Name of the default PKI realm used by Postfix.

postfix__pki_realm: '{{ ansible_local.pki.realm|d("domain") }}'
postfix__pki_ca

Name of the Root Certificate Authority certificate file used by Postfix, relative to the PKI realm directory.

postfix__pki_ca: '{{ ansible_local.pki.ca|d("CA.crt") }}'
postfix__pki_crt

Name of the certificate file used by Postfix, relative to the PKI realm directory.

postfix__pki_crt: '{{ ansible_local.pki.crt|d("default.crt") }}'
postfix__pki_key

Name of the private key file used by Postfix, relative to the PKI realm directory.

postfix__pki_key: '{{ ansible_local.pki.key|d("default.key") }}'
postfix__tls_ca_file

Absolute path of the Root Certificate Authority certificate file used in the Postfix configuration. This file should also be present in the Postfix chroot directory.

postfix__tls_ca_file: '/etc/ssl/certs/ca-certificates.crt'
postfix__tls_cert_file

Absolute path of the certificate file used in the Postfix configuration.

postfix__tls_cert_file: '{{ (postfix__pki_path + "/" + postfix__pki_realm + "/" + postfix__pki_crt)
                            if postfix__pki|bool else "/etc/ssl/certs/ssl-cert-snakeoil.pem" }}'
postfix__tls_key_file

Absolute path of the private key file used in the Postfix configuration.

postfix__tls_key_file: '{{ (postfix__pki_path + "/" + postfix__pki_realm + "/" + postfix__pki_key)
                           if postfix__pki|bool else "/etc/ssl/private/ssl-cert-snakeoil.key" }}'
postfix__pki_hook_name

Name of the hook script which will be stored in hook directory.

postfix__pki_hook_name: 'postfix'
postfix__pki_hook_path

Directory with PKI hooks.

postfix__pki_hook_path: '{{ ansible_local.pki.hooks|d("/etc/pki/hooks") }}'
postfix__pki_hook_action

Specify how changes in PKI should affect postfix, either 'reload' or 'restart'.

postfix__pki_hook_action: 'reload'

Diffie-Hellman parameters

postfix__dhparam

Enable or disable support for custom Diffie-Hellman parameters managed by the debops.dhparam Ansible role.

postfix__dhparam: '{{ ansible_local.dhparam.enabled
                      if (ansible_local|d() and ansible_local.dhparam|d() and
                          ansible_local.dhparam.enabled is defined)
                      else False }}'
postfix__dhparam_set

Name of the Diffie-Hellman parameter set to use in Postfix configuration. See debops.dhparam Ansible role for more details.

postfix__dhparam_set: 'default'
postfix__tls_dh1024_param_file

Absolute path to Diffie-Hellman parameters file which should be used for non-export grade connections.

postfix__tls_dh1024_param_file: '{{ ansible_local.dhparam[postfix__dhparam_set]
                                    if (ansible_local|d() and ansible_local.dhparam|d() and
                                        ansible_local.dhparam[postfix__dhparam_set]|d())
                                    else "" }}'
postfix__tls_dh512_param_file

Absolute path to Diffie-Hellman parameters file which should be used for export grade connections.

postfix__tls_dh512_param_file: '{{ ansible_local.dhparam[postfix__dhparam_set]
                                   if (ansible_local|d() and ansible_local.dhparam|d() and
                                       ansible_local.dhparam[postfix__dhparam_set]|d())
                                   else "" }}'

Postfix 'main.cf' configuration

These variables define the contents of the /etc/postfix/main.cf configuration file. See Default variable details: postfix__maincf for more details.

postfix__original_maincf

List of options defined by the Debian postfix package when the default "Internet Site" configuration type is selected during installation. This list is used as the base configuration.

postfix__original_maincf:

  - name: 'myorigin_example'
    option: 'myorigin'
    value: '/etc/mailname'
    comment: |
      Debian specific:  Specifying a file name will cause the first
      line of that file to be used as the name.  The Debian default
      is /etc/mailname.
    state: 'comment'
    section: 'base'

  - name: 'smtpd_banner'
    value: '$myhostname ESMTP $mail_name (Debian/GNU)'
    section: 'base'

  - name: 'biff'
    value: False
    section: 'base'

  - name: 'append_dot_mydomain'
    value: False
    comment: "appending .domain is the MUA's job."
    section: 'base'

  - name: 'delay_warning_time'
    value: '4h'
    comment: 'Uncomment the next line to generate "delayed mail" warnings'
    state: 'comment'
    section: 'base'

  - name: 'readme_directory'
    value: '{{ "/usr/share/doc/postfix"
               if postfix__doc_installed|bool
               else False }}'
    section: 'base'

  - name: 'compatibility_level'
    value: 2
    comment: |
      See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
      fresh installs.
    section: 'base'
    state: '{{ "present"
               if (postfix__version is version_compare("3.0.0", ">="))
               else "ignore" }}'

  - name: 'smtpd_tls_cert_file'
    value: '{{ postfix__tls_cert_file }}'
    comment: 'TLS parameters'
    section: 'base'

  - name: 'smtpd_tls_key_file'
    value: '{{ postfix__tls_key_file }}'
    section: 'base'

  - name: 'smtpd_use_tls'
    value: True
    section: 'base'

  - name: 'smtpd_tls_session_cache_database'
    value: 'btree:${data_directory}/smtpd_scache'
    section: 'base'

  - name: 'smtp_tls_session_cache_database'
    value: 'btree:${data_directory}/smtp_scache'
    section: 'base'

  - name: 'smtp_tls_client_comment'
    comment: |
      See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
      information on enabling SSL in the smtp client.
    state: 'hidden'
    section: 'base'

  - name: 'smtpd_relay_restrictions'
    section: 'base'
    state: '{{ "present"
               if (postfix__version is version_compare("2.10.0", ">="))
               else "ignore" }}'
    value:

      - name: 'permit_mynetworks'
        weight: -300

      - name: 'permit_sasl_authenticated'
        weight: -200

      - name: 'defer_unauth_destination'
        weight: -100

  - name: 'myhostname'
    value: '{{ postfix__fqdn }}'
    section: 'base'

  - name: 'alias_maps'
    value: [ 'hash:/etc/aliases' ]
    section: 'base'

  - name: 'alias_database'
    value: [ 'hash:/etc/aliases' ]
    section: 'base'

  - name: 'myorigin'
    value: '/etc/mailname'
    section: 'base'

  - name: 'mydestination'
    section: 'base'
    value:

      - '{{ postfix__fqdn }}'

      - name: 'localhost.{{ postfix__domain }}'
        weight: 190

      - name: 'localhost'
        weight: 200

  - name: 'relayhost'
    value: '{{ postfix__relayhost }}'
    section: 'base'

  - name: 'mynetworks'
    section: 'base'
    value:

      - name: '127.0.0.0/8'
        weight: 100

      - name: '::ffff:127.0.0.0/104'
        weight: 100

      - name: '::1/128'
        weight: 100

  - name: 'mailbox_size_limit'
    value: 0
    section: 'base'

  - name: 'recipient_delimiter'
    value: '+'
    section: 'base'

  - name: 'inet_interfaces'
    value: 'all'
    section: 'base'

  - name: 'inet_protocols'
    value: 'all'
    section: 'base'
    state: '{{ "present"
               if (ansible_distribution_release == "stretch")
               else "ignore" }}'

  - name: 'html_directory'
    value: '{{ "/usr/share/doc/postfix/html"
               if postfix__doc_installed|bool
               else False }}'
    section: 'base'
postfix__default_maincf

The list of Postfix /etc/postfix/main.cf configuration file options defined by default by the debops.postfix Ansible role.

postfix__default_maincf:

  - name: 'smtpd_banner'
    value: '$myhostname ESMTP'

  - name: 'enable_long_queue_ids'
    value: True
    section: 'base'
    state: '{{ "present"
               if (postfix__version is version_compare("2.9.0", ">="))
               else "ignore" }}'
postfix__tls_maincf

The list of Postfix /etc/postfix/main.cf configuration file options defined by default by the debops.postfix Ansible role which configure TLS/SSL encryption.

postfix__tls_maincf:

  - name: 'smtp_tls_client_comment'
    state: 'absent'

  - name: 'smtpd_use_tls'
    section: 'smtpd-tls'
    weight: -500

  - name: 'smtpd_tls_cert_file'
    section: 'smtpd-tls'
    comment: ''

  - name: 'smtpd_tls_key_file'
    section: 'smtpd-tls'

  - name: 'smtpd_tls_CAfile'
    value: '{{ postfix__tls_ca_file }}'
    section: 'smtpd-tls'

  - name: 'smtp_tls_CAfile'
    value: '{{ postfix__tls_ca_file }}'
    section: 'smtp-tls'

  - name: 'lmtp_tls_CAfile'
    value: '{{ postfix__tls_ca_file }}'
    section: 'lmtp-tls'

  - name: 'smtpd_tls_session_cache_database'
    section: 'smtpd-tls'

  - name: 'smtp_tls_session_cache_database'
    section: 'smtp-tls'

  - name: 'lmtp_tls_session_cache_database'
    value: 'btree:${data_directory}/lmtp_scache'
    section: 'lmtp-tls'

  - name: 'smtpd_tls_dh1024_param_file'
    value: '{{ postfix__tls_dh1024_param_file }}'
    state: '{{ "present" if postfix__dhparam|bool else "ignore" }}'
    section: 'smtpd-tls'

  - name: 'smtpd_tls_dh512_param_file'
    value: '{{ postfix__tls_dh512_param_file }}'
    state: '{{ "present" if postfix__dhparam|bool else "ignore" }}'
    section: 'smtpd-tls'

  - name: 'smtpd_tls_loglevel'
    value: 1
    section: 'smtpd-tls'

  - name: 'smtp_tls_loglevel'
    value: 1
    section: 'smtp-tls'

  - name: 'lmtp_tls_loglevel'
    value: 1
    section: 'lmtp-tls'

  - name: 'smtpd_tls_security_level'
    value: 'may'
    section: 'smtpd-tls'
    weight: -500

  - name: 'smtp_tls_security_level'
    value: 'may'
    section: 'smtp-tls'
    weight: -500

  - name: 'lmtp_tls_security_level'
    value: 'may'
    section: 'lmtp-tls'
    weight: -500

  - name: 'smtpd_tls_auth_only'
    value: True
    section: 'smtpd-tls'

  - name: 'smtpd_tls_protocols'
    value: [ '!SSLv2', '!SSLv3', '!TLSv1', 'TLSv1.1', 'TLSv1.2' ]
    section: 'smtpd-tls'

  - name: 'smtp_tls_protocols'
    value: [ '!SSLv2', '!SSLv3', '!TLSv1', 'TLSv1.1', 'TLSv1.2' ]
    section: 'smtp-tls'

  - name: 'lmtp_tls_protocols'
    value: [ '!SSLv2', '!SSLv3', '!TLSv1', 'TLSv1.1', 'TLSv1.2' ]
    section: 'lmtp-tls'

  - name: 'smtpd_tls_mandatory_protocols'
    value: [ '!SSLv2', '!SSLv3', '!TLSv1', 'TLSv1.1', 'TLSv1.2' ]
    section: 'smtpd-tls'

  - name: 'smtp_tls_mandatory_protocols'
    value: [ '!SSLv2', '!SSLv3', '!TLSv1', 'TLSv1.1', 'TLSv1.2' ]
    section: 'smtp-tls'

  - name: 'lmtp_tls_mandatory_protocols'
    value: [ '!SSLv2', '!SSLv3', '!TLSv1', 'TLSv1.1', 'TLSv1.2' ]
    section: 'lmtp-tls'

  - name: 'smtpd_tls_ciphers'
    value: 'high'
    section: 'smtpd-tls'

  - name: 'smtp_tls_ciphers'
    value: 'high'
    section: 'smtp-tls'

  - name: 'lmtp_tls_ciphers'
    value: 'high'
    section: 'lmtp-tls'

  - name: 'smtpd_tls_mandatory_ciphers'
    value: 'high'
    section: 'smtpd-tls'

  - name: 'smtp_tls_mandatory_ciphers'
    value: 'high'
    section: 'smtp-tls'

  - name: 'lmtp_tls_mandatory_ciphers'
    value: 'high'
    section: 'lmtp-tls'

  - name: 'smtpd_tls_exclude_ciphers'
    value: [ 'aNULL', 'RC4', 'MD5', 'DES', '3DES', 'RSA', 'SHA' ]
    section: 'smtpd-tls'

  - name: 'smtp_tls_exclude_ciphers'
    value: [ 'aNULL', 'RC4', 'MD5', 'DES', '3DES', 'RSA', 'SHA' ]
    section: 'smtp-tls'

  - name: 'lmtp_tls_exclude_ciphers'
    value: [ 'aNULL', 'RC4', 'MD5', 'DES', '3DES', 'RSA', 'SHA' ]
    section: 'lmtp-tls'

  - name: 'smtpd_tls_eecdh_grade'
    value: 'ultra'
    section: 'smtpd-tls'

  - name: 'smtpd_tls_received_header'
    value: True
    section: 'smtpd-tls'

  - name: 'smtp_tls_note_starttls_offer'
    value: True
    section: 'smtp-tls'

  - name: 'lmtp_tls_note_starttls_offer'
    value: True
    section: 'lmtp-tls'

  - name: 'tls_preempt_cipherlist'
    value: True
    section: 'tls'

  - name: 'tls_ssl_options'
    value: 'NO_COMPRESSION'
    section: 'tls'
    state: '{{ "present"
              if (postfix__version is version_compare("2.11.0", ">="))
              else "ignore" }}'
postfix__restrictions_maincf

The list of Postfix /etc/postfix/main.cf configuration file options defined by default by the debops.postfix Ansible role which configure mail relay and delivery restrictions.

postfix__restrictions_maincf:

  - name: 'smtpd_helo_required'
    value: True
    section: 'restrictions'

  - name: 'strict_rfc821_envelopes'
    value: True
    section: 'restrictions'

  - name: 'smtpd_reject_unlisted_sender'
    value: True
    section: 'restrictions'

  - name: 'disable_vrfy_command'
    value: True
    section: 'restrictions'

  - name: 'smtpd_client_restrictions'
    section: 'restrictions'
    weight: 10
    separator: True

  - name: 'smtpd_helo_restrictions'
    section: 'restrictions'
    weight: 20
    value:

      - name: 'permit_mynetworks'
        weight: -400

      - name: 'reject_invalid_helo_hostname'
        weight: -300

      - name: 'reject_non_fqdn_helo_hostname'
        weight: -200

      - name: 'reject_unknown_helo_hostname'
        weight: -100

  - name: 'smtpd_sender_restrictions'
    section: 'restrictions'
    weight: 30
    value:

      - name: 'reject_non_fqdn_sender'
        weight: -200

      - name: 'reject_unknown_sender_domain'
        weight: -100

      - name: 'permit_mynetworks'

  - name: 'smtpd_relay_restrictions'
    section: 'restrictions'
    copy_id_from: 'smtpd_sender_restrictions'
    weight: 40
    state: '{{ "present"
               if (postfix__version is version_compare("2.10.0", ">="))
               else "ignore" }}'

  - name: 'smtpd_recipient_restrictions'
    section: 'restrictions'
    weight: 50
    value:

      - name: 'reject_non_fqdn_recipient'
        weight: -200
      - name: 'reject_unknown_recipient_domain'
        weight: -100

  - name: 'smtpd_data_restrictions'
    section: 'restrictions'
    weight: 60
    value:

      - name: 'reject_unauth_pipelining'
        weight: -200
      - name: 'reject_multi_recipient_bounce'
        weight: -100
postfix__maincf

The list of Postfix /etc/postfix/main.cf configuration file options which should be present on all hosts in the Ansible inventory.

postfix__maincf: []
postfix__group_maincf

The list of Postfix /etc/postfix/main.cf configuration file options which should be present on hosts in the specific Ansible inventory group.

postfix__group_maincf: []
postfix__host_maincf

The list of Postfix /etc/postfix/main.cf configuration file options which should be present on specific hosts in the Ansible inventory.

postfix__host_maincf: []
postfix__dependent_maincf

List of the /etc/postfix/main.cf configuration options defined by other roles through role dependent variables. The configuration syntax differs from a normal main.cf configuration, see Usage as a role dependency for more details. This variable will be merged with the persistent configuration stored on the Ansible Controller at runtime.

postfix__dependent_maincf: []
postfix__combined_maincf

List which combines all of the main.cf-related variables and is used in the configuration template.

postfix__combined_maincf: '{{ postfix__original_maincf
                              + postfix__default_maincf
                              + postfix__tls_maincf
                              + postfix__restrictions_maincf
                              + postfix__env_persistent_maincf
                              + postfix__maincf
                              + postfix__group_maincf
                              + postfix__host_maincf }}'
postfix__init_maincf

This variable contains initial state of main.cf configuration options based on the contents of :envvar:`postfix__combined_maincf variable. It's used to dynamically assign Postfix options to configuration file sections in case that a section is not specified.

postfix__init_maincf: '{{ lookup("template",
                          "lookup/postfix__init_maincf.j2") }}'
postfix__maincf_sections

List of configuration sections which are defined in the /etc/postfix/main.cf configuration file. See postfix__maincf_sections for more details.

postfix__maincf_sections:

  - name: 'base'

  - name: 'auth'
    title: 'Authentication and authorization'

  - name: 'route'
    title: 'Message routing'

  - name: 'virtual'
    title: 'Virtual mail configuration'

  - name: 'tls'
    title: 'TLS/SSL configuration'

  - name: 'smtpd-tls'
    title: 'SMTP Server (smtpd) TLS configuration'

  - name: 'smtp-tls'
    title: 'SMTP Client (smtp) TLS configuration'

  - name: 'lmtp-tls'
    title: 'Local Mail Transfer Protocol (lmtp) TLS configuration'

  - name: 'postscreen'
    title: 'postscreen options'

  - name: 'restrictions'
    title: 'SMTP Server (smtpd) restrictions'

  - name: 'filter'
    title: 'Mail filtering configuration'

  - name: 'limit'
    title: 'Rate limits'

  - name: 'unknown'
    title: 'Other options'

Postfix 'master.cf' configuration

These variables define the contents of the /etc/postfix/master.cf configuration file. See Default variable details: postfix__mastercf for more details.

postfix__original_mastercf

List of options defined by the Debian postfix package when the default "Internet Site" configuration type is selected during installation. This list is used as the base configuration.

postfix__original_mastercf:

  - name: 'smtp'
    type: 'inet'
    private: False
    chroot: True
    command: 'smtpd'

  - name: 'postscreen'
    service: 'smtp'
    type: 'inet'
    private: False
    chroot: True
    maxproc: 1
    command: 'postscreen'
    state: 'comment'

  - name: 'smtpd'
    type: 'pass'
    chroot: True
    state: 'comment'

  - name: 'dnsblog'
    type: 'unix'
    chroot: True
    maxproc: 0
    state: 'comment'

  - name: 'tlsproxy'
    type: 'unix'
    chroot: True
    maxproc: 0
    state: 'comment'

  - name: 'submission'
    type: 'inet'
    private: False
    chroot: True
    command: 'smtpd'
    state: 'comment'
    options:

      - syslog_name: 'postfix/submission'
      - smtpd_tls_security_level: 'encrypt'
      - smtpd_sasl_auth_enable: True
      - smtpd_reject_unlisted_recipient: False

      - name: 'smtpd_client_restrictions'
        value: '$mua_client_restrictions'
        state: 'comment'

      - name: 'smtpd_helo_restrictions'
        value: '$mua_helo_restrictions'
        state: 'comment'

      - name: 'smtpd_sender_restrictions'
        value: '$mua_sender_restrictions'
        state: 'comment'

      - smtpd_recipient_restrictions: ''

      - name: 'smtpd_relay_restrictions'
        value: [ 'permit_sasl_authenticated', 'reject' ]
        state: '{{ "present"
                  if (postfix__version is version_compare("2.10.0", ">="))
                  else "ignore" }}'

      - milter_macro_daemon_name: 'ORIGINATING'

  - name: 'smtps'
    type: 'inet'
    private: False
    chroot: True
    command: 'smtpd'
    state: 'comment'
    options:

      - syslog_name: 'postfix/smtps'
      - smtpd_tls_wrappermode: True
      - smtpd_sasl_auth_enable: True
      - smtpd_reject_unlisted_recipient: False

      - name: 'smtpd_client_restrictions'
        value: '$mua_client_restrictions'
        state: 'comment'

      - name: 'smtpd_helo_restrictions'
        value: '$mua_helo_restrictions'
        state: 'comment'

      - name: 'smtpd_sender_restrictions'
        value: '$mua_sender_restrictions'
        state: 'comment'

      - smtpd_recipient_restrictions: ''

      - name: 'smtpd_relay_restrictions'
        value: [ 'permit_sasl_authenticated', 'reject' ]
        state: '{{ "present"
                  if (postfix__version is version_compare("2.10.0", ">="))
                  else "ignore" }}'

      - milter_macro_daemon_name: 'ORIGINATING'

  - name: 'qmqp'
    service: '628'
    type: 'inet'
    private: False
    chroot: True
    command: 'qmqpd'
    state: 'comment'

  - name: 'pickup'
    type: 'unix'
    private: False
    chroot: True
    wakeup: 60
    maxproc: 1

  - name: 'cleanup'
    type: 'unix'
    private: False
    chroot: True
    maxproc: 0

  - name: 'qmgr'
    type: 'unix'
    private: False
    chroot: False
    wakeup: 300
    maxproc: 1

  - name: 'oqmgr'
    service: 'qmgr'
    type: 'unix'
    private: False
    chroot: False
    wakeup: 300
    maxproc: 1
    command: 'oqmgr'
    state: 'comment'

  - name: 'tlsmgr'
    type: 'unix'
    chroot: True
    wakeup: '1000?'
    maxproc: 1

  - name: 'rewrite'
    type: 'unix'
    chroot: True
    command: 'trivial-rewrite'

  - name: 'bounce'
    type: 'unix'
    chroot: True
    maxproc: 0

  - name: 'defer'
    type: 'unix'
    chroot: True
    maxproc: 0
    command: 'bounce'

  - name: 'trace'
    type: 'unix'
    chroot: True
    maxproc: 0
    command: 'bounce'

  - name: 'verify'
    type: 'unix'
    chroot: True
    maxproc: 1

  - name: 'flush'
    type: 'unix'
    private: False
    chroot: True
    wakeup: '1000?'
    maxproc: 0

  - name: 'proxymap'
    type: 'unix'
    chroot: False

  - name: 'proxywrite'
    type: 'unix'
    chroot: False
    maxproc: 1
    command: 'proxymap'

  - name: 'smtp_unix'
    service: 'smtp'
    type: 'unix'
    chroot: True
    command: 'smtp'

  - name: 'relay'
    type: 'unix'
    chroot: True
    command: 'smtp'
    options:

      - name: 'smtp_helo_timeout'
        value: 5
        state: 'comment'

      - name: 'smtp_connect_timeout'
        value: 5
        state: 'comment'

  - name: 'showq'
    type: 'unix'
    chroot: True
    private: False

  - name: 'error'
    type: 'unix'
    chroot: True

  - name: 'retry'
    type: 'unix'
    chroot: True
    command: 'error'

  - name: 'discard'
    type: 'unix'
    chroot: True

  - name: 'local'
    type: 'unix'
    unpriv: False
    chroot: False

  - name: 'virtual'
    type: 'unix'
    unpriv: False
    chroot: False

  - name: 'lmtp'
    type: 'unix'
    chroot: True

  - name: 'anvil'
    type: 'unix'
    chroot: True
    maxproc: 1

  - name: 'scache'
    type: 'unix'
    chroot: True
    maxproc: 1

  - name: 'non-postfix-sftware'
    comment: |
      ====================================================================
      Interfaces to non-Postfix software. Be sure to examine the manual
      pages of the non-Postfix software to find out what options it wants.

      Many of the following services use the Postfix pipe(8) delivery
      agent.  See the pipe(8) man page for information about ${recipient}
      and other message envelope options.
      ====================================================================
    state: 'hidden'

  - name: 'maildrop'
    comment: |
      maildrop. See the Postfix MAILDROP_README file for details.
      Also specify in main.cf: maildrop_destination_recipient_limit=1
    type: 'unix'
    unpriv: False
    chroot: False
    command: 'pipe'
    args: 'flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}'

  - name: 'cyrus-lmtp-note'
    comment: |
      ====================================================================

      Recent Cyrus versions can use the existing "lmtp" master.cf entry.

      Specify in cyrus.conf:
        lmtp    cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4

      Specify in main.cf one or more of the following:
       mailbox_transport = lmtp:inet:localhost
       virtual_transport = lmtp:inet:localhost

      ====================================================================
    state: 'hidden'

  - name: 'cyrus'
    comment: |
      Cyrus 2.1.5 (Amos Gouaux)
      Also specify in main.cf: cyrus_destination_recipient_limit=1
    type: 'unix'
    unpriv: False
    chroot: False
    command: 'pipe'
    args: 'user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}'
    state: 'comment'

  - name: 'old-cyrus'
    comment: |
      ====================================================================
      Old example of delivery via Cyrus.
    type: 'unix'
    unpriv: False
    chroot: False
    command: 'pipe'
    args: 'flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}'
    state: 'comment'

  - name: 'uucp'
    comment: |
      ====================================================================

      See the Postfix UUCP_README file for configuration details.
    type: 'unix'
    unpriv: False
    chroot: False
    command: 'pipe'
    args: 'flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)'

  - name: 'other-delivery-methods'
    comment: 'Other external delivery methods.'
    state: 'hidden'

  - name: 'ifmail'
    type: 'unix'
    unpriv: False
    chroot: False
    command: 'pipe'
    args: 'flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)'

  - name: 'bsmtp'
    type: 'unix'
    unpriv: False
    chroot: False
    command: 'pipe'
    args: 'flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient'

  - name: 'scalemail-backend'
    type: 'unix'
    unpriv: False
    chroot: False
    maxproc: 2
    command: 'pipe'
    args: 'flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}'

  - name: 'mailman'
    type: 'unix'
    unpriv: False
    chroot: False
    args: |
      flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
      ${nexthop} ${user}
    command: 'pipe'
postfix__default_mastercf

The list of Postfix /etc/postfix/master.cf configuration file options defined by default by the debops.postfix Ansible role.

postfix__default_mastercf: []
postfix__tls_mastercf

The list of Postfix /etc/postfix/master.cf configuration file options defined by default by the debops.postfix Ansible role which configure TLS/SSL encryption.

postfix__tls_mastercf:

  - name: 'submission'
    options:
      - tls_preempt_cipherlist: True

  - name: 'smtps'
    options:
      - tls_preempt_cipherlist: True
postfix__mastercf

The list of Postfix /etc/postfix/master.cf configuration file options which should be present on all hosts in the Ansible inventory.

postfix__mastercf: []
postfix__group_mastercf

The list of Postfix /etc/postfix/master.cf configuration file options which should be present on hosts in the specific Ansible inventory group.

postfix__group_mastercf: []
postfix__host_mastercf

The list of Postfix /etc/postfix/master.cf configuration file options which should be present on specific hosts in the Ansible inventory.

postfix__host_mastercf: []
postfix__dependent_mastercf

List of the /etc/postfix/master.cf configuration options defined by other roles through role dependent variables. The configuration syntax differs from a normal master.cf configuration, see Usage as a role dependency for more details. This variable will be merged with the persistent configuration stored on the Ansible Controller at runtime.

postfix__dependent_mastercf: []
postfix__combined_mastercf

List which combines all of the master.cf-related variables and is used in the configuration template.

postfix__combined_mastercf: '{{ postfix__original_mastercf
                                + postfix__default_mastercf
                                + postfix__tls_mastercf
                                + postfix__env_persistent_mastercf
                                + postfix__mastercf
                                + postfix__group_mastercf
                                + postfix__host_mastercf }}'

Postfix lookup tables

These variables define the contents of the various Postfix lookup tables which will be placed in the /etc/postfix/ directory. See postfix__lookup_tables for more details.

postfix__lookup_tables

List of lookup tables which will be managed on all hosts in the Ansible inventory.

postfix__lookup_tables: []
postfix__group_lookup_tables

List of lookup tables which will be managed on hosts in specific Ansible inventory group.

postfix__group_lookup_tables: []
postfix__host_lookup_tables

List of lookup tables which will be managed on specific hosts in the Ansible inventory.

postfix__host_lookup_tables: []
postfix__dependent_lookup_tables

List of lookup tables which are defined by other Ansible roles through role dependent variables.

postfix__dependent_lookup_tables: []
postfix__dependent_lookup_tables_filter

This variable filters the configuration defined by other Ansible roles to be usable with the rest of the lookup tables configuration.

postfix__dependent_lookup_tables_filter: '{{ lookup("flattened",
                                             postfix__dependent_lookup_tables) }}'
postfix__combined_lookup_tables

Variable which combines all lookup table lists and passes them to the Ansible tasks. It also defines the order in which the entries are processed.

postfix__combined_lookup_tables: '{{ ([ postfix__dependent_lookup_tables_filter ]
                                      if postfix__dependent_lookup_tables_filter is mapping
                                      else postfix__dependent_lookup_tables_filter)
                                     + postfix__lookup_tables
                                     + postfix__group_lookup_tables
                                     + postfix__host_lookup_tables }}'

Configuration for other Ansible roles

postfix__ferm__dependent_rules

Configuration for the debops.ferm Ansible role.

postfix__ferm__dependent_rules:

  - name: 'postfix_smtp'
    type: 'accept'
    by_role: 'debops.postfix'
    dport: [ 'smtp' ]
    saddr: '{{ postfix__allow_smtp }}'
    accept_any: '{{ postfix__accept_any }}'
    rule_state: '{{ "present"
                    if ("smtp" in postfix__env_active_services|d([]))
                    else "absent" }}'

  - name: 'postfix_smtps'
    type: 'accept'
    by_role: 'debops.postfix'
    dport: [ 'smtps' ]
    saddr: '{{ postfix__allow_smtps }}'
    accept_any: '{{ postfix__accept_any }}'
    rule_state: '{{ "present"
                    if ("smtps" in postfix__env_active_services|d([]))
                    else "absent" }}'

  - name: 'postfix_submission'
    type: 'accept'
    by_role: 'debops.postfix'
    dport: [ 'submission' ]
    saddr: '{{ postfix__allow_submission }}'
    accept_any: '{{ postfix__accept_any }}'
    rule_state: '{{ "present"
                    if ("submission" in postfix__env_active_services|d([]))
                    else "absent" }}'