如何在chef中定义一个函数/ action / ...,它返回一个可用于例如not_if

时间:2011-09-21 09:41:00

标签: ruby chef

我正在学习厨师,我正在尝试以一种重复供应不会破坏任何东西的方式编写所有内容。

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

有没有办法在厨师中使用defintion / action / provider / ...或者我是否需要在某处添加一些红宝石?

1 个答案:

答案 0 :(得分:2)

Chef中的资源都有条件执行。

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