puppet/smtpd/manifests/init.pp
2013-07-28 21:53:28 +03:00

155 lines
3.6 KiB
Puppet

# Configure smtpd for local delivery.
#
# === Global variables
#
# $mail_domain:
# Domain to masquerade as (envelope only).
#
# $mail_server:
# Hostname of mail relay server.
#
class smtpd {
if $mail_server {
$relay = "smtp+tls://${mail_server}"
}
file { "/etc/mailer.conf":
ensure => present,
mode => "0644",
owner => "root",
group => "wheel",
source => "puppet:///modules/smtpd/mailer.conf",
before => Service["smtpd"],
}
file { "/etc/mail/smtpd.conf":
ensure => present,
mode => "0644",
owner => "root",
group => "wheel",
source => "puppet:///modules/smtpd/smtpd.conf",
notify => Service["smtpd"],
}
file { "/etc/mail/smtpd.conf.local":
ensure => present,
mode => "0644",
owner => "root",
group => "wheel",
content => template("smtpd/client.conf.erb"),
notify => Service["smtpd"],
}
service { "sendmail":
ensure => stopped,
enable => false,
before => Service["smtpd"],
}
service { "smtpd":
ensure => running,
enable => true,
start => "/usr/sbin/smtpd",
}
}
# Configure smtpd as mail server
#
# === Parameters
#
# $maildir:
# Directory in user home for INBOX.
#
# $domains:
# Primary domains to accept mail for.
#
# $virtual:
# Virtual domains to accept mail for.
#
class smtpd::server($maildir, $domains, $virtual=undef) inherits smtpd {
include procmail
procmail::rc { "00-default.rc":
content => "MAILDIR=\$HOME/${maildir}\nDEFAULT=\$MAILDIR/INBOX\n",
}
$mda = "/usr/local/bin/procmail -Y -t -f %{sender} rcpt=%{rcpt}"
File["/etc/mail/smtpd.conf.local"] {
content => template("smtpd/server.conf.erb"),
}
file { "/etc/mail/aliases":
ensure => present,
mode => "0644",
owner => "root",
group => "wheel",
source => [
"puppet:///files/mail/aliases.${::homename}",
"puppet:///files/mail/aliases",
],
}
exec { "makemap -t aliases /etc/mail/aliases":
refreshonly => true,
path => "/bin:/usr/bin:/sbin:/usr/sbin",
subscribe => File["/etc/mail/aliases"],
notify => Service["smtpd"],
}
smtpd::aliases { $domains: }
if $virtual {
smtpd::virtual { $virtual: }
}
}
define smtpd::aliases() {
file { "/etc/mail/aliases.${name}":
ensure => present,
mode => "0644",
owner => "root",
group => "wheel",
source => [
"puppet:///files/mail/aliases.${name}",
"puppet:///files/mail/aliases.${::homename}",
"puppet:///files/mail/aliases",
],
}
exec { "makemap -t aliases /etc/mail/aliases.${name}":
refreshonly => true,
path => "/bin:/usr/bin:/sbin:/usr/sbin",
subscribe => File["/etc/mail/aliases.${name}"],
notify => Service["smtpd"],
}
}
define smtpd::virtual() {
file { "/etc/mail/virtual.${name}":
ensure => present,
mode => "0644",
owner => "root",
group => "wheel",
source => [
"puppet:///files/mail/virtual.${name}",
"puppet:///files/mail/virtual.${::homename}",
"puppet:///files/mail/virtual",
],
}
exec { "makemap -t aliases /etc/mail/virtual.${name}":
refreshonly => true,
path => "/bin:/usr/bin:/sbin:/usr/sbin",
subscribe => File["/etc/mail/virtual.${name}"],
notify => Service["smtpd"],
}
}