我正在将单元测试改装到现有模块(不是我自己创作的)。我似乎无法将params类undef
值覆盖为hash
值。
params类具有以下内容(仅限摘录):
class myclass::params {
splunk = undef,
...
}
主要课程(仅限摘录):
class myclass(
$splunk = $myclass::params::splunk,
...
) inherits ::myclass::params
{...}
以下配置类(仅限摘录):
class mylcass::config inherits myclass{
if $myclass::splunk['install']['package_manage'] {
file { "somefile.conf":
ensure => file,
mode => '0444',
source => 'puppet:///modules/myclass/splunk/somefile.conf',
}
...
}
}
在config_spec.rb文件中,我有以下内容:
require 'spec_helper'
require 'shared_contexts'
describe 'myclass::splunk::config' do
hiera = Hiera.new(:config => 'spec/fixtures/hiera/hiera.yaml')
splunk = hiera.lookup('splunk',nil,nil)
let(:params) do
{
}
end
it do
is_expected.to contain_file('somefile.conf')
.with(
'ensure' => 'file',
'mode' => '0444',
'source' => 'puppet:///modules/myclass/splunk/somefile.conf'
)
end
end
我将splunk
的hiera查找插入到myclass_spec.rb文件中,希望它会覆盖:
require 'spec_helper'
require 'shared_contexts'
describe 'myclass' do
hiera = Hiera.new(:config => 'spec/fixtures/hiera/hiera.yaml')
splunk = hiera.lookup('splunk',nil,nil)
let(:params) do
{
:splunk => splunk
...
}
但我继续收到以下错误:
myclass::splunk is not a hash or array when accessing it
如何覆盖splunk
变量?
答案 0 :(得分:0)
$::myclass::splunk
是普通的类变量,而不是类参数。 Hiera不参与分配其价值。您不能在Puppet DSL中更改或覆盖其指定的值,据我所知,也不能在rspec-puppet中。
如果您最终要测试的是类参数$::myclass::params::splunk
的不同值,那么您应该将 参数的值注入您的Hiera数据中。您不需要测试myclass::params
的不同值,因为您可以获得该变量的不同值的唯一方法是修改类static inline void outb(unsigned short port, unsigned char value)
{
__asm__ __volatile__ ("outb %1, %0" : : "dN" (port), "a" (value));
}
static inline unsigned char inb(unsigned short port)
{
unsigned char value;
__asm__ __volatile__ ("inb %1, %0" : "=a"(value) : "Nd"(port));
return value;
}
void update_cursor(int row, int col)
{
unsigned short position=(row*80) + col;
// cursor LOW port to vga INDEX register
outb(0x3D4, 0x0F);
outb(0x3D5, (unsigned char)(position&0xFF));
// cursor HIGH port to vga INDEX register
outb(0x3D4, 0x0E);
outb(0x3D5, (unsigned char )((position>>8)&0xFF));
}
的代码。
答案 1 :(得分:0)
一个疯狂的猜测,但很可能通过将此问题添加到describe
来解决您的问题:
let(:pre_condition) { "class { 'myclass': splunk => { install => { package_manage => true } } }" }
这将导致设置myclass::splunk
参数。