将 hiera 与 puppetlabs-spec-helper 一起使用的正确方法是什么?

将 hiera 与 puppetlabs-spec-helper 一起使用的正确方法是什么?

我正在尝试为我的模块编写一些 rspec 测试。其中大多数现在使用 hiera。

我有一个.fixures.yml:

fixtures:
  repositories:
    stdlib: https://github.com/puppetlabs/puppetlabs-stdlib.git
    hiera-puppet: https://github.com/puppetlabs/hiera-puppet.git
  symlinks:
    mongodb: "#{source_dir}"    

以及 spec/classes/mongodb_spec.rb:

require 'spec_helper'

describe 'mongodb', :type => 'class' do

  context "On an Ubuntu install, admin and single user" do
    let :facts do
      {
        :osfamily => 'Debian',
        :operatingsystem => 'Ubuntu',
        :operatingsystemrelease => '12.04'
      }
    end

    it {
      should contain_user('XXXX').with( { 'uid' => '***' } )
      should contain_group('XXXX').with( { 'gid' => '***' } )
      should contain_package('mongodb').with( { 'name' => 'mongodb' } )
      should contain_service('mongodb').with( { 'name' => 'mongodb' } )
    }
  end
end

但是当我运行规范测试时,我得到:

# rake spec
/usr/bin/ruby1.8 -S rspec spec/classes/mongodb_spec.rb --color
F

Failures:

  1) mongodb On an Ubuntu install, admin and single user
     Failure/Error: should contain_user('XXXX').with( { 'uid' => '***' } )
     LoadError:
       no such file to load -- hiera_puppet
     # ./spec/fixtures/modules/hiera-puppet/lib/puppet/parser/functions/hiera.rb:3:in `function_hiera'
     # ./spec/classes/mongodb_spec.rb:15

Finished in 0.05415 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/classes/mongodb_spec.rb:14 # mongodb On an Ubuntu install, admin and single user
rake aborted!
/usr/bin/ruby1.8 -S rspec spec/classes/mongodb_spec.rb --color failed

Tasks: TOP => spec_standalone
(See full trace by running task with --trace)

模块规范测试相对较新,hiera 也是如此。到目前为止,我找不到任何合适的解决方案。(puppet-dev 上的反复讨论很有趣,但没有帮助)。

我需要做哪些更改才能使其正常工作?由于公司政策,从 gem 安装 puppet 并在 ruby​​lib 上进行黑客攻击并不是可行的解决方案。

我正在使用 Ubuntu 12.04 LTS + Puppet 2.7.17 + hiera 0.3.0。

答案1

rspec-hiera-puppet 精华

https://github.com/amfranz/rspec-hiera-puppet

在你的 Gemfile 中:

gem 'puppet'

gem 'rspec-puppet'
gem 'rspec-hiera-puppet'
gem 'puppetlabs_spec_helper'

gem 'hiera'
gem 'hiera-puppet'

在您的spec_helper.rb:`require'rspec-hiera-puppet'

spec/shared_context.rb

require 'rspec-hiera-puppet'

shared_context "hieradata" do
  let :hiera_config do
    {
     # this specifies that rspec overrides what's been defined in `riak::params`
     :backends => ['rspec', 'puppet'],
     :hierarchy => ['%{location}', '%{environment}', '%{calling_module}'],
     :puppet   => { :datasource => 'params' },
     :rspec    => respond_to?(:hiera_data) ? send(:hiera_data) : {}
    }   
  end 
end

我在这里使用它:

https://github.com/haf/puppet-riak

请随意看看。

答案2

不幸的是,puppetlabs_spec_helper目前不支持 hiera。我希望 Puppet 或社区中的某个人能尽快找到一个好的解决方案。我知道很多人使用 Hiera,我真的希望他们能够使用我们拥有的工具来测试模块。

答案3

正式来说,hiera 不支持 2.7 版的 puppetlabs_spec_helper,但将在未来的 3.x 兼容版本中提供。

非正式地,Puppet 开发者邮件列表告诉我有一个“黑客”修补您可以申请 puppetlabs_spec_helper,这样就可以使用 hiera 支持编写 spec 测试。缺点是,当 3.0 最终发布时,它可能会崩溃/需要重写等。

相关内容