Я пытаюсь написать несколько тестов rspec для своих модулей. Большинство из них сейчас используют хиеру.
У меня есть .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 было интересно, но бесполезно).
Какие изменения мне нужно внести, чтобы это работало? Установка марионетки из драгоценного камня и взлом Rubylib не является жизнеспособным решением из-за корпоративной политики.
Я использую Ubuntu 12.04 LTS + Puppet 2.7.17 + hiera 0.3.0.
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
Не стесняйтесь смотреть.
К сожалению, puppetlabs_spec_helper
не поддерживает hiera в данный момент. Я надеюсь, что рано или поздно появится хорошее решение либо от кого-нибудь из Puppet, либо от кого-то из сообщества. Я знаю, что многие люди используют Hiera, и я действительно хочу, чтобы они могли использовать имеющиеся у нас инструменты для тестирования модулей.
Официально hiera не поддерживается для puppetlabs_spec_helper с 2.7 и будет доступна в будущем, совместимом с 3.x выпуском.
Неофициально Список рассылки Puppet Developers сказал мне, что есть "хакерский" патч вы можете обратиться к puppetlabs_spec_helper, который позволит писать тесты спецификации с поддержкой hiera. Обратной стороной является то, что, вероятно, что-то сломается / потребуются некоторые переписывания и тому подобное, когда наконец выйдет 3.0.