2015-10-29 80 views
0

我对厨师有点新鲜。我只是想知道厨师资源是否像node-js。厨师的执行顺序

例如,

recipe.rb

resource1 'foo' do 
    property value 
end 

resource2 'bar' do 
    property value 
end 

考虑到resource1是一个沉重的重量过程,并resource2是重量轻的处理。在这种情况下可能会先执行bar,然后再执行foo?或者将按顺序方式执行第一个foo,然后执行bar

+2

“like node-js”不是一个非常有用的描述。毕竟,Node可能有一个异步模型,但仍然按顺序执行命令性命令。 –

+0

谢谢@CharlesDuffy – Prashanth

回答

3

厨师食谱是必要的,他们将按顺序运行。运行列表也是一个将按顺序运行的数组。除非您多次在运行列表中定义相同的事物,否则只有第一个会运行。

虽然厨师跑了两个阶段。编译阶段,组织需要运行的资源并解决所有变量。然后是每个资源实际执行的运行阶段。您可以编写在编译阶段触发动作的配方,这可能会使其看起来不符合规则。

例如,chef_gem资源旨在在编译阶段执行操作,因此在运行阶段可以使用这些宝石。 compile_time选项可用于关闭此功能。

对于功能例如...

ruby_block "later" do 
    block do 
    Chef::Log.info "I am first in the file" 
    end 
end 

Chef::Log.info "I am second in the file" 

红宝石块是被编译以用于稍后执行的资源。
Ruby代码在编译期间执行,所以首先出现。

+0

只需稍微精确一点,如果一个配方在运行列表中多次声明,它将仅保留第一个位置,并且不会再包含在运行列表中。 – Tensibai

+0

啊,是的,请注意.. – Matt

+0

另外,Ruby代码可能会在编译过程中的任何时候对资源进行重新排序,所以值得一提的是重新排序可能会在资源集合中的资源收敛之前改变内容。 – Martin