2

特定のディレクトリがマシンで削除されるまでシェフのオーケストレーションを待機させたいユースケースがあります。それを達成する方法はありますか?

インターネットで検索したところ、次の料理本を見つけました

使用できると思いますが、使用方法を理解するのに苦労しています。使用について読んでいません。

どうすれば達成できますか?

保留を削除するために編集: 次のレシピがあるとします。

execute 'making dir' do
  command 'mkdir /tmp/test2'
  not_if do ::File.directory?('/tmp/test1') end

end

参照: https://docs.chef.io/resource_common.html#not-if-examples

ここで、not_if で求めているのは「/tmp/test1 が削除されるまで待機する」ことですが、chef がこれを実行する方法は、「ディレクトリが存在することが判明したため、リソースを実行せずに終了した」のようなものです。

条件が真になるまで待機する方法が必要です。

4

2 に答える 2

2

まず、ディレクトリを作成するためにシェルアウトしないでください。Chef を使用してシェル コマンドを実行するだけでは、シェル スクリプトを作成するだけでは何も得られません。これを行うには、Chefディレクトリリソースに依存する方がはるかに優れています。そうすれば、すべてのシステムでいつでも動作することを確信できます。さらに、ディレクトリを表す Chef リソースを利用して、通知などを行うことができます。

以下は、両方のディレクトリ操作のわずかなリファクタリングです。

# Ensure that your directory gets deleted, if it exists.
directory '/tmp/test1' do
  action :delete
  notifies :action, 'directory[other_dir]', :immediately
end

# Define a resource for your directory, but don't actually do anything to the underlying machine for now.
directory 'other_dir' do
  action :nothing
  path '/tmp/test2'
end
于 2015-07-08T11:14:57.583 に答える
2

これは実際、さまざまなクックブックでときどき見たパターンで、ブロック デバイスを待機したり、何かをマウントしたり、クラウド リソースを待機したりするためによく使用されます。あなたが見つけた待機クックブックについては、Github で実際のソース リポジトリを掘り下げて、その使用方法を理解する必要がありました。次に例を示します。

until 'pigs fly' do
  command '/bin/false'
  wait_interval 5
  message 'sleeping for 5 seconds and retrying'
  action :run
end

ruby のsystem(command)andを呼び出しているようsleep(wait_interval)です。お役に立てれば!

編集:他のポスターが述べているように、シェフですべてを行うことができれば、ディレクトリリソースと削除アクションを使用した通知がより良い解決策です。しかし、あなたは待機リソースの使用方法を尋ねたので、具体的に答えたいと思いました。

于 2015-07-08T10:41:30.893 に答える