Commit 48c35a4b7123ab787e4aae3c74b060f751b7ef5c
1 parent
4216f9fb
Exists in
master
and in
90 other branches
email relay configuration
Showing
12 changed files
with
156 additions
and
12 deletions
Show diff stats
config/roles/email_server.rb
config/roles/server.rb
config/roles/social_server.rb
... | ... | @@ -0,0 +1,48 @@ |
1 | +include_recipe 'email' | |
2 | + | |
3 | +# smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem | |
4 | +# smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key | |
5 | + | |
6 | +postfix_config = { | |
7 | + | |
8 | + myhostname: node['config']['relay_hostname'], | |
9 | + | |
10 | + relay_domains: [ | |
11 | + node['config']['lists_hostname'], | |
12 | + node['config']['external_hostname'], | |
13 | + ].join(', '), | |
14 | + | |
15 | + transport_maps: 'hash:/etc/postfix/transport', | |
16 | + | |
17 | + mynetworks: '127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 ' + node['peers'].values.sort.join(' '), | |
18 | + | |
19 | +} | |
20 | + | |
21 | +execute 'postfix:relay:config' do | |
22 | + command postfix_config.map { |k,v| "postconf #{k}='#{v}'" }.join(' ; ') | |
23 | + notifies :reload, 'service[postfix]' | |
24 | +end | |
25 | + | |
26 | +execute 'postfix:interfaces:all' do | |
27 | + command "postconf inet_interfaces=all" | |
28 | + notifies :restart, 'service[postfix]' | |
29 | + not_if { system('grep -q "inet_interfaces\s*=\s*all" /etc/postfix/main.cf') } | |
30 | +end | |
31 | + | |
32 | +transport = { | |
33 | + node['config']['lists_hostname'] => node['peers']['integration'], | |
34 | + node['config']['external_hostname'] => node['peers']['integration'], | |
35 | +} | |
36 | + | |
37 | +file '/etc/postfix/transport' do | |
38 | + owner 'root' | |
39 | + group 'root' | |
40 | + mode 0644 | |
41 | + content transport.map { |domain,ip| "#{domain}\tsmtp:[#{ip}]\n" }.join | |
42 | + notifies :run, 'execute[transport:postmap]' | |
43 | +end | |
44 | + | |
45 | +execute 'transport:postmap' do | |
46 | + command "postmap /etc/postfix/transport" | |
47 | + action :nothing | |
48 | +end | ... | ... |
cookbooks/mailman/recipes/default.rb
... | ... | @@ -22,15 +22,17 @@ service 'mailman' do |
22 | 22 | supports :restart => true |
23 | 23 | end |
24 | 24 | |
25 | -package 'postfix' | |
26 | -package 'mailx' # for testing, etc | |
27 | - | |
28 | -execute 'postfix-config' do | |
25 | +execute 'postfix:config' do | |
29 | 26 | command [ |
30 | 27 | "postconf relay_domains=#{node['config']['lists_hostname']}", |
31 | 28 | "postconf transport_maps=hash:/etc/postfix/transport", |
32 | 29 | ].join(' && ') |
33 | - only_if { !system('grep', node['config']['lists_hostname'], '/etc/postfix/main.cf') } | |
30 | + notifies :reload, 'service[postfix]' | |
31 | +end | |
32 | + | |
33 | +execute 'postfix:interfaces' do | |
34 | + command "postconf inet_interfaces=\"$(cat /etc/hostname), localhost\"" | |
35 | + not_if { system('postconf inet_interfaces | grep -q \'=\s*localhost\s*$\'') } | |
34 | 36 | notifies :restart, 'service[postfix]' |
35 | 37 | end |
36 | 38 | |
... | ... | @@ -69,6 +71,3 @@ ruby_block 'configure-mailman-transport' do |
69 | 71 | only_if { !system('grep', '^mailman', '/etc/postfix/master.cf')} |
70 | 72 | end |
71 | 73 | |
72 | -service 'postfix' do | |
73 | - action [:enable, :reload] | |
74 | -end | ... | ... |
nodes.yaml
... | ... | @@ -14,6 +14,7 @@ vagrant@integration: |
14 | 14 | email_subject_prefix: '[spb]' |
15 | 15 | lists_hostname: listas.softwarepublico.dev |
16 | 16 | lists_admin: paulo@softwarelivre.org |
17 | + relay_hostname: relay.softwarepublico.dev | |
17 | 18 | peers: &PEERS |
18 | 19 | integration: 10.10.10.2 |
19 | 20 | email: 10.10.10.3 | ... | ... |
... | ... | @@ -0,0 +1,21 @@ |
1 | +#!/bin/sh | |
2 | + | |
3 | +set -eu | |
4 | + | |
5 | +to="$1" | |
6 | + | |
7 | +waited=0 | |
8 | + | |
9 | +while [ $waited -lt 10 ]; do | |
10 | + if (sudo postqueue -p | grep -q "$to"); then | |
11 | + sudo postqueue -p | grep -c "$to" | |
12 | + exit | |
13 | + fi | |
14 | + sleep 1 | |
15 | + waited=$(($waited + 1)) | |
16 | +done | |
17 | + | |
18 | +echo "E: no message for $to arrived at the mail realy" >&2 | |
19 | +echo 0 | |
20 | +exit 1 | |
21 | + | ... | ... |
... | ... | @@ -0,0 +1,44 @@ |
1 | +. $(dirname $0)/test_helper.sh | |
2 | + | |
3 | +test_inbound_mail() { | |
4 | + run_on integration create-list mylist foo@example.com | |
5 | + | |
6 | + # sending FROM EMAIL RELAY HOST | |
7 | + run_on email send-email foo@example.com mylist@listas.softwarepublico.dev | |
8 | + | |
9 | + messages=$(run_on integration wait-for-messages mylist) | |
10 | + | |
11 | + run_on integration remove-list mylist | |
12 | + | |
13 | + assertEquals 'Message arrives at the mailing list' '1' "$messages" | |
14 | +} | |
15 | + | |
16 | +_test_outbound_email() { | |
17 | + machine="$1" | |
18 | + | |
19 | + run_on email clear-email-queue | |
20 | + | |
21 | + run_on $machine send-email sender@example.com receiver@example.com | |
22 | + | |
23 | + messages=$(run_on email wait-for-email-to receiver@example.com) | |
24 | + | |
25 | + run_on email clear-email-queue | |
26 | + | |
27 | + assertEquals 'Message delivered through relay' 1 "$messages" | |
28 | +} | |
29 | + | |
30 | +test_outbound_email_integration() { | |
31 | + _test_outbound_email integration | |
32 | +} | |
33 | +test_outbound_email_database() { | |
34 | + _test_outbound_email database | |
35 | +} | |
36 | +test_outbound_email_social() { | |
37 | + _test_outbound_email social | |
38 | +} | |
39 | +test_outbound_email_reverseproxy() { | |
40 | + _test_outbound_email reverseproxy | |
41 | +} | |
42 | + | |
43 | +. shunit2 | |
44 | + | ... | ... |