我创建了一个具有两项操作的资源。
让我们说一下动作:A1和动作:A2。 我可以像这样在单个资源块(测试)中调用它们:
test 'Testing the actions' do
action [:a1 ,:a2]
only_if {::File.exists?"/tmp/action_exist.txt"}
end
它工作正常。但是,如果我想在这样的动作上添加条件,该怎么办
仅检查动作:A1的条件。并简单地执行action:A2而不考虑条件。
我尝试过这样:
test 'Testing the actions' do
action [:A1 ,:A2]
if (action.first=="A1")
puts "yes"
only_if {::File.exists?"/tmp/action_exist.txt" }
end
结束
但是它不起作用。 这两个动作都在执行此条件
答案 0 :(得分:0)
这不是Chef的工作方式。资源主体不是运行每个动作的脚本。
答案 1 :(得分:0)
这取决于在编译时是否知道条件。如果在编译时知道该条件,则可以编写如下内容:
test 'Testing the action' do
if ::File.exists?('/tmp/action_exist.txt')
action [:A1, :A2]
else
action [:A2]
end
end
但是,如果您的食谱在运行过程中没有摆弄/tmp/action_exist.txt
,则只能 。如果/tmp/action_exist.txt
的状态在收敛期间可能发生变化,那么您可能需要做一些更奇特的事情。例如,您可以通知资源在资源之前的某个资源中立即执行:A1
。那不是我要做的,所以您可能需要试验。