Puppet

如何在 rspec Puppet 中使用自定義事實

  • November 12, 2019

有沒有辦法在使用 rspec 時使用自定義事實?當我在代理上執行 puppet 時,我的模組工作正常,並且自定義事實存在並按預期工作,但是當我嘗試在 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

在您的情況下,最好按照 bodgit 的建議在 default_facts 中硬編碼您的事實的已知值。在其他情況下,當事實來自第三方模組時,必須添加模擬來對您使用他們的程式碼進行實際測試是很煩人的。

我在頂部添加了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是“design:modules”。

引用自:https://serverfault.com/questions/955133