我们有一个用例,我们希望chef orchestration等到特定目录在机器中被删除。有没有办法实现它?
我在互联网上搜索并找到以下cookbook
我觉得它可以使用,但我很难理解如何使用它,没有读过我使用它。
我怎样才能实现它?
编辑以删除保留: 说你有以下食谱
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被删除”但是厨师如何执行此操作就像“它找到了目录exixting所以它没有执行资源并退出”
我需要一种方法来等待条件变为真。
答案 0 :(得分:2)
它实际上是我在various烹饪书中不时看到的模式,通常用于等待块设备或装载某些东西,或wait for a cloud resource。对于你发现的等待食谱,我不得不挖掘the actual source repo on Github来弄清楚如何使用它。这是一个例子:
until 'pigs fly' do
command '/bin/false'
wait_interval 5
message 'sleeping for 5 seconds and retrying'
action :run
end
它似乎称为ruby的system(command)
和sleep(wait_interval)
。希望这有帮助!
答案 1 :(得分:2)
首先,请不要创建目录。如果你只使用Chef来执行shell命令,那么你只需要编写一个shell脚本就不会获得更多。依靠Chef directory资源为您做这件事要好得多。然后,您可以确信它每次都可以在每个系统上运行。此外,您将能够使用代表您的目录的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