diff options
-rw-r--r-- | .fixtures.yml | 8 | ||||
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | .rspec | 3 | ||||
-rw-r--r-- | .travis.yml | 10 | ||||
-rw-r--r-- | Gemfile | 5 | ||||
-rw-r--r-- | Puppetfile | 4 | ||||
-rw-r--r-- | Puppetfile.lock | 10 | ||||
-rw-r--r-- | Rakefile | 16 | ||||
-rw-r--r-- | manifests/client.pp | 38 | ||||
-rw-r--r-- | manifests/plugins/setup.pp | 5 | ||||
-rw-r--r-- | spec/classes/munin_client_spec.rb | 50 | ||||
-rw-r--r-- | spec/classes/munin_host_spec.rb | 37 | ||||
-rw-r--r-- | spec/spec.opts | 1 | ||||
-rw-r--r-- | spec/spec_helper.rb | 4 | ||||
-rw-r--r-- | spec/spec_helper_system.rb | 27 |
15 files changed, 184 insertions, 36 deletions
diff --git a/.fixtures.yml b/.fixtures.yml deleted file mode 100644 index e05b8fd..0000000 --- a/.fixtures.yml +++ /dev/null @@ -1,8 +0,0 @@ -fixtures: - repositories: - concat: "https://github.com/puppetlabs/puppetlabs-concat" - openbsd: "https://github.com/duritong/puppet-openbsd" - stdlib: "https://github.com/puppetlabs/puppetlabs-stdlib" - - symlinks: - munin: "#{source_dir}" @@ -1,3 +1,5 @@ Gemfile.lock spec/fixtures/ vendor/ +.tmp/* +.librarian/* @@ -0,0 +1,3 @@ +--format documentation +--color +#--backtrace diff --git a/.travis.yml b/.travis.yml index 3e66a86..e27b2f5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,11 @@ rvm: - 1.8.7 - 1.9.3 - 2.0.0 +script: 'rake spec' env: - - PUPPET_VERSION=2.6.0 - PUPPET_VERSION=2.7.0 + - PUPPET_VERSION=3.0.0 + - PUPPET_VERSION=3.1.0 - PUPPET_VERSION=3.2.0 matrix: exclude: @@ -13,6 +15,8 @@ matrix: env: PUPPET_VERSION=2.6.0 # No support for Ruby 2.0 before Puppet 3.2 - rvm: 2.0.0 - env: PUPPET_VERSION=2.6.0 - - rvm: 2.0.0 env: PUPPET_VERSION=2.7.0 + - rvm: 2.0.0 + env: PUPPET_VERSION=3.0.0 + - rvm: 2.0.0 + env: PUPPET_VERSION=3.1.0 @@ -9,3 +9,8 @@ end gem 'puppet', puppetversion gem 'puppet-lint', '>=0.3.2' gem 'puppetlabs_spec_helper', '>=0.2.0' +gem 'rake', '>=0.9.2.2' +gem 'librarian-puppet', '>=0.9.10' +gem 'rspec-system-puppet', :require => false +gem 'serverspec', :require => false +gem 'rspec-system-serverspec', :require => false diff --git a/Puppetfile b/Puppetfile new file mode 100644 index 0000000..60d1d14 --- /dev/null +++ b/Puppetfile @@ -0,0 +1,4 @@ +forge 'http://forge.puppetlabs.com' + +mod 'puppetlabs/stdlib', '>=0.1.6' +mod 'puppetlabs/concat'
\ No newline at end of file diff --git a/Puppetfile.lock b/Puppetfile.lock new file mode 100644 index 0000000..0689d41 --- /dev/null +++ b/Puppetfile.lock @@ -0,0 +1,10 @@ +FORGE + remote: http://forge.puppetlabs.com + specs: + puppetlabs/concat (1.0.0-rc1) + puppetlabs/stdlib (4.1.0) + +DEPENDENCIES + puppetlabs/concat (>= 0) + puppetlabs/stdlib (>= 0.1.6) + @@ -1,9 +1,25 @@ +require 'bundler' +Bundler.require(:rake) + require 'puppetlabs_spec_helper/rake_tasks' require 'puppet-lint/tasks/puppet-lint' +require 'rspec-system/rake_task' PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "vendor/**/*.pp"] PuppetLint.configuration.log_format = '%{path}:%{linenumber}:%{KIND}: %{message}' PuppetLint.configuration.send("disable_class_inherits_from_params_class") PuppetLint.configuration.send("disable_80chars") +# use librarian-puppet to manage fixtures instead of .fixtures.yml +# offers more possibilities like explicit version management, forge downloads,... +task :librarian_spec_prep do + sh "librarian-puppet install --path=spec/fixtures/modules/" + pwd = `pwd`.strip + unless File.directory?("#{pwd}/spec/fixtures/modules/munin") + sh "ln -s #{pwd} #{pwd}/spec/fixtures/modules/munin" + end +end +task :spec_prep => :librarian_spec_prep + + task :default => [:spec, :lint] diff --git a/manifests/client.pp b/manifests/client.pp index 4d70cac..c33ec0d 100644 --- a/manifests/client.pp +++ b/manifests/client.pp @@ -12,13 +12,39 @@ class munin::client( $shorewall_collector_source = 'net', $export_tag = 'munin' ) { + anchor { 'munin::client::installed': } + case $::operatingsystem { - openbsd: { include munin::client::openbsd } - darwin: { include munin::client::darwin } - debian,ubuntu: { include munin::client::debian } - gentoo: { include munin::client::gentoo } - centos: { include munin::client::package } - default: { include munin::client::base } + openbsd: { + class { 'munin::client::openbsd': + before => Anchor['munin::client::installed'] + } + } + darwin: { + class { 'munin::client::darwin': + before => Anchor['munin::client::installed'] + } + } + debian,ubuntu: { + class { 'munin::client::debian': + before => Anchor['munin::client::installed'] + } + } + gentoo: { + class { 'munin::client::gentoo': + before => Anchor['munin::client::installed'] + } + } + centos: { + class { 'munin::client::package': + before => Anchor['munin::client::installed'] + } + } + default: { + class { 'munin::client::base': + before => Anchor['munin::client::installed'] + } + } } if $munin::client::manage_shorewall { class{'shorewall::rules::munin': diff --git a/manifests/plugins/setup.pp b/manifests/plugins/setup.pp index e0826f0..e1a57d9 100644 --- a/manifests/plugins/setup.pp +++ b/manifests/plugins/setup.pp @@ -1,12 +1,10 @@ # Set up the munin plugins for a node class munin::plugins::setup { - # This is required for the munin-node service and package requirements below. - Class['munin::client'] -> Class['munin::plugins::setup'] - file { [ '/etc/munin/plugins', '/etc/munin/plugin-conf.d' ]: ensure => directory, + require => Anchor['munin::client::installed'], ignore => 'snmp_*', checksum => mtime, recurse => true, @@ -18,6 +16,7 @@ class munin::plugins::setup { mode => '0755'; '/etc/munin/plugin-conf.d/munin-node': ensure => present, + require => Anchor['munin::client::installed'], notify => Service['munin-node'], owner => root, group => 0, diff --git a/spec/classes/munin_client_spec.rb b/spec/classes/munin_client_spec.rb index 5438b20..9a92cef 100644 --- a/spec/classes/munin_client_spec.rb +++ b/spec/classes/munin_client_spec.rb @@ -1,14 +1,50 @@ require 'spec_helper' describe 'munin::client' do - let :facts do - { - :operatingsystem => 'CentOS', - :interfaces => 'lo,eth0', - } + shared_examples 'debian-client' do |os, codename| + let(:facts) {{ + :operatingsystem => os, + :osfamily => 'Debian', + :lsbdistcodename => codename, + }} + it { should contain_package('munin-node') } + it { should contain_package('iproute') } + it { should contain_file('/etc/munin/munin-node.conf') } + it { should include_class('munin::client::debian') } + end + + shared_examples 'redhat-client' do |os, codename| + let(:facts) {{ + :operatingsystem => os, + :osfamily => 'RedHat', + :lsbdistcodename => codename, + }} + it { should contain_package('munin-node') } + it { should contain_file('/etc/munin/munin-node.conf') } + end + + context 'on debian-like system' do + it_behaves_like 'debian-client', 'Debian', 'squeeze' + it_behaves_like 'debian-client', 'Debian', 'wheezy' + it_behaves_like 'debian-client', 'Ubuntu', 'precise' end - it 'should compile' do - should include_class('munin::client') + context 'on redhat-like system' do + it_behaves_like 'redhat-client', 'CentOS', '6' + # not supported yet + # it_behaves_like 'redhat', 'RedHat', '6' end + + context 'gentoo' do + let(:facts) {{ + :operatingsystem => 'Gentoo', + :osfamily => 'Gentoo', + :lsbdistcodename => '', + :interfaces => 'lo,eth0', + }} + it { should contain_package('munin-node') } + it { should contain_file('/etc/munin/munin-node.conf') } + it { should include_class('munin::client::gentoo') } + end + end diff --git a/spec/classes/munin_host_spec.rb b/spec/classes/munin_host_spec.rb index 2216cc5..461ced5 100644 --- a/spec/classes/munin_host_spec.rb +++ b/spec/classes/munin_host_spec.rb @@ -1,14 +1,37 @@ require 'spec_helper' describe 'munin::host' do - let :facts do - { - :operatingsystem => 'CentOS', - :interfaces => 'lo,eth0', - } + shared_examples 'debian-host' do |os, codename| + let(:facts) {{ + :operatingsystem => os, + :osfamily => 'Debian', + :lsbdistcodename => codename, + :concat_basedir => '/var/lib/puppet/concat', + }} + it { should contain_package('munin') } + it { should contain_file('/etc/munin/munin.conf') } + it { should include_class('munin::host') } end - it 'should compile' do - should include_class('munin::host') + shared_examples 'redhat-host' do |os, codename| + let(:facts) {{ + :operatingsystem => os, + :osfamily => 'RedHat', + :lsbdistcodename => codename, + :concat_basedir => '/var/lib/puppet/concat', + }} + it { should contain_package('munin') } + it { should contain_file('/etc/munin/munin.conf') } + it { should include_class('munin::host') } + end + + context 'on debian-like system' do + it_behaves_like 'debian-host', 'Debian', 'squeeze' + it_behaves_like 'debian-host', 'Debian', 'wheezy' + it_behaves_like 'debian-host', 'Ubuntu', 'precise' + end + + context 'on redhat-like system' do + it_behaves_like 'redhat-host', 'CentOS', '6' end end diff --git a/spec/spec.opts b/spec/spec.opts deleted file mode 100644 index d1bd681..0000000 --- a/spec/spec.opts +++ /dev/null @@ -1 +0,0 @@ ---format documentation --colour --backtrace diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index cffe80c..70ab1fb 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -5,5 +5,7 @@ fixture_path = File.expand_path(File.join(__FILE__, '..', 'fixtures')) RSpec.configure do |c| c.module_path = File.join(fixture_path, 'modules') c.manifest_dir = File.join(fixture_path, 'manifests') - c.mock_with :mocha end + +Puppet::Util::Log.level = :warning +Puppet::Util::Log.newdestination(:console) diff --git a/spec/spec_helper_system.rb b/spec/spec_helper_system.rb new file mode 100644 index 0000000..9adfea9 --- /dev/null +++ b/spec/spec_helper_system.rb @@ -0,0 +1,27 @@ +require 'rspec-system/spec_helper' +require 'rspec-system-puppet/helpers' +require 'rspec-system-serverspec/helpers' +include Serverspec::Helper::RSpecSystem +include Serverspec::Helper::DetectOS +include RSpecSystemPuppet::Helpers + +RSpec.configure do |c| + # Project root + proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..')) + + # Enable colour + c.tty = true + + c.include RSpecSystemPuppet::Helpers + + # This is where we 'setup' the nodes before running our tests + c.before :suite do + # Install puppet + puppet_install + + # Install modules and dependencies + puppet_module_install(:source => proj_root, :module_name => 'munin') + shell('puppet module install puppetlabs-stdlib') + shell('puppet module install puppetlabs-concat') + end +end |