如何使用 rspec 在人偶中模拟人偶 validate_cmd?
How to mock puppet validate_cmd in puppet using rspec?
我有一本木偶食谱rspec样本测试如下
it {
is_expected.to contain_file('/etc/resolv.conf')
.with(
'ensure' => 'file',
'owner' => 'root',
'group' => 'root',
'mode' => '0444',
'validate_cmd' => '/var/tmp/checkdns_nameservers.sh',
)
.with_content(resolvconf_contents)
.that_notifies('Service[sshd]')
.that_notifies('Service[nscd]')
}
问题是这只是检查清单中是否存在 validate_cmd。
我必须模拟 validate_cmd 函数和 returns true/false 并且基于此我必须检查新创建的文件的内容。
如何使用 rspec 模块模拟 validate_cmd 命令?
任何帮助将不胜感激!!
简短的回答是,这是不可能的,您需要使用 Beaker、Test Kitchen 等工具。
要获得更长的答案,我会引导您到 Rspec-puppet tutorial:
There are a lot of people confused by the purpose of these tests as they can’t test the result of the manifest on a live system. That is not the point of rspec-puppet. Rspec-puppet tests are there to test the behaviour of Puppet when it compiles your manifests into a catalogue of Puppet resources.
重点是Rspec-puppet从不应用它编译的目录;它只检查已编译的目录,并允许您对其中的内容做出断言。但是要观察响应您的 validate_cmd
所做的差异的行为,您确实需要在真实系统上应用该目录。
当然,在 Beaker 或 Test Kitchen 中设置系统并非易事,这样您的脚本也将 return 两个不同的值。此外,您真正要测试的是什么。您不是在测试 Puppet 本身是否按照它所承诺的去做吗?如果是这样,你真的不应该尝试测试它。
或者,这是你自己写的脚本吗?如果是这样,请考虑改用 Bash 单元测试框架,例如 shunit2 or BATS。相反,请证明您的 shell 脚本在响应 OS 时按照您期望的方式运行。
我有一本木偶食谱rspec样本测试如下
it {
is_expected.to contain_file('/etc/resolv.conf')
.with(
'ensure' => 'file',
'owner' => 'root',
'group' => 'root',
'mode' => '0444',
'validate_cmd' => '/var/tmp/checkdns_nameservers.sh',
)
.with_content(resolvconf_contents)
.that_notifies('Service[sshd]')
.that_notifies('Service[nscd]')
}
问题是这只是检查清单中是否存在 validate_cmd。
我必须模拟 validate_cmd 函数和 returns true/false 并且基于此我必须检查新创建的文件的内容。 如何使用 rspec 模块模拟 validate_cmd 命令? 任何帮助将不胜感激!!
简短的回答是,这是不可能的,您需要使用 Beaker、Test Kitchen 等工具。
要获得更长的答案,我会引导您到 Rspec-puppet tutorial:
There are a lot of people confused by the purpose of these tests as they can’t test the result of the manifest on a live system. That is not the point of rspec-puppet. Rspec-puppet tests are there to test the behaviour of Puppet when it compiles your manifests into a catalogue of Puppet resources.
重点是Rspec-puppet从不应用它编译的目录;它只检查已编译的目录,并允许您对其中的内容做出断言。但是要观察响应您的 validate_cmd
所做的差异的行为,您确实需要在真实系统上应用该目录。
当然,在 Beaker 或 Test Kitchen 中设置系统并非易事,这样您的脚本也将 return 两个不同的值。此外,您真正要测试的是什么。您不是在测试 Puppet 本身是否按照它所承诺的去做吗?如果是这样,你真的不应该尝试测试它。
或者,这是你自己写的脚本吗?如果是这样,请考虑改用 Bash 单元测试框架,例如 shunit2 or BATS。相反,请证明您的 shell 脚本在响应 OS 时按照您期望的方式运行。