上下文:
我有一个木偶模板,它在呈现时处理processors事实的processors子组件。我所有的客户都有这个事实。
这个事实的用例在执行十进制运算的模板行中,例如:MyConfigVar=<%= 0.9 * @processors['count'] %>在某个.erb文件中。
我想:
我尝试过的:
首先,我尝试使用sigils:<%= 0.9 * @processors[:count] %>。如果我用rspec-傀儡来嘲弄,就像facts = { :processors => { :count => 10 } }一样,我的测试都通过了。清单应用程序没有工作;它有一个“不能乘以nil”错误。很明显西格尔斯出局了。
然后,我尝试使用字符串键:<%= 0.9 * @processors['count'] %>。我使用sigil (facts = { :processors => { :count => 10 } })的测试没有被捕获,但我的值被正确地找到并与facts = { :processors => { 'count' => 10 } }相乘。所有的测试都通过了。但是,清单应用程序由于Can't coerce String into Int失败而失败。
然后,我尝试使用严格的值。模板仍然读取<%= 0.9 * @processors['count'].to_i %>,我测试了字符串和整数值。
let(:facts) { :processors => { 'count' => '10' } }
# tests with string value
let(:facts) { :processors => { 'count' => 10 } }
# tests with integer value测试全部通过,但清单应用程序为事实的值呈现了0.0。
问题:
两个主要问题:
rspec-puppet或类似的单元测试,在生产代表类型的facter中模拟值?发布于 2016-04-28 11:30:10
这里有几件事在起作用。
正如Josh Souza所说,旧版本的Facter不支持散列或数组。因此,根据您使用的木偶和Facter的版本,我将检查事实配置的值。
如果这被设置为真(这将是在老木偶上),那么事实就不会以散列的形式出现,它们会在你的清单中被转换成一个字符串,导致没有分离的杂乱字符串(例如。modelsIntel(R) Core(TM) i7-2760QM CPU @ 2.40GHzcount1physicalcount1)。注意count1,在原始散列中应该是:count => 1。
您可以在RSpec-pupeRSpec2.2中的stringify_facts设置中测试这一点。
因此,如果您运行facter -p,您可以看到许多遗留事实不是散列。
$ facter -p | grep processor
processorcount => 8
processors => {"count"=>8, "speed"=>"2.5 GHz"}
sp_current_processor_speed => 2.5 GHz
sp_number_processors => 4因此,我建议使用$::processorcount事实,它应该是一个整数,因为这是返回的值,但是您可以使用to_i来确保您的.erb模板。我很确定它应该总是返回一个整数。
如果您感到非常勇敢,可以创建一个函数将值转换为数字并在清单中使用(例如,https://github.com/kwilczynski/puppet-functions/blob/master/lib/puppet/parser/functions/str2num.rb)。
所以你的代码看起来是:
if (is_integer($::processorcount)) {
$processor_as_int = $::processorcount
} else {
$processor_as_int = str2num($::processorcount)
}总之,这有点混乱,你可以看到为什么在木偶4 我们的打字系统要紧得多!
发布于 2016-04-27 17:20:52
为了说明它的价值,我对您的问题做了一些调查,在我的测试床上,运行facter processors时的“处理器”事实实际上是一个字符串,一旦它进入木偶/模板,它就没有任何分隔符(即"modelsIntel(R) Core(TM) i7-2760QMcpu@2.40GHzCount1PhyalCount 1“是原始值)。我通过在我的红宝石模板中使用'@processors.class‘来验证这一点,当然还有其他一些测试。我的测试床运行的是Puppet3.8.3和Facter 2.4.6,以防这影响到事情。
因此,我可以提出的解决办法是:
- `<%= Facter.value(:processors)['count'] %>`
- `count=@processors.dup.gsub!(/physicalcount/,'physical').gsub!(/.*count([0-9])+.*/,'\1')`
很有可能在不同版本的木偶/Facter中,这不是一个问题,但希望这足以让您朝着正确的方向前进。
https://stackoverflow.com/questions/36851715
复制相似问题