我有一个需要一些清理的厨师回购。配置数据分散在节点,环境和角色文件夹中的文件中。
我的想法是在重组数据期间使用ChefSpec来测试回归。由于ChefSpec似乎只支持角色,我如何在ChefSpec测试中使用现有节点/环境?
答案 0 :(得分:2)
大多数Chef工具都适用于单个食谱。您可以在“单片Chef repo”模式中使用ChefSpec。 ChefSpec执行have support for mocking Environments和roles。
当您编写ChefSpec测试(通常称为“示例”)时,它们针对的是单个食谱,而不是角色或环境。如果您为所有烹饪书编写了ChefSpec示例,那么您可以安全地执行此重构,在每次运行时运行测试。但是没有办法针对整个Chef存储库编写测试。
来源:
答案 1 :(得分:2)
回答自己,以防万一其他人认为它有用:
我最终得到了一个这样的例子:
it 'renders config file with proper data on node ABC in environment XYZ' do
runner = ChefSpec::Runner.new
node_attr = JSON.parse(File.open('nodes/ABC.json'))
runner.node.consume_attributes(node_attr)
env_attr = JSON.parse(File.open('environments/XYZ.json'))
env = Chef::Environment.json_create(env_attr)
runner.node.stub(:chef_environment).and_return('XYZ')
Chef::Environment.stub(:load).and_return(env)
runner.converge('cookbook::recipe')
expect(runner).to render_file('/etc/cookbook.cfg').with_content('some data from ABC.json')
end
这适用于“整体厨师回购”模式,我在厨师采用的早期阶段使用 - 实际上我们使用的是厨师独奏,但是在文件夹结构上试图与厨师回购兼容
此外,如果没有ChefSpec的速度,我不想在所有必要的重组期间测试回归!