Chef 测试厨房:如何获取插件脚本的路径?

Chef test kitchen: How to get the path of plugin scripts?

我正在学习厨师并在测试厨房工作。我编写了一个插件脚本来检查我的测试实例中 /var/tmp/ 中的任何 *.core 文件是否在不到 5 分钟前被更改。在我的食谱中,这个文件是 $COOKBOOK_ROOT_DIR/files/default/plugins/check_core_files.sh:

我注意到 kitchen 将我的脚本传送到我的实例上的两个位置(该位置在我的 centos 6 和 ubuntu 测试实例上也是相同的):

[root@default-centos-71 vagrant]# find / -name check_core_files.sh
/tmp/kitchen/cookbooks/$COOKBOOKNAME/files/default/plugins/check_core_files.sh
/tmp/kitchen/cache/cookbooks/$COOKBOOKNAME/files/default/plugins/check_core_files.sh

我想 运行 使用 $COOKBOOK_ROOT_DIR/test/integration/default/serverspec/default_spec.rb 中的 describe command 函数,方法是将以下内容添加到文件中:

describe command("#{PATH_TO_SCRIPT}/check_core_files.sh") do
  its(:exit_status) { should eq 0 }  # checks if there are *.core files in /var/tmp/ less than 5 min old
end

我应该使用默认变量来获取此路径吗?或者我是否需要指定确切的路径以获取我的插件脚本到 运行?由于插件脚本存在于两个位置,应该使用哪一个?还是无所谓?

这些都是临时缓存文件。您需要使用 cookbook_file 资源将文件写出到您控制下的已知位置,然后进行测试检查。正如您想象的那样,不支持针对 Chef 的内部结构进行测试 :)