3

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

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

有没有办法在厨师中通过定义/动作/提供者/......或者我需要在某处添加一些红宝石的东西?

4

1 回答 1

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

https://web.archive.org/web/20111120120013/http://wiki.opscode.com/display/chef/Resources#Resources-ConditionalExecution

于 2011-09-28T15:25:24.560 回答