module-postfix/manifests/init.pp

184 lines
4.5 KiB
Puppet

#
# == Class: postfix
#
# This class provides a basic setup of postfix with local and remote
# delivery and an SMTP server listening on the loopback interface.
#
# Parameters:
# - *$postfix_smtp_listen*: address on which the smtp service will listen to. defaults to 127.0.0.1
# - *$root_mail_recipient*: who will recieve root's emails. defaults to "nobody"
#
# Example usage:
#
# node "toto.example.com" {
# $postfix_smtp_listen = "192.168.1.10"
# include postfix
# }
#
class postfix {
# selinux labels differ from one distribution to another
case $operatingsystem {
RedHat, CentOS: {
case $lsbmajdistrelease {
"4": { $postfix_seltype = "etc_t" }
"5": { $postfix_seltype = "postfix_etc_t" }
default: { $postfix_seltype = undef }
}
}
default: {
$postfix_seltype = undef
}
}
# Default value for various options
case $postfix_smtp_listen {
"": { $postfix_smtp_listen = "127.0.0.1" }
}
case $root_mail_recipient {
"": { $root_mail_recipient = "nobody" }
}
case $postfix_anon_sasl {
"": { $postfix_anon_sasl = "no" }
}
case $postfix_manage_header_checks {
"": { $postfix_manage_header_checks = "no" }
}
case $postfix_manage_tls_policy {
"": { $postfix_manage_tls_policy = "no" }
}
case $postfix_use_amavisd {
"": { $postfix_use_amavisd = "no" }
}
case $postfix_use_dovecot_lda {
"": { $postfix_use_dovecot_lda = "no" }
}
case $postfix_use_schleuder {
"": { $postfix_use_schleuder = "no" }
}
case $postfix_use_sympa {
"": { $postfix_use_sympa = "no" }
}
case $postfix_mastercf_tail {
"": { $postfix_mastercf_tail = "" }
}
case $postfix_inet_interfaces {
"": { $postfix_inet_interfaces = 'all' }
}
case $postfix_myorigin {
"": { $postfix_myorigin = $fqdn }
}
# Bootstrap moduledir
include common::moduledir
module_dir{'postfix': }
# Include optional classes
if $postfix_anon_sasl == 'yes' {
include postfix::anonsasl
}
if $postfix_manage_header_checks == 'yes' {
include postfix::header_checks
}
if $postfix_manage_tls_policy == 'yes' {
include postfix::tlspolicy
}
if $postfix_use_amavisd == 'yes' {
include postfix::amavis
}
if $postfix_manage_transport_regexp == 'yes' {
include postfix::transport_regexp
}
if $postfix_manage_virtual_regexp == 'yes' {
include postfix::virtual_regexp
}
package { ["postfix", "mailx"]:
ensure => installed
}
if $operatingsystem == 'debian' {
Package[mailx] { name => 'bsd-mailx' }
}
service { "postfix":
ensure => running,
require => Package["postfix"],
}
file { "/etc/mailname":
ensure => present,
content => "${fqdn}\n",
seltype => $postfix_seltype,
}
# Aliases
file { "/etc/aliases":
ensure => present,
content => "# file managed by puppet\n",
replace => false,
seltype => $postfix_seltype,
notify => Exec["newaliases"],
}
# Aliases
exec { "newaliases":
command => "/usr/bin/newaliases",
refreshonly => true,
require => Package["postfix"],
subscribe => File["/etc/aliases"],
}
# Config files
file { "/etc/postfix/master.cf":
ensure => present,
owner => "root",
group => "root",
mode => "0644",
content => $operatingsystem ? {
Redhat => template("postfix/master.cf.redhat5.erb"),
CentOS => template("postfix/master.cf.redhat5.erb"),
Debian => template("postfix/master.cf.debian-$lsbdistcodename.erb"),
Ubuntu => template("postfix/master.cf.debian-etch.erb"),
},
seltype => $postfix_seltype,
notify => Service["postfix"],
require => Package["postfix"],
}
# Config files
file { "/etc/postfix/main.cf":
ensure => present,
owner => "root",
group => "root",
mode => "0644",
source => "puppet:///modules/postfix/main.cf",
replace => false,
seltype => $postfix_seltype,
notify => Service["postfix"],
require => Package["postfix"],
}
# Default configuration parameters
postfix::config {
"myorigin": value => "${postfix_myorigin}";
"alias_maps": value => "hash:/etc/aliases";
"inet_interfaces": value => "${postfix_inet_interfaces}";
}
case $operatingsystem {
RedHat, CentOS: {
postfix::config {
"sendmail_path": value => "/usr/sbin/sendmail.postfix";
"newaliases_path": value => "/usr/bin/newaliases.postfix";
"mailq_path": value => "/usr/bin/mailq.postfix";
}
}
}
postfix::mailalias {"root":
recipient => $root_mail_recipient,
}
}