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

Как использовать пользовательские факты с rspec Puppet

Есть ли способ использовать настраиваемый факт при использовании rspec? Мой модуль работает нормально, и настраиваемый факт существует и работает должным образом, когда я запускаю марионетку на моем агенте, но когда я пытаюсь использовать тот же факт в rspec, я получаю следующую ошибку:

Failure/Error: it { should contain_class('zabbixconfig') }

     Puppet::PreformattedError:
       Evaluation Error: Unknown variable: 'pskkey_generate'. at /etc/puppetlabs/code/environments/production/modules/zabbixconfig/spec/fixtures/modules/zabbixconfig/manifests/init.pp:46:13 on node puppet-master-poc

В pskkey_generate в приведенной выше ошибке - это мой собственный факт, а вот фрагмент моего класса, включая его:

$pskkey = $pskkey_generate

Кто-нибудь знает, как заставить rspec распознавать мой собственный факт? Любая помощь будет оценена.

В твоем spec/spec_helper.rb файл вы можете добавить следующее:

RSpec.configure do |c|
  c.default_facts = { :pskkey_generate => '...' }
end

Видеть https://github.com/rodjek/rspec-puppet#default_facts

В вашем случае, вероятно, лучше всего жестко закодировать известное значение вашего факта в default_facts, как предлагает bodgit. В других случаях, когда факт исходит от стороннего модуля, раздражает необходимость добавлять насмешку, чтобы провести реалистичные тесты использования вашего кода.

Я добавил вверху spec/spec_helper.rb:

if ENV.include? 'MODULEPATH'
  top_path = File.dirname(File.dirname(__FILE__))
  ENV['FACTERLIB'] = ENV['MODULEPATH'].split(/:/).map do |p|
    p.start_with?('/') ? p : File.join(top_path, p)
  end.map do |p|
    Dir.glob(File.join(p, '*/lib/facter'))
  end.flatten.join(':')
end

Когда библиотека Facter загружается, она учитывает переменную среды FACTERLIB и оценивает все настраиваемые факты, предоставленные модулями в вашей среде Puppet.

Типичное значение для MODULEPATH это «дизайн: модули» при тестировании сред.