2011-09-21 74 views
3

我现在在学习厨师,我试图用一种重复配置不会破坏任何东西的方式来编写所有东西。如何在厨师中定义一个函数/动作/ ...,返回一个可用于例如not_if

我有一台服务器部署在机器上,然后有一些代码加载到它。下次配置时,如果代码已经加载,我想首先测试。我想用通用的方式来做,因为我在不同的食谱中使用它。 我的想法是定义一个函数/ defintion /等。我可以调用测试条件并返回一个值的函数。我的希望是,我可以在not_if子句中使用此函数/ ...来执行其他操作。

有没有一种方法可以在定义/动作/提供者/ ...的厨师中做到这一点,或者我需要在某处添加一些红宝石的东西?

回答

2

厨师的资源都有条件执行。

not_if和only_if语句可以将shell命令作为字符串或ruby块来确定它们是否应该执行其操作。

user "myuser" do 
    not_if "grep myuser /etc/password" 
    action :create 
end 

您可能有一个节点属性,并将其用作条件或调用一个返回true或false的ruby方法。

template "/tmp/somefile" do 
    mode "0644" 
    source "somefile.erb" 
    not_if { node[:some_value] } 
end 

http://wiki.opscode.com/display/chef/Resources#Resources-ConditionalExecution

+0

感谢。与此同时,我发现提供一个字符串将作为shell脚本执行。我已经构建了一些桥脚本与服务器通信,以防止多次代码加载 –

+0

嗨@AdamK,请问如何在not_if/only_if条件中使用ruby_block? – Eye

相关问题