【问题标题】:chef only_if AND not_if in same resourcechef only_if AND not_if 在同一资源中
【发布时间】:2017-06-29 22:26:48
【问题描述】:

我对 Chef 资源模型中 only_ifnot_if 的逻辑顺序感到困惑。

在以下示例中,假设名为 /tmp/foo 的文件包含单词 bar

execute "rm /tmp/foo" do
    action :run
    only_if "ls /tmp/foo"
    not_if "grep bar /tmp/foo"
end

会发生什么? only_ifnot_if 是排他性的吗?和?或者?哪个先出现?为什么?

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

    按照代码中给出的顺序运行。每种方法的内部基本上都归结为@guards << Guard.new(*args),因此它们隐式地跟踪顺序。两个子句都必须“通过”运行操作。一般来说,这是一个坏主意,因为它非常难以阅读,如果您必须留下非常非常好的评论。

    【讨论】:

      【解决方案2】:

      在一般编程术语中,“only_if”类似于“if”,“not_if”类似于除非(或 if !)

      因此,始终建议您在您的资源中检查任一 gaurd。

      例如:

      如果用户不存在,以下代码将创建用户“adam”:

      not_if 'grep adam /etc/passwd', :user => 'adam'
      

      以下代码将创建 foo.txt,仅当目录“/tmp”存在时:

      file '/tmp/foo.txt' do
        action :create
        only_if { ::Dir.exist?("/tmp") }
      end
      

      另外,请参阅 "Gaurds" 的 Chef 文档以进一步了解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-21
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 2014-09-05
        • 1970-01-01
        • 2017-01-27
        相关资源
        最近更新 更多