diff --git a/manifests/init.pp b/manifests/init.pp index a8328bf22d4fb6f6d633acc710d6ec113f27220e..370345ff132e5d047ddbb01eb515c5799246df6c 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -32,7 +32,7 @@ # # [*master_submission*] - (string) # -# [*mta*] - (boolean) Whether to use as MTA +# [*mta*] - (boolean) Configure postfix minimally, as a simple MTA # # [*mydestination*] - (string) # @@ -140,10 +140,16 @@ class postfix ( } if $mta { + if $satellite { + fail('enabling both the $mta and $satellite parameters is not supported. Please disable one.') + } include ::postfix::mta } if $satellite { + if $mta { + fail('enabling both the $mta and $satellite parameters is not supported. Please disable one.') + } include ::postfix::satellite } diff --git a/manifests/mta.pp b/manifests/mta.pp index 6a75d3ab4805e2b7d46a3eb0089f16fec37c8421..0c835449e50b7b65b54d647e43668a9f4233795f 100644 --- a/manifests/mta.pp +++ b/manifests/mta.pp @@ -25,8 +25,8 @@ # class postfix::mta ( $mydestination = $postfix::mydestination, - $mynetworks = $postfix::mynetworks, - $relayhost = $postfix::relayhost, + $mynetworks = $postfix::mynetworks, + $relayhost = $postfix::relayhost, ) { validate_re($relayhost, '^\S+$', diff --git a/manifests/satellite.pp b/manifests/satellite.pp index 92c68832d1247d1b09ed3d1a50f200d61ca689fa..e35582786c88c8841999c2fbaefce50a0ba8c415 100644 --- a/manifests/satellite.pp +++ b/manifests/satellite.pp @@ -25,7 +25,7 @@ class postfix::satellite ( $mydestination = $postfix::mydestination, $mynetworks = $postfix::mynetworks, - $relayhost = $postfix::relayhost, + $relayhost = $postfix::relayhost, ) { validate_re($postfix::myorigin, '^\S+$') diff --git a/spec/classes/postfix_spec.rb b/spec/classes/postfix_spec.rb index 1d57c241903259924164cf031ac7cd5553b419b7..173b5bdbfeab8c6367c8b46a5bccb1882f5e6d10 100644 --- a/spec/classes/postfix_spec.rb +++ b/spec/classes/postfix_spec.rb @@ -137,5 +137,159 @@ describe 'postfix' do ) } end end + context 'when on RedHat' do + let (:facts) { { + :operatingsystem => 'Debian', + :osfamily => 'Debian', + :fqdn => 'fqdn.example.com', + } } + context 'when specifying inet_interfaces' do + let (:params) { { + :inet_interfaces => 'localhost2' + } } + it 'should create a postfix::config defined type with inet_interfaces specified properly' do + should contain_postfix__config('inet_interfaces').with_value('localhost2') + end + end + context 'when enabling ldap' do + it 'should do stuff' do + pending 'need to write this still' + end + end + context 'when a custom mail_user is specified' do + let (:params) { { + :mail_user => 'bar' + } } + it 'should adjust the content of /etc/postfix/master.cf specifying the user' do + should contain_file('/etc/postfix/master.cf').without('seltype').with_content(/user=bar/) + end + end + context 'when mailman is true' do + let (:params) { { + :mailman => true + } } + it 'should do stuff' do + pending 'need to write this still' + end + end + context 'when specifying a custom mastercf_source' do + let (:params) { { + :mastercf_source => 'testy' + } } + it 'should do stuff' do + pending 'need to write this still' + end + end + context 'when specifying a custom master_smtp' do + let (:params) { { + :master_smtp => "smtp inet n - - - - smtpd + -o smtpd_client_restrictions=check_client_access,hash:/etc/postfix/access,reject", + } } + it 'should update master.cf with the specified flags to smtp' do + should contain_file('/etc/postfix/master.cf').without('seltype').with_content( + /smtp inet n - - - - smtpd/).with_content( + /^smtp.*\n.*smtpd_client_restrictions=check_client_access,hash:/ + ) + end + end + context 'when specifying a custom master_smtps' do + let (:params) { { + :master_smtps => 'smtps inet n - - - - smtpd' + } } + it 'should update master.cf with the specified flags to smtps' do + should contain_file('/etc/postfix/master.cf').with_content(/^smtps inet n/) + end + end + context 'when mta is enabled' do + let (:params) { { :mta => true, :mydestination => '1.2.3.4', :relayhost => '2.3.4.5' } } + it 'should configure postfix as a minimal MTA, delivering mail to the mydestination param' do + should contain_postfix__config('mydestination').with_value('1.2.3.4') + should contain_postfix__config('mynetworks').with_value('127.0.0.0/8') + should contain_postfix__config('relayhost').with_value('2.3.4.5') + should contain_postfix__config('virtual_alias_maps').with_value('hash:/etc/postfix/virtual') + should contain_postfix__config('transport_maps').with_value('hash:/etc/postfix/transport') + end + it { should include_class('postfix::mta') } + context 'and satellite is also enabled' do + let (:params) { { :mta => true, :satellite => true, :mydestination => '1.2.3.4', :relayhost => '2.3.4.5' } } + it 'should fail' do + expect {subject}.to raise_error(Puppet::Error, /Please disable one/) + end + end + end + context 'when specifying mydesitination' do + it 'should do stuff' do + pending 'need to write this still' + end + end + context 'when specifying mynetworks' do + it 'should do stuff' do + pending 'need to write this still' + end + end + context 'when specifying myorigin' do + let (:params) { { :myorigin => 'localhost'} } + it 'should create a postfix::config defined type with myorigin specified properly' do + should contain_postfix__config('myorigin').with_value('localhost') + end + end + context 'when specifying relayhost' do + it 'should do stuff' do + pending 'need to write this still' + end + end + context 'when specifying a root_mail_recipient' do + let (:params) { { :root_mail_recipient => 'foo'} } + it 'should contain a Mailalias resource directing roots mail to the required user' do + should contain_mailalias('root').with_recipient('foo') + end + end + context 'when specifying satellite' do + let (:params) { { :satellite => true, :mydestination => '1.2.3.4', :relayhost => '2.3.4.5' } } + it 'should configure all local email to be forwarded to $root_mail_recipient delivered through $relayhost' do + should contain_postfix__config('mydestination').with_value('1.2.3.4') + should contain_postfix__config('mynetworks').with_value('127.0.0.0/8') + should contain_postfix__config('relayhost').with_value('2.3.4.5') + should contain_postfix__config('virtual_alias_maps').with_value('hash:/etc/postfix/virtual') + should contain_postfix__config('transport_maps').with_value('hash:/etc/postfix/transport') + end + context 'and mta is also enabled' do + let (:params) { { :mta => true, :satellite => true, :mydestination => '1.2.3.4', :relayhost => '2.3.4.5' } } + it 'should fail' do + expect {subject}.to raise_error(Puppet::Error, /Please disable one/) + end + end + end + context 'when specifying smtp_listen' do + let (:params) { { :smtp_listen => 'all' } } + it 'should do stuff' do + pending 'need to write this still' + end + end + context 'when use_amavisd is true' do + let (:params) { { :use_amavisd => true } } + it 'should update master.cf with the specified flags to amavis' do + should contain_file('/etc/postfix/master.cf').with_content(/amavis unix/) + end + end + context 'when use_dovecot_lda is true' do + let (:params) { { :use_dovecot_lda => true } } + it 'should update master.cf with the specified flags to dovecot' do + should contain_file('/etc/postfix/master.cf').with_content(/dovecot.*\n.* user=vmail:vmail /) + end + end + context 'when use_schleuder is true' do + let (:params) { { :use_schleuder => true } } + it 'should update master.cf with the specified flags to schleuder' do + should contain_file('/etc/postfix/master.cf').with_content(/schleuder/) + end + end + context 'when use_sympa is true' do + let (:params) { { :use_sympa => true } } + it 'should update master.cf to include sympa' do + should contain_file('/etc/postfix/master.cf').with_content(/sympa/) + end + end + end end end