厨师only_if和not_if在同一资源中

Cor*_*ahl 2 chef-infra

我对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
Run Code Online (Sandbox Code Playgroud)

怎么了?only_ifnot_if是否互斥?和?要么?哪个先到?为什么?

cod*_*ger 6

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