如何使用 rspec Puppet 中的自定义事实

如何使用 rspec Puppet 中的自定义事实

有没有办法在使用 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 识别我的自定义事实吗?如能得到任何帮助我将不胜感激。

答案1

您可以在文件中spec/spec_helper.rb添加以下内容:

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

https://github.com/rodjek/rspec-puppet#default_facts

答案2

就你的情况而言,最好按照 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”。

相关内容