Version information
This version is compatible with:
- Puppet Enterprise 2023.8.x, 2023.7.x, 2023.6.x, 2023.5.x, 2023.4.x, 2023.3.x, 2023.2.x, 2023.1.x, 2023.0.x, 2021.7.x, 2021.6.x, 2021.5.x, 2021.4.x, 2021.3.x, 2021.2.x, 2021.1.x, 2021.0.x
- Puppet >= 7.0.0 < 9.0.0
- Alpine, , , , , , , ,
Start using this module
Add this module to your Puppetfile:
mod 'puppet-postfix', '5.0.0'
Learn more about managing modules with a PuppetfileDocumentation
Postfix Puppet Module
Features
- Configure postfix as mta or satellite
- Support for amavis scanner config
- Dovecot as the local delivery agent config
- Support Schleuder GPG-enabled mailing list
- Sympa mailing list management software
- Support for mailman
- Support for LDAP
Supported OS
See metadata.json for supported OS versions.
Dependencies
See metadata.json for dependencies.
Puppet
The supported Puppet versions are listed in the metadata.json
REFERENCES
Please see REFERENCE.md for more details.
Contributing
Please report bugs and feature request using GitHub issue tracker.
For pull requests, it is very much appreciated to check your Puppet manifest with puppet-lint to follow the recommended Puppet style guidelines from the Puppet Labs style guide.
Transfer Notice
This plugin was originally authored by Camptocamp. The maintainer preferred that Puppet Community take ownership of the module for future improvement and maintenance. Existing pull requests and issues were transferred over, please fork and continue to contribute here instead of Camptocamp.
Previously: https://github.com/camptocamp/puppet-postfix
Reference
Table of Contents
Classes
Public Classes
postfix
: The top-level class, to install and configure Postfix
Private Classes
postfix::files
: Manages the Postfix related filespostfix::ldap
: Provides the Postfix LDAP supportpostfix::mailman
: Configure Postfix to work with mailmanpostfix::mta
: Configures Postfix as minimal MTApostfix::packages
: Install the required packages for postfixpostfix::params
: Default parameterspostfix::satellite
: Configure Postfix as satellitepostfix::service
: Manage service resources for postfix
Defined types
postfix::canonical
: Manage content of the Postfix canonical mappostfix::conffile
: Manage a Postfix configuration filepostfix::config
: Set values in Postfix config filepostfix::hash
: Creates Postfix hashed "map" files, and builds the corresponding db filepostfix::mailalias
: Manage the content of the Postfix alias mappostfix::map
: Create a Postfix map filepostfix::transport
: Manage the transport map of postfixpostfix::virtual
: Manages the contents of the virtual map.
Classes
postfix
This class provides a basic setup of Postfix with local and remote delivery and an SMTP server listening on the loopback interface.
Examples
Default Postfix with listen address
class { 'postfix':
smtp_listen => '192.168.1.10',
}
Minimal MTA setup
# This class configures a minimal MTA, delivering mail to
# $mydestination. Either a valid relay host or the special
# word 'direct' is required ($relayhost) for outbound email.
#
# transport & virtual maps get configured and can be populated with
# postfix::transport and postfix::virtual
#
class { 'postfix':
relayhost => 'mail.example.com',
smtp_listen => '0.0.0.0',
mydestination => '$myorigin, myapp.example.com',
mta => true,
}
Configure Postfix as satellite
# This configures all local email (cron, mdadm, etc) to be forwarded
# to $root_mail_recipient, using $relayhost as a relay.
#
# This will call postfix::mta and override its parameters.
# You shouldn't call postfix::mta yourself or use mta=true in the postfix class.
class { 'postfix':
relayhost => 'mail.example.com',
myorigin => 'toto.example.com',
root_mail_recipient => 'the.sysadmin@example.com',
satellite => true,
}
Parameters
The following parameters are available in the postfix
class:
alias_maps
amavis_procs
chroot
confdir
conffiles
configs
hashes
inet_interfaces
inet_protocols
ldap
ldap_base
ldap_host
ldap_options
ldap_packages
lookup_table_type
mailaliases
mail_user
mailman
mailx_ensure
maincf_source
manage_aliases
manage_conffiles
manage_mailname
manage_mailx
manage_root_alias
maps
master_bounce_command
master_defer_command
master_entries
master_smtp
master_smtps
master_submission
mastercf_content
mastercf_source
mastercf_template
masquerade_classes
masquerade_domains
masquerade_exceptions
mta
mydestination
mynetworks
myorigin
postfix_ensure
relayhost
root_group
root_mail_recipient
satellite
service_enabled
service_ensure
smtp_listen
transports
use_amavisd
use_dovecot_lda
use_schleuder
use_sympa
virtuals
alias_maps
Data type: String
A string defining the location of the alias map file.
Example: hash:/etc/other_aliases
Default value: 'hash:/etc/aliases'
amavis_procs
Data type: Integer
Number of amavis scanner processes to spawn
Default value: 2
chroot
Data type: Optional[Boolean]
A boolean to define if Postfix should be run in a chroot jail or not.
If not defined, '-' is used (OS dependant)
Example: true
Default value: undef
confdir
Data type: Stdlib::Absolutepath
The base path which should be used as confdir
Default value: '/etc/postfix'
conffiles
Data type: Hash
A hash of postfix::conffile resources
Default value: {}
configs
Data type: Hash
A hash of postfix::config resources. The hash containing optional configuration values for main.cf.
The values are configured using postfix::config.
Example: {'message_size_limit': {'value': '51200000'}}
Default value: {}
hashes
Data type: Hash
A hash of postfix::hash resources
Default value: {}
inet_interfaces
Data type: String
A string defining the network interfaces that Postfix will listen on.
Example: 127.0.0.1, [::1]
Default value: 'all'
inet_protocols
Data type: String
A string defining the internet protocols that Postfix will use.
Example: ipv4
Default value: 'all'
ldap
Data type: Boolean
A Boolean defining whether to configure Postfix for LDAP use.
Default value: false
ldap_base
Data type: Optional[String]
A string defining the LDAP search base to use. This parameter maps to the
search_base parameter (ldap_table(5)).
Example: cn=Users,dc=example,dc=com
Default value: undef
ldap_host
Data type: Optional[String]
A string defining the LDAP host. This parameter maps to the server_host parameter (ldap_table(5)).
Example: ldaps://ldap.example.com:636 ldap://ldap2.example.com
.
Default value: undef
ldap_options
Data type: Optional[String]
A free form string that can define any LDAP options to be passed through (ldap_table(5)).
Example: start_tls = yes
.
Default value: undef
ldap_packages
Data type: Array[String[1]]
An array of package names to install for LDAP support if $ldap is true.
Default value: []
lookup_table_type
Data type: String
Table format type as described in http://www.postfix.org/DATABASE_README.html#types. Type has to be supported by system, see "postconf -m" for supported types.
Default value: 'hash'
mailaliases
Data type: Hash
A hash of postfix::mailalias resources. The hash containing optional configuration values for main.cf.
The values are configured using postfix::mailalias.
Example: {'nobody': {'ensure': 'present', 'recipient': 'root'}}
Default value: {}
mail_user
Data type: String
A string defining the mail user, and optionally group, to execute external commands as.
This parameter maps to the user parameter (pipe(8)).
Example: vmail:vmail
.
Default value: 'vmail'
mailman
Data type: Boolean
A Boolean defining whether to configure a basic smtp server that is able to work for the mailman mailing list manager.
Default value: false
mailx_ensure
Data type: String
Installs mailx package
Default value: 'present'
maincf_source
Data type: String
A string defining the location of a skeleton main.cf file to be used. The default file
supplied is blank. However, if the main.cf file already exists on the system the contents
will NOT be replaced by the contents from maincf_source.
Example: puppet:///modules/some/other/location/main.cf
.
Default value: "puppet:///modules/${module_name}/main.cf"
manage_aliases
Data type: Boolean
Manage /etc/aliases file
Default value: true
manage_conffiles
Data type: Boolean
A Boolean defining whether the puppet module should replace the configuration files for postfix. This setting currently effects only the following files:
- /etc/mailname
- /etc/postfix/master.cf
This setting does NOT effect the following files:
- /etc/aliases
- /etc/postfix/main.cf
Default value: true
manage_mailname
Data type: Boolean
A Boolean defining whether the puppet module should manage '/etc/mailname'. See also $manage_conffiles
Default value: true
manage_mailx
Data type: Boolean
A Boolean defining whether the puppet module should manage the mailx package. See also $mailx_ensure.
Default value: true
manage_root_alias
Data type: Boolean
Wheter to manage the mailalias for root user
Default value: true
maps
Data type: Hash
A hash of postfix::map resources
Default value: {}
master_bounce_command
Data type: String
The bounce command which should be used in master.cf
Default value: 'bounce'
master_defer_command
Data type: String
The defer command which should be used in master.cf
Default value: 'bounce'
master_entries
Data type: Array[String]
Array of strings containing additional entries for the /etc/postfix/master.cf file.
Example: ['submission inet n - n - - smtpd']
.
Default value: []
master_smtp
Data type: Optional[String]
A string to define the smtp line in the /etc/postfix/master.cf file.
If this is defined the smtp_listen parameter will be ignored.
Example: smtp inet n - n - - smtpd
.
Default value: undef
master_smtps
Data type: Optional[String]
A string to define the smtps line in the /etc/postfix/master.cf file.
Example: smtps inet n - n - - smtpd
.
Default value: undef
master_submission
Data type: Optional[String]
A string to define the submission line in the /etc/postfix/master.cf file.
Example: submission inet n - n - - smtpd
.
Default value: undef
mastercf_content
Data type: Optional[String]
Set the content parameter for the master.cf file resource.
Default value: undef
mastercf_source
Data type: Optional[String]
A string defining the location of a skeleton master.cf file to be used.
Example: puppet:///modules/some/other/location/master.cf
.
Default value: undef
mastercf_template
Data type: Optional[String]
Set the epp template path which will be used for master.cf file resource.
Default value: undef
masquerade_classes
Data type: Optional[Array[String[1]]]
Postfix config parameter masquerade_classes as an array.
What addresses are subject to address masquerading.
Example: ['envelope_sender', 'envelope_recipient', 'header_sender', 'header_recipient']
Default value: undef
masquerade_domains
Data type: Optional[Array[String[1]]]
An array defining the masquerade_domains to use.
The order of elements matters here, so be aware of how you define the elements.
Example: ['foo.example.com', 'example.com']
Default value: undef
masquerade_exceptions
Data type: Optional[Array[String[1]]]
An array defining the masquerade_exceptions to use. This optional list of user names that are not
subjected to address masquerading, even when their addresses match $masquerade_domains.
Example: ['root']
Default value: undef
mta
Data type: Boolean
A Boolean to define whether to configure Postfix as a mail transfer agent. This option is mutually exclusive with the satellite Boolean.
Default value: false
mydestination
Data type: String
A string to define the mydestination parameter in main.cf (postconf(5)).
Example: example.com, foo.example.com
.
Default value: '$myhostname, localhost.$mydomain, localhost'
mynetworks
Data type: String
A string to define the mynetworks parameter that holds trusted remote smtp clients (postconf(5)).
Example: 127.0.0.0/8, [::1]/128
.
Default value: '127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128'
myorigin
Data type: String
A string to define the myorigin parameter that holds the domain name that mail appears to come from (postconf(5)).
Example: example.com
Default value: $facts['networking']['fqdn']
postfix_ensure
Data type: String
The ensure value of the postfix package
Default value: 'present'
relayhost
Data type: Optional[String]
A string to define the relayhost parameter (postconf(5)).
Example: smtp.example.com
.
Default value: undef
root_group
Data type: String
The group permission name for the main.cf and master.cf files.
Default value: 'root'
root_mail_recipient
Data type: Variant[Array[String], String]
A string to define the e-mail address to which all mail directed to root should go (aliases(5)).
Example: root_catch@example.com
.
Default value: 'nobody'
satellite
Data type: Boolean
A Boolean to define whether to configure Postfix as a satellite relay host. This setting is mutually exclusive with the mta Boolean.
Default value: false
service_enabled
Data type: Boolean
Defines if the service 'postfix' is enabled on the system
Default value: true
service_ensure
Data type: String
Defines the service state of 'postfix' service
Default value: 'running'
smtp_listen
Data type: Variant[Array[String[1]], String[1]]
A string or an array of strings to define the IPs on which to listen in master.cf.
This can also be set to 'all' to listen on all interfaces. If master_smtp is defined
smtp_listen will not be used.
Example: ::1
.
Default value: '127.0.0.1'
transports
Data type: Hash
A hash of postfix::transport resources
Default value: {}
use_amavisd
Data type: Boolean
A Boolean to define whether to configure master.cf to allow the use of the amavisd scanner.
Default value: false
use_dovecot_lda
Data type: Boolean
A Boolean to define whether to configure master.cf to use dovecot as the local delivery agent.
Default value: false
use_schleuder
Data type: Variant[Integer[2, 3], Boolean]
A Boolean to define whether to configure master.cf to use the Schleuder GPG-enabled mailing list.
Can be also set to an integer 2
to use Schleuder v2 instead of v3.
Default value: false
use_sympa
Data type: Boolean
A Boolean to define whether to configure master.cf to use the Sympa mailing list management software.
Default value: false
virtuals
Data type: Hash
A hash of postfix::virtual resources
Default value: {}
Defined types
postfix::canonical
This type manages content of the /etc/postfix/canonical map.
Examples
Basic usage and required setup
# This defined type requires the following resources:
# - Class["postfix"]
# - Postfix::Hash["/etc/postfix/canonical"]
# - Postfix::Config["canonical_maps"] or Postfix::Config["sender_canonical_maps"] or Postfix::Config["recipient_canonical_maps"]
include postfix
postfix::hash { '/etc/postfix/recipient_canonical':
ensure => present,
}
postfix::config { 'canonical_alias_maps':
value => 'hash:/etc/postfix/recipient_canonical',
}
postfix::canonical { 'user@example.com':
file => '/etc/postfix/recipient_canonical',
ensure => present,
destination => 'root',
}
Parameters
The following parameters are available in the postfix::canonical
defined type:
ensure
Data type: Enum['present','absent']
Intended state of the resource
Default value: 'present'
destination
Data type: String
Where the emails will be delivered to.
file
Data type: Stdlib::Absolutepath
Where to create the file. If not defined "${postfix::confdir}/canonical" will be used as path.
Default value: undef
lookup_table_suffix
Data type: String[1]
Depends on the lookup table type, which is used on the postfix::hash and postfix::config resources. Defaults to 'db', the suffix of the "hash" type.
Default value: 'db'
postfix::conffile
Manages Postfix configuration files. With it, you could create configuration files (other than, main.cf, master.cf, etc.) restarting Postfix when necessary.
Examples
Simple config file with module source
postfix::conffile { 'ldapoptions.cf':
source => 'puppet:///modules/postfix/ldapoptions.cf',
}
With template options
postfix::conffile { 'ldapoptions.cf':
options => {
server_host => ldap.mydomain.com,
bind => 'yes',
bind_dn => 'cn=admin,dc=mydomain,dc=com',
bind_pw => 'password',
search_base => 'dc=example, dc=com',
query_filter => 'mail=%s',
result_attribute => 'uid',
}
}
Parameters
The following parameters are available in the postfix::conffile
defined type:
ensure
Data type: Enum['present', 'absent', 'directory']
A string whose valid values are present, absent or directory.
Default value: 'present'
source
Data type: Variant[Array[String], String, Undef]
A string with the source of the file. This is the source
parameter of the underlying file resource.
Example: puppet:///modules/postfix/configfile.cf
Default value: undef
content
Data type: Optional[String]
The content of the Postfix configuration file. This is an alternative to the source
parameter.
If you don't provide source
neither content
parameters a default template is used and the
content is created with values in the options
hash.
Default value: undef
path
Data type: Optional[Stdlib::Absolutepath]
Where to create the file. If not defined "${postfix::confdir}/${name}" will be used as path.
Default value: undef
mode
Data type: Stdlib::Filemode
Permissions of the configuration file. This option is useful if you want to create the file with
specific permissions (for example, because you have passwords in it).
Example: 0640
Default value: '0640'
options
Data type: Hash
Hash with the options used in the default template that is used when neither source
neither content
parameters are provided.
Default value: {}
show_diff
Data type: Boolean
Switch to set file show_diff parameter
Default value: true
postfix::config
Add/alter/remove options in Postfix main configuration file (main.cf). This uses Augeas to do the editing of the configuration file, as such any configuration value can be used.
Examples
Set value for smtp_use_tls
postfix::config { 'smtp_use_tls':
ensure => 'present',
value => 'yes',
}
Set a config parameter with empty value
postfix::config { 'relayhost':
ensure => 'blank',
}
Configure Postfix to use TLS as a client
postfix::config {
'smtp_tls_mandatory_ciphers': value => 'high';
'smtp_tls_security_level': value => 'secure';
'smtp_tls_CAfile': value => '/etc/pki/tls/certs/ca-bundle.crt';
'smtp_tls_session_cache_database': value => 'btree:${data_directory}/smtp_tls_session_cache';
}
Configure Postfix to disable the vrfy command
postfix::config { 'disable_vrfy_command':
ensure => present,
value => 'yes',
}
Parameters
The following parameters are available in the postfix::config
defined type:
ensure
Data type: Enum['present', 'absent', 'blank']
Defines if the config parameter is present, absent or blank.
The special value 'blank', will clear the value for the parameter,
but will not remove it from the config file.
Example: blank
Default value: 'present'
value
Data type: Optional[String]
A string that can contain any text to be used as the configuration value.
Example: btree:${data_directory}/smtp_tls_session_cache
.
Default value: undef
postfix::hash
Creates Postfix hashed "map" files. It will create "${name}", and then build "${name}." using the "postmap" command. The map file can then be referred to using postfix::config.
Examples
Creates a virtual hashmap
# This example creates a virtual hashmap in the Postfix config dir
# and adds a value into it with the postfix::config type.
postfix::hash { 'virtual':
ensure => present,
}
postfix::config { 'virtual_alias_maps':
value => 'hash:/etc/postfix/virtual',
}
Create a sasl_passwd hash from a source file
postfix::hash { '/etc/postfix/sasl_passwd':
ensure => 'present',
source => 'puppet:///modules/profile/postfix/client/sasl_passwd',
}
Create a sasl_passwd hash with contents defined in the manifest
postfix::hash { '/etc/postfix/sasl_passwd':
ensure => 'present',
content => '#Destination Credentials\nsmtp.example.com gssapi:nopassword',
}
Parameters
The following parameters are available in the postfix::hash
defined type:
ensure
Data type: Enum['present', 'absent']
Defines whether the hash map file is present or not. Value can either be present or absent.
Example: absent
.
Default value: 'present'
source
Data type: Variant[Array[String], String, Undef]
A string whose value is a location for the source file to be used. This parameter is mutually
exclusive with the content parameter, one or the other must be present, but both cannot be present.
Example: puppet:///modules/some/location/sasl_passwd
.
Default value: undef
content
Data type: Optional[Variant[Sensitive[String],String]]
A free form string that defines the contents of the file. This parameter is mutually exclusive
with the source parameter.
Example: #Destination Credentials\nsmtp.example.com gssapi:nopassword
.
Default value: undef
mode
Data type: Stdlib::Filemode
the desired file mode
Default value: '0640'
postfix::mailalias
Creates an email alias in the local alias database and updates the binary version of said database.
Examples
Simple example
include postfix
postfix::mailalias { 'postmaster':
ensure => present,
recipient => 'foo',
}
Parameters
The following parameters are available in the postfix::mailalias
defined type:
ensure
Data type: Enum['present', 'absent']
Intended state of the resource
Default value: 'present'
recipient
Data type: Variant[String, Array[String]]
The recipient address where the mail should be sent to.
postfix::map
Creates Postfix "map" files. It will create "${name}", and then build "${name}.db" using the "postmap" command. The map file can then be referred to using postfix::config.
Examples
Postfix map file and use in config
postfix::map { '/etc/postfix/virtual':
ensure => present,
}
postfix::config { 'virtual_alias_maps':
value => 'hash:/etc/postfix/virtual',
}
Parameters
The following parameters are available in the postfix::map
defined type:
ensure
Data type: Enum['present', 'absent']
Intended state of the resource
Default value: 'present'
source
Data type: Optional[Variant[Array[String], String]]
Sets the value of the source parameter for the file. Can't be used together with parameter content.
Default value: undef
content
Data type: Optional[Variant[Sensitive[String], String]]
The content of the file. Can't be used together with param source.
Default value: undef
type
Data type: String[1]
Type of the Postfix map (valid values are cidr, pcre, hash...)
Default value: 'hash'
path
Data type: Optional[Stdlib::Absolutepath]
Where to create the file. If not defined "${postfix::confdir}/${name}" will be used as path.
Default value: undef
mode
Data type: Stdlib::Filemode
File mode of the created file.
Default value: '0640'
postfix::transport
Manages content of the /etc/postfix/transport map.
Examples
Simple transport map config
include postfix
postfix::hash { '/etc/postfix/transport':
ensure => present,
}
postfix::config { 'transport_maps':
value => 'hash:/etc/postfix/transport, regexp:/etc/postfix/transport_regexp',
}
postfix::transport {
'mailman.example.com':
ensure => present,
destination => 'mailman';
'slow_transport':
ensure => present,
nexthop => '/^user-.*@mydomain\.com/'
file => '/etc/postfix/transport_regexp',
destination => 'slow'
}
Parameters
The following parameters are available in the postfix::transport
defined type:
ensure
Data type: Enum['present', 'absent']
Defines whether the transport entry is present or not. Value can either be present or absent.
Default value: 'present'
destination
Data type: Optional[String]
The destination to be delivered to (transport(5)).
Example: mailman
.
Default value: undef
nexthop
Data type: Optional[String]
A string to define where and how to deliver the mail (transport(5)).
Example: [smtp.google.com]:25
.
Default value: undef
file
Data type: Optional[Stdlib::Absolutepath]
Where to create the file. If not defined "${postfix::confdir}/transport" will be used as path.
Default value: undef
postfix::virtual
Manages content of the /etc/postfix/virtual map.
Examples
Minimum Requirements
include postfix
postfix::hash { "/etc/postfix/virtual":
ensure => present,
}
postfix::config { "virtual_alias_maps":
value => "hash:/etc/postfix/virtual, regexp:/etc/postfix/virtual_regexp"
}
Route mail to local users
postfix::virtual { "user@example.com":
ensure => present,
destination => ['root', 'postmaster'],
}
Regex example
postfix::virtual { "/.+@.+/"
ensure => present,
file => '/etc/postfix/virtual_regexp',
destination => 'root',
}
Route mail bound for 'user@example.com' to root.
postfix::virtual {'user@example.com':
ensure => present,
destination => 'root',
}
Parameters
The following parameters are available in the postfix::virtual
defined type:
ensure
Data type: Enum['present', 'absent']
A string whose valid values are present or absent.
Default value: 'present'
destination
Data type: Variant[String, Array[String]]
A string defining where the e-mails will be delivered to, (virtual(8)).
Example: root
file
Data type: Optional[Stdlib::Absolutepath]
A string defining the location of the virtual map, pre hash.
If not defined "${postfix::confdir}/virtual" will be used as path.
Example: /etc/postfix/my_virtual_map
.
Default value: undef
Changelog
All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module.
v5.0.0 (2024-10-15)
The 5.0.0
release is identical to #413 other than the version string. The 4.5.0
release contains breaking changes and that should have been released as 5.0.0
.
v4.5.0 (2024-10-15)
Breaking changes:
- drop support for SLES 11 & 12 -- EOL #412 (jhoblitt)
- drop support for ubuntu 18.04 -- EOL #410 (jhoblitt)
- drop support for centos 8 -- EOL #409 (jhoblitt)
- drop support for debian 10 -- EOL #408 (jhoblitt)
- drop support for EL7 -- EOL #407 (jhoblitt)
- drop support for fedora 33 & 34 -- EOL #406 (jhoblitt)
- drop support for freebsd 12 -- EOL #405 (jhoblitt)
Implemented enhancements:
- bump puppet-alternatives version constraint #404 (badenerb)
- Allow
mailaliases
to be managed via hiera #400 (peelman) - Add support for FreeBSD 14 #390 (smortex)
- Add Debian 12 support #374 (bastelfreak)
Fixed bugs:
Closed issues:
- missing postfix-ldap rpm on RHEL8+ distro #397
- maillog configuration? #386
- support smtpd_forbid_bare_newline to mitigate smtp smuggling #383
- canonical map doesn't accept underscores in destination address #345
Merged pull requests:
- postfix-ldap required for ldap lookup type on RHEL8+ #398 (edrude)
- Remove legacy top-scope syntax #378 (smortex)
v4.4.0 (2023-11-21)
Implemented enhancements:
- Add Ubuntu 22.04 support #376 (bastelfreak)
- Add Alma/Rocky/Oracle support #375 (bastelfreak)
- Remove camptocamp/augeas dependency #373 (ekohl)
v4.3.0 (2023-08-08)
Implemented enhancements:
- postfix::canonical: Add unit tests #367 (bastelfreak)
- use Stdlib::Filemode datatype for mode parameters #366 (bastelfreak)
Merged pull requests:
- Revert "Remove camptocamp/puppet-augeas dependency" #365 (bastelfreak)
v4.2.1 (2023-06-28)
Merged pull requests:
v4.2.0 (2023-06-26)
Implemented enhancements:
- puppet/alternatives: Allow 5.x #361 (bastelfreak)
v4.1.0 (2023-06-26)
Implemented enhancements:
v4.0.0 (2023-05-30)
Breaking changes:
- Drop Puppet 6 support #351 (bastelfreak)
- Switch to upstream default for
mydestination
#256 (kenyon)
Implemented enhancements:
- document mode param & puppet-lint: enable parameter_documentation check #355 (bastelfreak)
Merged pull requests:
v3.1.0 (2023-03-01)
Implemented enhancements:
Fixed bugs:
- Fix typos errors in postfix::satellite from PR 326 #333 (cruelsmith)
- Handle [host] vs [host]:port nexthop #327 (gcoxmoz)
Merged pull requests:
v3.0.0 (2022-05-05)
Breaking changes:
Implemented enhancements:
- Declare CentOS 9 Support, Install s-nail on 9 #322 (traylenator)
- Add support for FreeBSD 13 #307 (smortex)
- allow hiera driven transport/virtual/hash/conffile #296 (cringdahl)
Closed issues:
- increase dependency of puppet/alternatives to next major version #324
- smtp_listen to take multiple addresses #203
Merged pull requests:
- Add switches for simple domain masquerade #326 (jcpunk)
- increase dependency of puppet/alternatives to next major version #325 (KoenDierckx)
- Comply to rubocop 1.22.3 #321 (traylenator)
- remove unneeded tests; provide error message for raise_error #318 (kenyon)
- map: handle regexp type #317 (kenyon)
- allow creation of postfix::map resources with hiera #316 (kenyon)
- init.pp: correct param numbers and use of optional #315 (kenyon)
- Allow parameter smtp_listen to accept multiple IPs #313 (ghost)
- Add manage_mailname parameter to README (#186) #312 (ghost)
- fixtures.yml: Migrate to git URLs #309 (bastelfreak)
- puppet-lint: fix top_scope_facts warnings #304 (bastelfreak)
v2.0.0 (2021-08-26)
Breaking changes:
- Drop RedHat 6; Add CentOS 7/8 support #301 (root-expert)
- Drop Fedora 28/29/30; Add Fedora 33/34 support #300 (root-expert)
- Drop puppet 4/5; Add Puppet 7 #299 (root-expert)
- Drop Debian 7/8/9; Add 10/11; Drop Ubuntu 14/16; Add 20.04 #298 (root-expert)
Merged pull requests:
1.12.0 (2021-04-23)
Implemented enhancements:
- puppetlabs/stdlib: Allow 7.x #294 (bastelfreak)
- Add FreeBSD support #288 (smortex)
Fixed bugs:
1.11.0 (2021-01-20)
Implemented enhancements:
- Add Solaris support #274 (rstuart-indue)
- Feature/allow specify master cf content & template #217 (c33s)
- Add a variable definition and two examples. #212 (dafydd2277)
- Include parameter title in error output #209 (mrintegrity)
- more than two amavis processes #175 (farlerac)
Closed issues:
Merged pull requests:
- Fix CI #291 (towo)
- Fix CI #289 (smortex)
- Fix hardcoded map path #287 (towo)
- Transport: allow [host]:port smtp syntax #285 (raphink)
- README.md: fix link to puppet-lint #283 (kenyon)
- Fixes postmap when ensure=absent #202 (earsdown)
- Add virtual and transport regexp examples #116 (micah)
1.10.0 (2020-01-23)
Implemented enhancements:
- Add the possibility to manage (or not) aliases #271 (Bodenhaltung)
- Convert to PDK #270 (raphink)
- Convert params.pp to hiera data #269 (raphink)
Closed issues:
Merged pull requests:
1.9.0 (2019-11-26)
Implemented enhancements:
- Upping version dependency on puppet-alternatives #260 (cubiclelord)
- Add RedHat 8 support #257 (zeromind)
- Add missing inet_protocols parameter to the README. #254 (catay)
- add retry and proxywrite for debian family OSes #253 (Dan33l)
- Allow
puppetlabs/stdlib
6.x #246 (alexjfisher) - Add show_diff parameter to postfix::conffile #226 (treydock)
Fixed bugs:
- Should mailalias_core be declared as a dependency ? #236
Closed issues:
- Add Debian Stretch to metadata.json #259
- qmgr warning: connect to transport private/retry #252
- Clarify license #250
Merged pull requests:
- Release 1.9.0 #265 (alexjfisher)
- Add missing Variable for Suse #245 (cocker-cc)
1.8.0 (2019-04-05)
- Deprecate Puppet 3 support
- Add new config parameter to add configuration from hiera (GH #240)
- Allow Sensitive postfix::hash content (GH #243)
- Add master_bounce_command and master_defer_command (GH #239)
- Schleuder: port invocation syntax to Schleuder 3. (GH #234)
- Allow multiple spaces in postfix::mta::mynetworks (GH #235)
- Add postfix::mailalias (GH #233)
- Remove legacy instructions on exec paths
1.7.0 (2018-11-01)
- Add chroot parameter (GH #170, #224)
- Fix resource dependencies (GH #185)
- Add postfix::service_ensure and postfix::service_enabled parameters (GH #184)
- Fix email address matching for postfix::virtual augeas lens (GH #177)
- Add master_entries parameter (GH #171)
- Add templates for SLES12 SP2 and SP3 (GH #198)
- Install sendmail alternative on RedHat (GH #199)
- Move Exec['newaliases'] to services to it could be run after service restart (GH #205)
- Unbreak sendmail (GH #201)
- Add retry to RedHat master.cf (GH #215)
- Support '+' in canonical maps (GH #222, fix #220)
- Add support for Alpine Linux (GH #213)
- Support multiple destinations in postfix::virtual (#223, fix #164)
- Make transport pattern accept regexp (GH #225, fix #92)
- Ensure that map files are regenerated if removed (GH #228, fix #161)
- Allow puppetlabs-stdlib < 6.0.0 (GH #229)
- Modulesync: update testing harness and add Puppet 6
1.6.0 (2017-08-25)
- Fix package name resolution for Debian stretch (GH #179)
- Do not generate postmap when postfix::map ensure is absent (GH #178)
- Add inet_protocol param. (GH #172)
- Create master.cf.SLES11.4.erb (GH #156)
- Allow mydestination to be blank (GH #162)
- Fix hash.pp doc (GH #159)
1.5.0 (2016-11-17)
- Fix params validation + specs (GH #154)
- Fix map calling in hash (GH #153)
- Fix the path of the database (GH #149)
- Add a map define to create postfix maps (#138)
1.4.0 (2016-08-23)
- Add manage_root_alias parameter to disable management of root's mailalias resource (GH #133)
- set mode 0644 for /etc/mailname (GH #142)
- Fix virtual.db and transport.db creation (GH #135, GH #130)
- Add $manage_mailx boolean to control whether mailx is managed (GH #143, GH #141)
- Add conffile define (GH #139)
- Fix acceptance tests (GH #144)
- Update test system
1.3.1 (2016-03-16)
- Fix tests for Puppet 4
1.3.0 (2016-03-15)
- Consistent formating of documentation (GH #125)
- Add ensure class arguments for packages (GH #99)
- Various testing changes/fixes
1.2.14 (2015-08-21)
- Use docker for acceptance tests
1.2.13 (2015-06-30)
- Fix documentation
1.2.12 (2015-06-26)
- Fix strict_variables activation with rspec-puppet 2.2
1.2.11 (2015-06-24)
- Add support for SLES 12 and newest openSUSE releases
- Add acceptance test
- Restart postfix instead of reload after package installation (Fixes #90)
- Use RHEL SELinux type for /etc/aliases
1.2.10 (2015-06-19)
- Update documentation
1.2.9 (2015-05-28)
- Add beaker_spec_helper to Gemfile
1.2.8 (2015-05-26)
- Use random application order in nodeset
1.2.7 (2015-05-26)
- add utopic & vivid nodesets
1.2.6 (2015-05-25)
- Don't allow failure on Puppet 4
1.2.5 (2015-05-19)
- Add missing ownership
1.2.4 (2015-05-13)
- Add puppet-lint-file_source_rights-check gem
1.2.3 (2015-05-12)
- Don't pin beaker
1.2.2 (2015-04-27)
- Add nodeset ubuntu-12.04-x86_64-openstack
1.2.1 (2015-04-15)
- Use file() function instead of fileserver (way faster)
- Fix issue with ldap-alias map
1.2.0 (2015-04-03)
- Allow to pass arrays to postfix::hash::source and postfix::hash::content
- IPv6 support
- Fix for RedHat
- Add RedHat 7 support
- Use rspec-puppet-facts for unit tests
1.1.1 (2015-03-24)
- Various spec improvements
1.1.0 (2015-02-19)
- Various specs improvements
- Fix specs for postfix::config with ensure => blank
- Simplify relationships and avoid spaceship operators
- nexthop parameter is not necessary for postfix::canonical
1.0.5 (2015-01-07)
- Fix unquoted strings in cases
1.0.2 (2014-11-17)
- Add missing postfix_canonical lens to postfix::augeas (GH #59)
- Fix unit tests for RH 7
1.0.1 (2014-10-20)
- Setup automatic Forge releases
* This Changelog was automatically generated by github_changelog_generator
Dependencies
- puppetlabs/stdlib (>= 4.13.0 < 10.0.0)
- puppet/alternatives (>= 2.0.0 < 7.0.0)
- puppetlabs/mailalias_core (>= 1.0.5 < 2.0.0)
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.