diff --git a/Berksfile b/Berksfile index fa8c10b..3d60e57 100644 --- a/Berksfile +++ b/Berksfile @@ -6,4 +6,5 @@ group :integration do cookbook 'apt' cookbook 'yum' cookbook 'fake', :path => 'test/fixtures/cookbooks/fake' + cookbook 'wrapper', :path => 'test/fixtures/cookbooks/wrapper' end diff --git a/recipes/_attributes.rb b/recipes/_attributes.rb index 01d7ca8..7340b1e 100644 --- a/recipes/_attributes.rb +++ b/recipes/_attributes.rb @@ -15,46 +15,46 @@ # if node['postfix']['use_procmail'] - node.default['postfix']['main']['mailbox_command'] = '/usr/bin/procmail -a "$EXTENSION"' + node.default_unless['postfix']['main']['mailbox_command'] = '/usr/bin/procmail -a "$EXTENSION"' end if node['postfix']['main']['smtpd_use_tls'] == 'yes' - node.default['postfix']['main']['smtpd_tls_cert_file'] = '/etc/ssl/certs/ssl-cert-snakeoil.pem' - node.default['postfix']['main']['smtpd_tls_key_file'] = '/etc/ssl/private/ssl-cert-snakeoil.key' - node.default['postfix']['main']['smtpd_tls_CAfile'] = node['postfix']['cafile'] - node.default['postfix']['main']['smtpd_tls_session_cache_database'] = 'btree:${data_directory}/smtpd_scache' + node.default_unless['postfix']['main']['smtpd_tls_cert_file'] = '/etc/ssl/certs/ssl-cert-snakeoil.pem' + node.default_unless['postfix']['main']['smtpd_tls_key_file'] = '/etc/ssl/private/ssl-cert-snakeoil.key' + node.default_unless['postfix']['main']['smtpd_tls_CAfile'] = node['postfix']['cafile'] + node.default_unless['postfix']['main']['smtpd_tls_session_cache_database'] = 'btree:${data_directory}/smtpd_scache' end if node['postfix']['main']['smtp_use_tls'] == 'yes' - node.default['postfix']['main']['smtp_tls_CAfile'] = node['postfix']['cafile'] - node.default['postfix']['main']['smtp_tls_session_cache_database'] = 'btree:${data_directory}/smtp_scache' + node.default_unless['postfix']['main']['smtp_tls_CAfile'] = node['postfix']['cafile'] + node.default_unless['postfix']['main']['smtp_tls_session_cache_database'] = 'btree:${data_directory}/smtp_scache' end if node['postfix']['main']['smtp_sasl_auth_enable'] == 'yes' - node.default['postfix']['sasl_password_file'] = "#{node['postfix']['conf_dir']}/sasl_passwd" - node.default['postfix']['main']['smtp_sasl_password_maps'] = "hash:#{node['postfix']['sasl_password_file']}" - node.default['postfix']['main']['smtp_sasl_security_options'] = 'noanonymous' - node.default['postfix']['sasl']['smtp_sasl_user_name'] = '' - node.default['postfix']['sasl']['smtp_sasl_passwd'] = '' - node.default['postfix']['main']['relayhost'] = '' + node.default_unless['postfix']['sasl_password_file'] = "#{node['postfix']['conf_dir']}/sasl_passwd" + node.default_unless['postfix']['main']['smtp_sasl_password_maps'] = "hash:#{node['postfix']['sasl_password_file']}" + node.default_unless['postfix']['main']['smtp_sasl_security_options'] = 'noanonymous' + node.default_unless['postfix']['sasl']['smtp_sasl_user_name'] = '' + node.default_unless['postfix']['sasl']['smtp_sasl_passwd'] = '' + node.default_unless['postfix']['main']['relayhost'] = '' end if node['postfix']['use_alias_maps'] - node.default['postfix']['main']['alias_maps'] = ["hash:#{node['postfix']['aliases_db']}"] + node.default_unless['postfix']['main']['alias_maps'] = ["hash:#{node['postfix']['aliases_db']}"] end if node['postfix']['use_transport_maps'] - node.default['postfix']['main']['transport_maps'] = ["hash:#{node['postfix']['transport_db']}"] + node.default_unless['postfix']['main']['transport_maps'] = ["hash:#{node['postfix']['transport_db']}"] end if node['postfix']['use_access_maps'] - node.default['postfix']['main']['access_maps'] = ["hash:#{node['postfix']['access_db']}"] + node.default_unless['postfix']['main']['access_maps'] = ["hash:#{node['postfix']['access_db']}"] end if node['postfix']['use_virtual_aliases'] - node.default['postfix']['main']['virtual_alias_maps'] = ["#{node['postfix']['virtual_alias_db_type']}:#{node['postfix']['virtual_alias_db']}"] + node.default_unless['postfix']['main']['virtual_alias_maps'] = ["#{node['postfix']['virtual_alias_db_type']}:#{node['postfix']['virtual_alias_db']}"] end if node['postfix']['use_virtual_aliases_domains'] - node.default['postfix']['main']['virtual_alias_domains'] = ["#{node['postfix']['virtual_alias_domains_db_type']}:#{node['postfix']['virtual_alias_domains_db']}"] + node.default_unless['postfix']['main']['virtual_alias_domains'] = ["#{node['postfix']['virtual_alias_domains_db_type']}:#{node['postfix']['virtual_alias_domains_db']}"] end diff --git a/spec/wrapper_spec.rb b/spec/wrapper_spec.rb new file mode 100644 index 0000000..9820302 --- /dev/null +++ b/spec/wrapper_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +## +# Spec to ensure wrapper cookbook can correctly override +# attributes using default level without _attributes +# recipe clearing them. + +describe 'wrapper::default' do + cached(:chef_run) do + ChefSpec::SoloRunner.new.converge(described_recipe) + end + + describe '_attributes recipes' do + it 'keeps wrapper cookbook default set attributes' do + expect(chef_run.node['postfix']['main']['relayhost']).to eq('please') + expect(chef_run.node['postfix']['main']['smtp_sasl_security_options']).to eq('keep') + expect(chef_run.node['postfix']['sasl']['smtp_sasl_user_name']).to eq('us') + end + end +end diff --git a/test/fixtures/cookbooks/wrapper/attributes/default.rb b/test/fixtures/cookbooks/wrapper/attributes/default.rb new file mode 100644 index 0000000..6ea324e --- /dev/null +++ b/test/fixtures/cookbooks/wrapper/attributes/default.rb @@ -0,0 +1,6 @@ + +default['postfix']['main']['smtp_sasl_auth_enable'] = 'yes' + +default['postfix']['main']['relayhost'] = 'please' +default['postfix']['sasl']['smtp_sasl_user_name'] = 'keep' +default['postfix']['sasl']['smtp_sasl_passwd'] = 'us' diff --git a/test/fixtures/cookbooks/wrapper/metadata.rb b/test/fixtures/cookbooks/wrapper/metadata.rb new file mode 100644 index 0000000..e92f14f --- /dev/null +++ b/test/fixtures/cookbooks/wrapper/metadata.rb @@ -0,0 +1,3 @@ +name 'wrapper' +version '0.0.1' +description 'Wrapper cookbook, used for testing only.' diff --git a/test/fixtures/cookbooks/wrapper/recipes/default.rb b/test/fixtures/cookbooks/wrapper/recipes/default.rb new file mode 100644 index 0000000..6bd393a --- /dev/null +++ b/test/fixtures/cookbooks/wrapper/recipes/default.rb @@ -0,0 +1,2 @@ + +include 'postfix'