【问题标题】:Can opscode chef perform wait until a condition becomes true?opscode chef 可以等待条件变为真吗?
【发布时间】:2015-09-24 23:34:24
【问题描述】:

我们有一个用例,我们希望厨师编排等到机器中的特定目录被删除。有什么方法可以实现吗?

我在网上搜索,找到了以下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 被删除”,但是厨师如何执行这就像“它发现目录正在退出,所以它没有执行资源并退出”

我需要一种方法来执行等待,直到条件变为真。

【问题讨论】:

    标签: ruby chef-infra orchestration


    【解决方案1】:

    这实际上是我在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)。希望这会有所帮助!

    编辑:正如其他海报所说,如果您可以在 chef 中完成所有操作,那么带有目录资源和删除操作的通知是一个更好的解决方案。但是你问了如何使用等待资源,所以我想具体回答一下。

    【讨论】:

    • 你如何保证你的睡眠时间足够长?如果高磁盘 i/o 偶尔会导致速度变慢怎么办?最好用action :nothing 定义资源,然后在delete file 资源中使用notification 来触发下一个需要等待的资源。编辑:添加了指向 Chef 通知文档的链接。
    • 我同意,如果允许厨师这样做,使用目录资源删除会更好。 OP 听起来像是删除发生在外部某处。
    【解决方案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
    

    【讨论】:

    • 作为记录,如果 OP 使用 chef 删除目录,我同意你的方法,但不清楚 OP 是否控制目录删除或它是如何发生的。有时我们最终不得不在没有理想情况的情况下解决问题。
    • 这很好。我也不确定,所以我决定做出符合我想要给出的答案的假设。 :)
    猜你喜欢
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2021-06-07
    • 1970-01-01
    相关资源
    最近更新 更多