Назад | Перейти на главную страницу

Как правильно использовать hiera с puppetlabs-spec-helper?

Я пытаюсь написать несколько тестов 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.

Жемчужина 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

Не стесняйтесь смотреть.

К сожалению, puppetlabs_spec_helper не поддерживает hiera в данный момент. Я надеюсь, что рано или поздно появится хорошее решение либо от кого-нибудь из Puppet, либо от кого-то из сообщества. Я знаю, что многие люди используют Hiera, и я действительно хочу, чтобы они могли использовать имеющиеся у нас инструменты для тестирования модулей.

Официально hiera не поддерживается для puppetlabs_spec_helper с 2.7 и будет доступна в будущем, совместимом с 3.x выпуском.

Неофициально Список рассылки Puppet Developers сказал мне, что есть "хакерский" патч вы можете обратиться к puppetlabs_spec_helper, который позволит писать тесты спецификации с поддержкой hiera. Обратной стороной является то, что, вероятно, что-то сломается / потребуются некоторые переписывания и тому подобное, когда наконец выйдет 3.0.