puppet - 如何使用 rspec 在 puppet 中模拟 puppet validate_cmd?
问题描述
我有一个木偶食谱 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 函数并返回 true/false,基于此我必须检查新创建的文件的内容。如何使用 rspec 模块模拟 validate_cmd 命令?任何帮助将不胜感激!
解决方案
简短的回答是,这是不可能的,您需要使用烧杯、测试厨房等工具。
要获得更长的答案,我会将您引导至 Rspec-puppet教程:
很多人对这些测试的目的感到困惑,因为他们无法在实时系统上测试清单的结果。这不是 rspec-puppet 的重点。Rspec-puppet 测试用于测试 Puppet 在将清单编译成 Puppet 资源目录时的行为。
关键是 Rspec-puppet 从不应用它编译的目录;它只检查已编译的目录并允许您对那里的内容做出断言。但是要观察行为以响应您所做工作的差异validate_cmd
,您确实需要在真实系统上应用目录。
当然,在 Beaker 或 Test Kitchen 中设置系统并非易事,这样您的脚本也将返回两个不同的值。此外,您真正要测试的是什么。你不是在测试 Puppet 本身是否做到了它承诺的事情吗?如果是这样,你真的不应该尝试测试它。
或者,这是您自己编写的脚本吗?如果是这样,请考虑改用shunit2或BATS等 Bash 单元测试框架。相反,证明您的 shell 脚本的行为方式符合您对操作系统的期望。
推荐阅读
- grpc - 是否有与以下内容等效的 GRPC 错误代码:423 Locked?
- node.js - Gulp 需要 10 多分钟才能启动
- python - 使用 ipywidgets,如何关闭包含按下按钮的选项卡?
- javascript - Route 没有将我重定向到正确的页面。它只是向我显示相同的页面,但网址发生了变化
- sql - 过去 7 天的运行金额平均为每个日期的进度
- java - 在android中获取firebase用户ID
- python - dict理解中的海象运算符
- java - 从 recursion 返回时对象值的状态
- asp.net-mvc - ASP.Net 身份与 SAML 集成
- vba - 连接 Azure Databricks - VBA