From 2111a856f79f00f7610fdce43b32aec9b7a22287 Mon Sep 17 00:00:00 2001 From: Klaus Wagner Date: Mon, 31 Mar 2014 18:52:48 +0200 Subject: [PATCH 1/2] Change stdlib uri to http for easier calling behind proxy --- .fixtures.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.fixtures.yml b/.fixtures.yml index fa360bb..aec862a 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -1,7 +1,7 @@ fixtures: repositories: "stdlib": - repo: "git://github.com/puppetlabs/puppetlabs-stdlib.git" + repo: "https://github.com/puppetlabs/puppetlabs-stdlib.git" ref: "3.0.0" symlinks: From 904a9cedfa69771f60ca46d771f2172fe8e22534 Mon Sep 17 00:00:00 2001 From: Klaus Wagner Date: Mon, 31 Mar 2014 20:28:21 +0200 Subject: [PATCH 2/2] Extend module to support RHEL5 as well because the udev utilies have different names. Also implement a protection method udev.conf in case override is not expected. (New param config_file_replace) --- manifests/init.pp | 5 +- manifests/params.pp | 16 +++++- manifests/udevadm/logpriority.pp | 2 +- manifests/udevadm/trigger.pp | 2 +- spec/classes/params_spec.rb | 26 +++++++-- spec/classes/udev_spec.rb | 58 ++++++++++++++------ spec/classes/udevadm/logpriority_spec.rb | 68 +++++++++++++++++++++--- spec/classes/udevadm/trigger_spec.rb | 24 ++++++++- spec/defines/rule_spec.rb | 22 +++++--- 9 files changed, 183 insertions(+), 40 deletions(-) diff --git a/manifests/init.pp b/manifests/init.pp index 95de51c..7b78eea 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -20,9 +20,11 @@ # include udev # class udev( - $udev_log = 'err' + $udev_log = 'err', + $config_file_replace = true ) inherits udev::params { validate_re($udev_log, '^err$|^info$|^debug$') + validate_bool($config_file_replace) anchor { 'udev:begin': } -> package{ $udev::params::udev_package: @@ -34,6 +36,7 @@ owner => 'root', group => 'root', mode => '0644', + replace => $config_file_replace, notify => Class['udev::udevadm::logpriority'], } -> anchor { 'udev:end': } diff --git a/manifests/params.pp b/manifests/params.pp index dd5a056..47f4d45 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -7,7 +7,21 @@ $udevadm_path = '/sbin' case $::osfamily { - 'redhat': {} + 'redhat': { + case $::operatingsystemmajrelease { + '5': { + $udevtrigger = 'udevtrigger' + $udevlogpriority = 'udevcontrol log_priority' + } + '6','7': { + $udevtrigger = 'udevadm trigger' + $udevlogpriority = 'udevadm control --log-priority' + } + default: { + fail("Module ${module_name} is not supported on RedHat release ${::operatingsystemmajrelease}") + } + } + } default: { fail("Module ${module_name} is not supported on ${::operatingsystem}") } diff --git a/manifests/udevadm/logpriority.pp b/manifests/udevadm/logpriority.pp index 1bd0c9c..f557013 100644 --- a/manifests/udevadm/logpriority.pp +++ b/manifests/udevadm/logpriority.pp @@ -23,7 +23,7 @@ ) inherits udev::params { validate_re($udev_log, '^err$|^info$|^debug$') - exec { "udevadm control --log-priority=${udev_log}": + exec { "${udev::params::udevlogpriority}=${udev_log}": refreshonly => true, path => [$udev::params::udevadm_path], } diff --git a/manifests/udevadm/trigger.pp b/manifests/udevadm/trigger.pp index 1a703aa..7c3e03c 100644 --- a/manifests/udevadm/trigger.pp +++ b/manifests/udevadm/trigger.pp @@ -17,7 +17,7 @@ # cases. # http://unix.stackexchange.com/questions/39370/how-to-reload-udev-rules-without-reboot - exec { 'udevadm trigger': + exec { $udev::params::udevtrigger: refreshonly => true, path => [$udev::params::udevadm_path], } diff --git a/spec/classes/params_spec.rb b/spec/classes/params_spec.rb index 4108250..bef1f27 100644 --- a/spec/classes/params_spec.rb +++ b/spec/classes/params_spec.rb @@ -2,9 +2,29 @@ describe 'udev::params', :type => :class do describe 'for osfamily RedHat' do - let(:facts) {{ :osfamily => 'RedHat' }} + let :facts do + { + :osfamily => 'RedHat', + :operatingsystemmajrelease => '6', + } + end + + + it { should contain_class('udev::params') } + end - it { should include_class('udev::params') } + describe 'for osfamily RedHat' do + let :facts do + { + :osfamily => 'RedHat', + :operatingsystemmajrelease => '4', + } + end + + it 'should fail' do + expect { should contain_class('udev::params') }. + to raise_error(Puppet::Error, /not supported on RedHat release 4/) + end end describe 'unsupported osfamily' do @@ -16,7 +36,7 @@ end it 'should fail' do - expect { should include_class('udev::params') }. + expect { should contain_class('udev::params') }. to raise_error(Puppet::Error, /not supported on Debian/) end end diff --git a/spec/classes/udev_spec.rb b/spec/classes/udev_spec.rb index 66f9eae..5186244 100644 --- a/spec/classes/udev_spec.rb +++ b/spec/classes/udev_spec.rb @@ -2,18 +2,19 @@ describe 'udev', :type => :class do - shared_examples 'udev_log_param' do |udev_log, params| + shared_examples 'udev_log_param' do |udev_log, config_file_replace, params| let(:params) { params } it do - should include_class('udev') + should contain_class('udev') should contain_package('udev').with_ensure('present') should contain_file('/etc/udev/udev.conf'). with({ - :ensure => 'file', - :owner => 'root', - :group => 'root', - :mode => '0644', + :ensure => 'file', + :owner => 'root', + :group => 'root', + :mode => '0644', + :config_file_replace => $config_file_replace, }). with_content(/udev_log="#{udev_log}"/) should contain_class('udev::udevadm::trigger') @@ -23,22 +24,39 @@ end describe 'for osfamily RedHat' do - let(:facts) {{ :osfamily => 'RedHat' }} + let :facts do + { + :osfamily => 'RedHat', + :operatingsystemmajrelease => '6', + } + end describe 'no params' do - it_behaves_like('udev_log_param', 'err', {}) + it_behaves_like('udev_log_param', 'err', true, {}) + end + + describe 'udev_log => err, config_file_replace => true' do + it_behaves_like('udev_log_param', 'err', true, { :udev_log => 'err', :config_file_replace => true }) + end + + describe 'udev_log => info, config_file_replace => true' do + it_behaves_like('udev_log_param', 'info', true, { :udev_log => 'info', :config_file_replace => true }) + end + + describe 'udev_log => debug, config_file_replace => true' do + it_behaves_like('udev_log_param', 'debug', true, { :udev_log => 'debug', :config_file_replace => true }) end - describe 'udev_log => err' do - it_behaves_like('udev_log_param', 'err', { :udev_log => 'err' }) + describe 'udev_log => err, config_file_replace => false' do + it_behaves_like('udev_log_param', 'err', false, { :udev_log => 'err', :config_file_replace => false }) end - describe 'udev_log => info' do - it_behaves_like('udev_log_param', 'info', { :udev_log => 'info' }) + describe 'udev_log => info, config_file_replace => false' do + it_behaves_like('udev_log_param', 'info', false, { :udev_log => 'info', :config_file_replace => false }) end - describe 'udev_log => debug' do - it_behaves_like('udev_log_param', 'debug', { :udev_log => 'debug' }) + describe 'udev_log => debug, config_file_replace => false' do + it_behaves_like('udev_log_param', 'debug', false, { :udev_log => 'debug', :config_file_replace => false }) end describe 'udev_log => invalid' do @@ -46,11 +64,21 @@ it 'should fail' do expect { - should include_class('udev') + should contain_class('udev') }.to raise_error(Puppet::Error, /does not match/) end end + describe 'config_file_replace => invalid' do + let(:params) {{ :config_file_replace => 'invalid' }} + + it 'should fail' do + expect { + should contain_class('udev') + }.to raise_error(Puppet::Error, /is not a boolean/) + end + end + end end diff --git a/spec/classes/udevadm/logpriority_spec.rb b/spec/classes/udevadm/logpriority_spec.rb index 11c7d34..d81ac9e 100644 --- a/spec/classes/udevadm/logpriority_spec.rb +++ b/spec/classes/udevadm/logpriority_spec.rb @@ -2,7 +2,7 @@ describe 'udev::udevadm::logpriority', :type => :class do - shared_examples 'udev_log_param' do |udev_log, params| + shared_examples 'udev_log_param_redhat_6' do |udev_log, params| let(:params) { params } it do @@ -15,23 +15,75 @@ end end - describe 'for osfamily RedHat' do - let(:facts) {{ :osfamily => 'RedHat' }} + shared_examples 'udev_log_param_redhat_5' do |udev_log, params| + let(:params) { params } + + it do + should contain_class('udev::udevadm::logpriority'). + with_udev_log(udev_log) + should contain_exec("udevcontrol log_priority=#{udev_log}").with({ + :refreshonly => true, + :path => '/sbin', + }) + end + end + + describe 'for osfamily RedHat and operatingsystemmajrelease 6' do + let(:facts) do + { :osfamily => 'RedHat', + :operatingsystemmajrelease => '6', + } + end + + describe 'no params' do + it_behaves_like('udev_log_param_redhat_6', 'err', {}) + end + + describe 'udev_log => err' do + it_behaves_like('udev_log_param_redhat_6', 'err', { :udev_log => 'err' }) + end + + describe 'udev_log => info' do + it_behaves_like('udev_log_param_redhat_6', 'info', { :udev_log => 'info' }) + end + + describe 'udev_log => debug' do + it_behaves_like('udev_log_param_redhat_6', 'debug', { :udev_log => 'debug' }) + end + + describe 'udev_log => invalid' do + let(:params) {{ :udev_log => 'invalid' }} + + it 'should fail' do + expect { + should contain_class('udev::udevadm::logpriority') + }.to raise_error(Puppet::Error, /does not match/) + end + end + + end + + describe 'for osfamily RedHat and operatingsystemmajrelease 5' do + let(:facts) do + { :osfamily => 'RedHat', + :operatingsystemmajrelease => '5', + } + end describe 'no params' do - it_behaves_like('udev_log_param', 'err', {}) + it_behaves_like('udev_log_param_redhat_5', 'err', {}) end describe 'udev_log => err' do - it_behaves_like('udev_log_param', 'err', { :udev_log => 'err' }) + it_behaves_like('udev_log_param_redhat_5', 'err', { :udev_log => 'err' }) end describe 'udev_log => info' do - it_behaves_like('udev_log_param', 'info', { :udev_log => 'info' }) + it_behaves_like('udev_log_param_redhat_5', 'info', { :udev_log => 'info' }) end describe 'udev_log => debug' do - it_behaves_like('udev_log_param', 'debug', { :udev_log => 'debug' }) + it_behaves_like('udev_log_param_redhat_5', 'debug', { :udev_log => 'debug' }) end describe 'udev_log => invalid' do @@ -39,7 +91,7 @@ it 'should fail' do expect { - should include_class('udev::udevadm::logpriority') + should contain_class('udev::udevadm::logpriority') }.to raise_error(Puppet::Error, /does not match/) end end diff --git a/spec/classes/udevadm/trigger_spec.rb b/spec/classes/udevadm/trigger_spec.rb index 34d3fe5..040f63e 100644 --- a/spec/classes/udevadm/trigger_spec.rb +++ b/spec/classes/udevadm/trigger_spec.rb @@ -3,9 +3,13 @@ describe 'udev::udevadm::trigger', :type => :class do describe 'for osfamily RedHat' do - let(:facts) {{ :osfamily => 'RedHat' }} + let(:facts) do + { :osfamily => 'RedHat', + :operatingsystemmajrelease => '6', + } + end - it { should include_class('udev::udevadm::trigger') } + it { should contain_class('udev::udevadm::trigger') } it do should contain_exec('udevadm trigger').with({ :refreshonly => true, @@ -14,4 +18,20 @@ end end + describe 'for osfamily RedHat' do + let(:facts) do + { :osfamily => 'RedHat', + :operatingsystemmajrelease => '5', + } + end + + it { should contain_class('udev::udevadm::trigger') } + it do + should contain_exec('udevtrigger').with({ + :refreshonly => true, + :path => ['/sbin'], + }) + end + end + end diff --git a/spec/defines/rule_spec.rb b/spec/defines/rule_spec.rb index fb00d35..18ed6a5 100644 --- a/spec/defines/rule_spec.rb +++ b/spec/defines/rule_spec.rb @@ -7,7 +7,7 @@ let(:params) { params } it do - should include_class('udev') + should contain_class('udev') should contain_file("/etc/udev/rules.d/#{title}").with({ :ensure => state, :owner => 'root', @@ -23,7 +23,13 @@ describe 'for osfamily RedHat' do - let(:facts) {{ :osfamily => 'RedHat' }} + let :facts do + { + :osfamily => 'RedHat', + :operatingsystemmajrelease => '6', + } + end + describe 'content => foo' do it_behaves_like( @@ -77,7 +83,7 @@ it 'should fail' do expect { - should include_class('udev') + should contain_class('udev') }.to raise_error(Puppet::Error, /parameter \$source or \$content is required/) end end @@ -93,7 +99,7 @@ it 'should fail' do expect { - should include_class('udev') + should contain_class('udev') }.to raise_error(Puppet::Error, /parameters \$source and \$content are mutually exclusive/) end end @@ -110,7 +116,7 @@ it 'should fail' do expect { - should include_class('udev') + should contain_class('udev') }.to raise_error(Puppet::Error, /parameters \$source and \$content are mutually exclusive/) end end @@ -121,7 +127,7 @@ it 'should fail' do expect { - should include_class('udev') + should contain_class('udev') }.to raise_error(Puppet::Error, /does not match/) end end @@ -132,7 +138,7 @@ it 'should fail' do expect { - should include_class('udev') + should contain_class('udev') }.to raise_error(Puppet::Error, /is not a string/) end end @@ -143,7 +149,7 @@ it 'should fail' do expect { - should include_class('udev') + should contain_class('udev') }.to raise_error(Puppet::Error, /is not a string/) end end