summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.fixtures.yml8
-rw-r--r--.gitignore2
-rw-r--r--.rspec3
-rw-r--r--.travis.yml10
-rw-r--r--Gemfile5
-rw-r--r--Puppetfile4
-rw-r--r--Puppetfile.lock10
-rw-r--r--Rakefile16
-rw-r--r--manifests/client.pp38
-rw-r--r--manifests/plugins/setup.pp5
-rw-r--r--spec/classes/munin_client_spec.rb50
-rw-r--r--spec/classes/munin_host_spec.rb37
-rw-r--r--spec/spec.opts1
-rw-r--r--spec/spec_helper.rb4
-rw-r--r--spec/spec_helper_system.rb27
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}"
diff --git a/.gitignore b/.gitignore
index 6ce4053..9ef9ca4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
Gemfile.lock
spec/fixtures/
vendor/
+.tmp/*
+.librarian/*
diff --git a/.rspec b/.rspec
new file mode 100644
index 0000000..e0b06e8
--- /dev/null
+++ b/.rspec
@@ -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
diff --git a/Gemfile b/Gemfile
index ffc5ecc..d5495b8 100644
--- a/Gemfile
+++ b/Gemfile
@@ -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)
+
diff --git a/Rakefile b/Rakefile
index 0d1f018..e9e821a 100644
--- a/Rakefile
+++ b/Rakefile
@@ -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