class dovecot::common { case $operatingsystem { centos,fedora: { package { ["dovecot"]: ensure => installed, } } default: { fail("Dovecot module not supported in ${operatingsystem}.") } } } define dovecot::server($mx_mailname="", $ssl_csr="", $ssl_cert="", $ssl_key="", $ssl_chain="") { case $operatingsystem { centos,fedora: { $ssl_dir = "/etc/pki/tls" } default: { fail("Dovecot module not supported in ${operatingsystem}.") } } service { "dovecot": ensure => running, enable => true, require => File["/etc/dovecot.conf"], } $mail_domain = $name ? { "default" => "${homename}", default => "${name}", } if $ssl_chain { file { "$ssl_dir/certs/${mx_mailname}.chain.crt": ensure => present, source => $ssl_chain, mode => 0644, owner => root, group => root, notify => Service["dovecot"], } } if $ssl_cert { file { "$ssl_dir/certs/${mx_mailname}.crt": ensure => present, source => $ssl_cert, mode => 0644, owner => root, group => root, notify => Service["dovecot"], } } else { fail("You need to define an ssl_cert in your node manifest.") } if $ssl_key { file { "$ssl_dir/private/${mx_mailname}.key": ensure => present, source => $ssl_key, mode => 0600, owner => root, group => root, notify => Service["dovecot"], } } else { fail("You need to define an ssl_key in your node manifest.") } file { "/etc/dovecot.conf": ensure => present, content => template("dovecot/dovecot.conf.erb"), mode => 0644, owner => root, group => root, notify => Service["dovecot"], } }