LWRP编译收敛阶段
LWRP compile and converge phase
我们发现 LWRP 操作(尤其是库)中的 ruby 代码总是在收敛阶段执行(也没有 ruby_block 资源!)。这是预期的行为吗?我们没有找到任何关于此的具体文档,并且知道 ruby 代码通常在编译阶段执行,这让我们现在有点困惑。
我们使用 Chef 12.0.3.
这是一个小例子:
在 recipes/default.rb:
time = Time.new
puts "Current Time : " + time.inspect
converge_test_my_resource "test_resource" do
action :install
end
在 providers/my_resource.rb:
action :install do
time = Time.new
puts "Current Time : " + time.inspect
end
厨房的输出是:
Compiling Cookbooks...
Current Time : 2016-01-18 16:37:52 +0100
Converging 1 resources
Recipe: converge_test::default
* converge_test_my_resource[test_resource] action install
Current Time : 2016-01-18 16:37:52 +0100
(up to date)
所以你看到时间戳的第一次打印是在编译阶段,但时间戳的下一次打印是在收敛阶段。
提前致谢!
你有 over-generalized 会发生什么。
编译阶段(资源收集阶段)
执行recipe代码,将资源添加到资源栈。
Execute Phase(提供者执行阶段)
For each resource on the resource stack
create a provider for that resource
execute the provider action code specified in the resource declaration **
next
** LWRP 提供商
创建一个新的执行上下文并将此 lwrp 提供程序操作视为食谱 运行ning 在它自己的 chef-client 运行.
这意味着在 LWRP 提供程序之外声明的所有资源都将消失,并且您在这个新上下文中确实拥有一个独立的 运行 主厨。这包括资源收集阶段和提供者执行阶段。当这个内部 chef 运行 完成时,您将丢弃所有这些资源并退出 LWRP 提供程序。
有关此过程的更具体概述,请参阅 https://coderanger.net/two-pass/。在操作块内部,它的行为类似于配方,但具有自己的编译和收敛阶段。
我们发现 LWRP 操作(尤其是库)中的 ruby 代码总是在收敛阶段执行(也没有 ruby_block 资源!)。这是预期的行为吗?我们没有找到任何关于此的具体文档,并且知道 ruby 代码通常在编译阶段执行,这让我们现在有点困惑。 我们使用 Chef 12.0.3.
这是一个小例子:
在 recipes/default.rb:
time = Time.new
puts "Current Time : " + time.inspect
converge_test_my_resource "test_resource" do
action :install
end
在 providers/my_resource.rb:
action :install do
time = Time.new
puts "Current Time : " + time.inspect
end
厨房的输出是:
Compiling Cookbooks...
Current Time : 2016-01-18 16:37:52 +0100
Converging 1 resources
Recipe: converge_test::default
* converge_test_my_resource[test_resource] action install
Current Time : 2016-01-18 16:37:52 +0100
(up to date)
所以你看到时间戳的第一次打印是在编译阶段,但时间戳的下一次打印是在收敛阶段。
提前致谢!
你有 over-generalized 会发生什么。
编译阶段(资源收集阶段)
执行recipe代码,将资源添加到资源栈。
Execute Phase(提供者执行阶段)
For each resource on the resource stack
create a provider for that resource
execute the provider action code specified in the resource declaration **
next
** LWRP 提供商
创建一个新的执行上下文并将此 lwrp 提供程序操作视为食谱 运行ning 在它自己的 chef-client 运行.
这意味着在 LWRP 提供程序之外声明的所有资源都将消失,并且您在这个新上下文中确实拥有一个独立的 运行 主厨。这包括资源收集阶段和提供者执行阶段。当这个内部 chef 运行 完成时,您将丢弃所有这些资源并退出 LWRP 提供程序。
有关此过程的更具体概述,请参阅 https://coderanger.net/two-pass/。在操作块内部,它的行为类似于配方,但具有自己的编译和收敛阶段。