diff options
-rw-r--r-- | .fixtures.yml | 3 | ||||
-rw-r--r-- | Gemfile | 13 | ||||
-rw-r--r-- | Rakefile | 5 | ||||
-rw-r--r-- | manifests/debian.pp | 18 | ||||
-rw-r--r-- | manifests/files.pp (renamed from manifests/base.pp) | 14 | ||||
-rw-r--r-- | manifests/init.pp | 17 | ||||
-rw-r--r-- | manifests/lens.pp | 14 | ||||
-rw-r--r-- | manifests/packages.pp | 22 | ||||
-rw-r--r-- | manifests/params.pp | 20 | ||||
-rw-r--r-- | manifests/redhat.pp | 13 | ||||
-rw-r--r-- | spec/.rspec (renamed from spec/spec.opts) | 0 | ||||
-rw-r--r-- | spec/defines/augeas_lens_spec.rb | 68 | ||||
-rw-r--r-- | spec/fixtures/manifests/site.pp | 23 | ||||
-rw-r--r-- | spec/hosts/simple_debian_squeeze_spec.rb | 91 | ||||
-rw-r--r-- | spec/hosts/simple_debian_wheezy_spec.rb | 91 | ||||
-rw-r--r-- | spec/hosts/simple_redhat_spec.rb | 82 | ||||
-rw-r--r-- | spec/hosts/with_lens_noaugeas_spec.rb | 9 | ||||
-rw-r--r-- | spec/hosts/with_lens_spec.rb | 56 | ||||
-rw-r--r-- | spec/hosts/wrong_os_spec.rb | 11 | ||||
-rw-r--r-- | spec/spec_helper.rb | 34 |
20 files changed, 524 insertions, 80 deletions
diff --git a/.fixtures.yml b/.fixtures.yml new file mode 100644 index 0000000..d8386fa --- /dev/null +++ b/.fixtures.yml @@ -0,0 +1,3 @@ +fixtures: + symlinks: + "augeas": "#{source_dir}" @@ -0,0 +1,13 @@ +source :rubygems + +if ENV.key?('PUPPET_VERSION') + puppetversion = "= #{ENV['PUPPET_VERSION']}" +else + puppetversion = ['>= 2.7'] +end + +gem 'rake' +gem 'puppet-lint' +gem 'rspec-puppet' +gem 'puppet', puppetversion +gem 'puppetlabs_spec_helper' @@ -1,2 +1,5 @@ -require 'rubygems' +require 'puppet-lint/tasks/puppet-lint' require 'puppetlabs_spec_helper/rake_tasks' + +task :default => [:spec, :lint] + diff --git a/manifests/debian.pp b/manifests/debian.pp deleted file mode 100644 index bc2e3eb..0000000 --- a/manifests/debian.pp +++ /dev/null @@ -1,18 +0,0 @@ -class augeas::debian inherits augeas::base { - - package { - ['augeas-lenses', 'libaugeas0', 'augeas-tools']: - ensure => $augeas::base::version, - before => File['/usr/share/augeas/lenses'], - } - - $augeas_ruby = $::lsbdistcodename ? { - 'wheezy' => 'libaugeas-ruby1.9.1', - default => 'libaugeas-ruby1.8', - } - - package {$augeas_ruby: - ensure => $augeas::base::rubylib_version, - } - -} diff --git a/manifests/base.pp b/manifests/files.pp index 37ad0e2..01427ad 100644 --- a/manifests/base.pp +++ b/manifests/files.pp @@ -1,15 +1,5 @@ -class augeas::base { - $lens_dir = '/usr/share/augeas/lenses' - - $version = $augeas_version ? { - '' => 'present', - default => $augeas_version - } - - $rubylib_version = $augeas_ruby_version ? { - '' => 'present', - default => $augeas_ruby_version - } +class augeas::files { + $lens_dir = $augeas::lens_dir # ensure no file not managed by puppet ends up in there. file { $lens_dir: diff --git a/manifests/init.pp b/manifests/init.pp index e82e21c..6374955 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,7 +1,12 @@ -class augeas { - case $::operatingsystem { - /RedHat|CentOS|Fedora/: { include augeas::redhat } - /Debian|Ubuntu|kFreeBSD/: { include augeas::debian } - default: { include augeas::base } - } +class augeas ( + $version = $augeas_version, + $ruby_version = $augeas_ruby_version, + $lens_dir = $augeas::params::lens_dir, +) inherits augeas::params { + + class {'::augeas::packages': } -> + class {'::augeas::files': } -> + Class['augeas'] + + Package['ruby-augeas'] -> Augeas <| |> } diff --git a/manifests/lens.pp b/manifests/lens.pp index 55dc9ae..723f217 100644 --- a/manifests/lens.pp +++ b/manifests/lens.pp @@ -29,12 +29,14 @@ define augeas::lens ( $test_source=false, $stock_since=false, ) { + if !defined(Class['augeas']) { + fail('You must declare the augeas class before using augeas::lens') + } - if (!$stock_since or !versioncmp($::augeasversion, $stock_since)) { - include augeas::base + if (!$stock_since or versioncmp($::augeasversion, $stock_since) < 0) { - $lens_dest = "${augeas::base::lens_dir}/${name}.aug" - $test_dest = "${augeas::base::lens_dir}/tests/test_${name}.aug" + $lens_dest = "${augeas::lens_dir}/${name}.aug" + $test_dest = "${augeas::lens_dir}/tests/test_${name}.aug" file { $lens_dest: ensure => $ensure, @@ -42,7 +44,7 @@ define augeas::lens ( } exec { "Typecheck lens ${name}": - command => "augparse -I ${augeas::base::lens_dir} ${lens_dest} || (rm -f ${lens_dest} && exit 1)", + command => "augparse -I ${augeas::lens_dir} ${lens_dest} || (rm -f ${lens_dest} && exit 1)", refreshonly => true, subscribe => File[$lens_dest], } @@ -55,7 +57,7 @@ define augeas::lens ( } exec { "Test lens ${name}": - command => "augparse -I ${augeas::base::lens_dir} ${test_dest} || (rm -f ${lens_dest} && rm -f ${test_dest} && exit 1)", + command => "augparse -I ${augeas::lens_dir} ${test_dest} || (rm -f ${lens_dest} && rm -f ${test_dest} && exit 1)", refreshonly => true, subscribe => File[$lens_dest, $test_dest], } diff --git a/manifests/packages.pp b/manifests/packages.pp new file mode 100644 index 0000000..e41f800 --- /dev/null +++ b/manifests/packages.pp @@ -0,0 +1,22 @@ +class augeas::packages { + # Augeas packages + $augeas_ensure = $augeas::version ? { + '' => 'present', + default => $augeas::version + } + + package { $augeas::params::augeas_pkgs: + ensure => $augeas_ensure, + } + + # Ruby package + $ruby_ensure = $augeas::ruby_version ? { + '' => 'present', + default => $augeas::ruby_version + } + + package { 'ruby-augeas': + ensure => $ruby_ensure, + name => $augeas::params::ruby_pkg, + } +} diff --git a/manifests/params.pp b/manifests/params.pp new file mode 100644 index 0000000..e7120af --- /dev/null +++ b/manifests/params.pp @@ -0,0 +1,20 @@ +class augeas::params { + $lens_dir = '/usr/share/augeas/lenses' + + case $::osfamily { + 'RedHat': { + $ruby_pkg = 'ruby-augeas' + $augeas_pkgs = ['augeas', 'augeas-libs'] + } + + 'Debian': { + $ruby_pkg = $::lsbdistcodename ? { + 'wheezy' => 'libaugeas-ruby1.9.1', + default => 'libaugeas-ruby1.8', + } + $augeas_pkgs = ['augeas-lenses', 'libaugeas0', 'augeas-tools'] + } + + default: { fail("Unsupported OS family: ${::osfamily}") } + } +} diff --git a/manifests/redhat.pp b/manifests/redhat.pp deleted file mode 100644 index 1e95728..0000000 --- a/manifests/redhat.pp +++ /dev/null @@ -1,13 +0,0 @@ -class augeas::redhat inherits augeas::base { - - package { - ['augeas', 'augeas-libs']: - ensure => $augeas::base::version, - before => File['/usr/share/augeas/lenses'], - } - - package { 'ruby-augeas': - ensure => $augeas::base::rubylib_version, - } - -} diff --git a/spec/spec.opts b/spec/.rspec index 91cd642..91cd642 100644 --- a/spec/spec.opts +++ b/spec/.rspec diff --git a/spec/defines/augeas_lens_spec.rb b/spec/defines/augeas_lens_spec.rb new file mode 100644 index 0000000..57d30b6 --- /dev/null +++ b/spec/defines/augeas_lens_spec.rb @@ -0,0 +1,68 @@ +require 'spec_helper' + +describe 'augeas::lens' do + let (:title) { 'foo' } + let (:facts) { { + :osfamily => 'RedHat', + } } + context 'when no lens_source is passed' do + it 'should error' do + expect { + should contain_file('/usr/share/augeas/lenses/foo.aug') + }.to raise_error(Puppet::Error, /Must pass lens_source/) + end + end + + context 'when lens_source is passed' do + let (:params) { { + :lens_source => '/tmp/foo.aug', + } } + + it { should contain_file('/usr/share/augeas/lenses/foo.aug') } + it { should contain_exec('Typecheck lens foo') } + it { should_not contain_file('/usr/share/augeas/lenses/tests/test_foo.aug') } + it { should_not contain_exec('Test lens foo') } + end + + context 'when lens_source and test_source are passed' do + let (:params) { { + :lens_source => '/tmp/foo.aug', + :test_source => '/tmp/test_foo.aug', + } } + + it { should contain_file('/usr/share/augeas/lenses/foo.aug') } + it { should contain_exec('Typecheck lens foo') } + it { should contain_file('/usr/share/augeas/lenses/tests/test_foo.aug') } + it { should contain_exec('Test lens foo') } + end + + context 'when stock_since is passed and augeas is older' do + let (:params) { { + :lens_source => '/tmp/foo.aug', + :stock_since => '1.2.3', + } } + + let (:facts) { { + :osfamily => 'RedHat', + :augeasversion => '1.0.0', + } } + + it { should contain_file('/usr/share/augeas/lenses/foo.aug') } + it { should contain_exec('Typecheck lens foo') } + end + + context 'when stock_since is passed and augeas is newer' do + let (:params) { { + :lens_source => '/tmp/foo.aug', + :stock_since => '1.2.3', + } } + + let (:facts) { { + :osfamily => 'RedHat', + :augeasversion => '1.5.0', + } } + + it { should_not contain_file('/usr/share/augeas/lenses/foo.aug') } + it { should_not contain_exec('Typecheck lens foo') } + end +end diff --git a/spec/fixtures/manifests/site.pp b/spec/fixtures/manifests/site.pp new file mode 100644 index 0000000..fb803e5 --- /dev/null +++ b/spec/fixtures/manifests/site.pp @@ -0,0 +1,23 @@ +# simple_* and wrong_os tests +node default { + class { '::augeas': + version => $::augeas_version, + ruby_version => $::augeas_ruby_version, + lens_dir => $::augeas_lens_dir, + } +} + +node 'with_lens_noaugeas' { + ::augeas::lens { 'foo': + lens_source => '/tmp/foo.aug', + } +} + +node 'with_lens' { + include ::augeas + ::augeas::lens { 'foo': + lens_source => $::augeas_lens_source, + test_source => $::augeas_test_source, + stock_since => $::augeas_stock_since, + } +} diff --git a/spec/hosts/simple_debian_squeeze_spec.rb b/spec/hosts/simple_debian_squeeze_spec.rb new file mode 100644 index 0000000..4b41105 --- /dev/null +++ b/spec/hosts/simple_debian_squeeze_spec.rb @@ -0,0 +1,91 @@ +require 'spec_helper' + +describe 'simple_debian_squeeze' do + let (:facts) { { + :osfamily => 'Debian', + :lsbdistcodename => 'squeeze', + } } + + context 'when versions are not specified' do + it { should contain_package('libaugeas0').with( + :ensure => 'present' + ) } + it { should contain_package('augeas-tools').with( + :ensure => 'present' + ) } + it { should contain_package('augeas-lenses').with( + :ensure => 'present' + ) } + it { should contain_package('ruby-augeas').with( + :ensure => 'present', + :name => 'libaugeas-ruby1.8' + ) } + end + + context 'when versions are specified' do + let (:facts) { { + :osfamily => 'Debian', + :lsbdistcodename => 'squeeze', + :augeas_version => '1.2.3', + :augeas_ruby_version => '3.2.1', + } } + + it { should contain_package('libaugeas0').with( + :ensure => '1.2.3' + ) } + it { should contain_package('augeas-tools').with( + :ensure => '1.2.3' + ) } + it { should contain_package('augeas-lenses').with( + :ensure => '1.2.3' + ) } + it { should contain_package('ruby-augeas').with( + :ensure => '3.2.1', + :name => 'libaugeas-ruby1.8' + ) } + end + + context 'with standard lens_dir' do + it { should contain_file('/usr/share/augeas/lenses').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true', + :recurse => 'true', + :recurselimit => 1 + ) } + it { should contain_file('/usr/share/augeas/lenses/dist').with( + :ensure => 'directory', + :purge => 'false' + ) } + it { should contain_file('/usr/share/augeas/lenses/tests').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true' + ).without(:recurse) } + end + + context 'with a non standard lens_dir' do + let (:facts) { { + :osfamily => 'Debian', + :lsbdistcodename => 'squeeze', + :augeas_lens_dir => '/opt/augeas/lenses' + } } + + it { should contain_file('/opt/augeas/lenses').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true', + :recurse => 'true', + :recurselimit => 1 + ) } + it { should contain_file('/opt/augeas/lenses/dist').with( + :ensure => 'directory', + :purge => 'false' + ) } + it { should contain_file('/opt/augeas/lenses/tests').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true' + ).without(:recurse) } + end +end diff --git a/spec/hosts/simple_debian_wheezy_spec.rb b/spec/hosts/simple_debian_wheezy_spec.rb new file mode 100644 index 0000000..23c0d1d --- /dev/null +++ b/spec/hosts/simple_debian_wheezy_spec.rb @@ -0,0 +1,91 @@ +require 'spec_helper' + +describe 'simple_debian_squeeze' do + let (:facts) { { + :osfamily => 'Debian', + :lsbdistcodename => 'wheezy', + } } + + context 'when versions are not specified' do + it { should contain_package('libaugeas0').with( + :ensure => 'present' + ) } + it { should contain_package('augeas-tools').with( + :ensure => 'present' + ) } + it { should contain_package('augeas-lenses').with( + :ensure => 'present' + ) } + it { should contain_package('ruby-augeas').with( + :ensure => 'present', + :name => 'libaugeas-ruby1.9.1' + ) } + end + + context 'when versions are specified' do + let (:facts) { { + :osfamily => 'Debian', + :lsbdistcodename => 'wheezy', + :augeas_version => '1.2.3', + :augeas_ruby_version => '3.2.1', + } } + + it { should contain_package('libaugeas0').with( + :ensure => '1.2.3' + ) } + it { should contain_package('augeas-tools').with( + :ensure => '1.2.3' + ) } + it { should contain_package('augeas-lenses').with( + :ensure => '1.2.3' + ) } + it { should contain_package('ruby-augeas').with( + :ensure => '3.2.1', + :name => 'libaugeas-ruby1.9.1' + ) } + end + + context 'with standard lens_dir' do + it { should contain_file('/usr/share/augeas/lenses').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true', + :recurse => 'true', + :recurselimit => 1 + ) } + it { should contain_file('/usr/share/augeas/lenses/dist').with( + :ensure => 'directory', + :purge => 'false' + ) } + it { should contain_file('/usr/share/augeas/lenses/tests').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true' + ).without(:recurse) } + end + + context 'with a non standard lens_dir' do + let (:facts) { { + :osfamily => 'Debian', + :lsbdistcodename => 'wheezy', + :augeas_lens_dir => '/opt/augeas/lenses' + } } + + it { should contain_file('/opt/augeas/lenses').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true', + :recurse => 'true', + :recurselimit => 1 + ) } + it { should contain_file('/opt/augeas/lenses/dist').with( + :ensure => 'directory', + :purge => 'false' + ) } + it { should contain_file('/opt/augeas/lenses/tests').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true' + ).without(:recurse) } + end +end diff --git a/spec/hosts/simple_redhat_spec.rb b/spec/hosts/simple_redhat_spec.rb new file mode 100644 index 0000000..5045377 --- /dev/null +++ b/spec/hosts/simple_redhat_spec.rb @@ -0,0 +1,82 @@ +require 'spec_helper' + +describe 'simple_redhat' do + let (:facts) { { + :osfamily => 'RedHat', + } } + + context 'when versions are not specified' do + it { should contain_package('augeas').with( + :ensure => 'present' + ) } + it { should contain_package('augeas-libs').with( + :ensure => 'present' + ) } + it { should contain_package('ruby-augeas').with( + :ensure => 'present', + :name => 'ruby-augeas' + ) } + end + + context 'when versions are specified' do + let (:facts) { { + :osfamily => 'RedHat', + :augeas_version => '1.2.3', + :augeas_ruby_version => '3.2.1', + } } + + it { should contain_package('augeas').with( + :ensure => '1.2.3' + ) } + it { should contain_package('augeas-libs').with( + :ensure => '1.2.3' + ) } + it { should contain_package('ruby-augeas').with( + :ensure => '3.2.1', + :name => 'ruby-augeas' + ) } + end + + context 'with standard lens_dir' do + it { should contain_file('/usr/share/augeas/lenses').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true', + :recurse => 'true', + :recurselimit => 1 + ) } + it { should contain_file('/usr/share/augeas/lenses/dist').with( + :ensure => 'directory', + :purge => 'false' + ) } + it { should contain_file('/usr/share/augeas/lenses/tests').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true' + ).without(:recurse) } + end + + context 'with a non standard lens_dir' do + let (:facts) { { + :osfamily => 'RedHat', + :augeas_lens_dir => '/opt/augeas/lenses' + } } + + it { should contain_file('/opt/augeas/lenses').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true', + :recurse => 'true', + :recurselimit => 1 + ) } + it { should contain_file('/opt/augeas/lenses/dist').with( + :ensure => 'directory', + :purge => 'false' + ) } + it { should contain_file('/opt/augeas/lenses/tests').with( + :ensure => 'directory', + :purge => 'true', + :force => 'true' + ).without(:recurse) } + end +end diff --git a/spec/hosts/with_lens_noaugeas_spec.rb b/spec/hosts/with_lens_noaugeas_spec.rb new file mode 100644 index 0000000..b26563b --- /dev/null +++ b/spec/hosts/with_lens_noaugeas_spec.rb @@ -0,0 +1,9 @@ +require 'spec_helper' + +describe 'with_lens_noaugeas' do + it 'should error' do + expect { + should contain_file('/usr/share/augeas/lenses/foo.aug') + }.to raise_error(Puppet::Error, /You must declare the augeas class/) + end +end diff --git a/spec/hosts/with_lens_spec.rb b/spec/hosts/with_lens_spec.rb new file mode 100644 index 0000000..d7a5249 --- /dev/null +++ b/spec/hosts/with_lens_spec.rb @@ -0,0 +1,56 @@ +require 'spec_helper' + +describe 'with_lens' do + let (:facts) { { + :osfamily => 'RedHat', + } } + + context 'when lens_source is passed' do + let (:facts) { { + :osfamily => 'RedHat', + :augeas_lens_source => '/tmp/foo.aug', + } } + + it { should contain_file('/usr/share/augeas/lenses/foo.aug') } + it { should contain_exec('Typecheck lens foo') } + it { should_not contain_file('/usr/share/augeas/lenses/tests/test_foo.aug') } + it { should_not contain_exec('Test lens foo') } + end + + context 'when lens_source and test_source are passed' do + let (:facts) { { + :osfamily => 'RedHat', + :augeas_lens_source => '/tmp/foo.aug', + :augeas_test_source => '/tmp/test_foo.aug', + } } + + it { should contain_file('/usr/share/augeas/lenses/foo.aug') } + it { should contain_exec('Typecheck lens foo') } + it { should contain_file('/usr/share/augeas/lenses/tests/test_foo.aug') } + it { should contain_exec('Test lens foo') } + end + + context 'when stock_since is passed and augeas is older' do + let (:facts) { { + :osfamily => 'RedHat', + :augeas_lens_source => '/tmp/foo.aug', + :augeas_stock_since => '1.2.3', + :augeasversion => '1.0.0', + } } + + it { should contain_file('/usr/share/augeas/lenses/foo.aug') } + it { should contain_exec('Typecheck lens foo') } + end + + context 'when stock_since is passed and augeas is newer' do + let (:facts) { { + :osfamily => 'RedHat', + :augeas_lens_source => '/tmp/foo.aug', + :augeas_stock_since => '1.2.3', + :augeasversion => '1.5.0', + } } + + it { should_not contain_file('/usr/share/augeas/lenses/foo.aug') } + it { should_not contain_exec('Typecheck lens foo') } + end +end diff --git a/spec/hosts/wrong_os_spec.rb b/spec/hosts/wrong_os_spec.rb new file mode 100644 index 0000000..5704ded --- /dev/null +++ b/spec/hosts/wrong_os_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe 'wrong_os' do + let (:facts) { { + :osfamily => 'MS-DOS' + } } + + it 'should fail' do + expect { should contain_package('ruby-augeas') }.to raise_error(Puppet::Error, /Unsupported OS family/) + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 931d35c..5e28e1f 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,28 +1,14 @@ -dir = File.expand_path(File.dirname(__FILE__)) -$LOAD_PATH.unshift File.join(dir, 'lib') - -# Don't want puppet getting the command line arguments for rake or autotest -ARGV.clear - -require 'puppet' -require 'facter' require 'mocha' -gem 'rspec', '>=2.0.0' -require 'rspec/expectations' +require 'rspec-puppet' -require 'puppetlabs_spec_helper/module_spec_helper' +fixture_path = File.expand_path(File.join(__FILE__, '..', 'fixtures')) -RSpec.configure do |config| - # FIXME REVISIT - We may want to delegate to Facter like we do in - # Puppet::PuppetSpecInitializer.initialize_via_testhelper(config) because - # this behavior is a duplication of the spec_helper in Facter. - config.before :each do - # Ensure that we don't accidentally cache facts and environment between - # test cases. This requires each example group to explicitly load the - # facts being exercised with something like - # Facter.collection.loader.load(:ipaddress) - Facter::Util::Loader.any_instance.stubs(:load_all) - Facter.clear - Facter.clear_messages - end +RSpec.configure do |c| + c.module_path = File.join(fixture_path, 'modules') + c.manifest_dir = File.join(fixture_path, 'manifests') end + + +dir = File.expand_path(File.dirname(__FILE__)) +$LOAD_PATH.unshift File.join(dir, 'lib') + |