3

私は現在シェフを学んでおり、プロビジョニングを繰り返しても何も壊れないようにすべてを記述しようとしています。

マシンにデプロイされたサーバーがあり、そこにいくつかのコードがロードされています。次回のプロビジョニング時に、コードが既にロードされているかどうかを最初にテストしたいと思います。そして、さまざまなレシピで使用するため、一般的な方法でそれを行いたい. 私の考えは、関数/定義/などを定義することです。条件をテストして値を返す関数を呼び出すことができます。この function/... を他のアクションの not_if 句で使用できることを願っています。

シェフで定義/アクション/プロバイダー/...を使用してこれを行う方法はありますか?または、ルビっぽいものをどこかに追加する必要がありますか?

4

1 に答える 1

2

Chefのリソースはすべて条件付きで実行されます。

not_ifステートメントとonly_ifステートメントは、シェルコマンドを文字列または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 に答える