我正在尝试为我的模块编写一些 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 并在 rubylib 上进行黑客攻击并不是可行的解决方案。
我正在使用 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 最终发布时,它可能会崩溃/需要重写等。