我有一本从源码安装软件包的食谱。版本是1.0.0,当我运行chef-client时,cookbook会自行安装。我不希望这种情况发生。如果未安装食谱或版本已更改,我只希望此烹饪书运行,例如1.0.1。
我怎样才能实现这一目标?
由于
答案 0 :(得分:0)
这不是厨师的工作方式。如果菜谱包含在运行列表中,则始终执行该菜谱。
然而,这不是问题,只要您的食谱是幂等的(只改变不符合预期状态的食物)。
编辑:为了使您的代码具有幂等性,这是一个使用guards的小教程:
假设您拥有以下资源,该资源将名为xyz
的软件安装到/usr/local/xyz-1.0.0
(版本1.0.0):
execute "compile-xyz" do
command "./configure && make && make install"
pwd node['xyz']['download_path']
end
您可以通过添加not_if
参数检查是否存在/usr/local/xyz-1.0.0
来阻止此操作:
execute "compile-xyz" do
command "./configure && make && make install"
pwd node['xyz']['download_path']
not_if do ::File.directory?("/usr/local/xyz-#{node['xyz']['version']}/") end
end