首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LWRP编译和收敛阶段

LWRP编译和收敛阶段
EN

Stack Overflow用户
提问于 2016-01-18 13:36:13
回答 2查看 386关注 0票数 0

我们发现LWRP操作(尤其是库)中的ruby代码总是在聚合阶段执行(也没有ruby_block资源!)。这是预期的行为吗?我们没有找到关于这方面的任何具体文档,并且知道ruby代码通常在编译阶段被执行,这让我们有点困惑。我们用12.0.3大厨。

下面是一个小例子:

在食谱/default.rb中:

代码语言:javascript
复制
time = Time.new
puts "Current Time : " + time.inspect

converge_test_my_resource "test_resource" do
  action :install
end

在providers/my_resource.rb e.rb中:

代码语言:javascript
复制
action :install do
  time = Time.new
  puts "Current Time : " + time.inspect
end

厨房的产出是:

代码语言:javascript
复制
   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)

因此,您可以看到时间戳的第一个打印是在编译阶段,但是下一个时间戳打印处于聚合阶段。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-18 15:16:16

你对发生的事情过于概括了。

编译阶段(资源收集阶段)

执行配方代码,将资源添加到资源堆栈中。

执行阶段(提供者执行阶段)

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提供程序操作视为在其自己的厨师-客户端运行中运行的菜谱。

这意味着,在LWRP提供商之外声明的所有资源都将消失,在这个新的上下文中,您将拥有一个独立的主厨。这包括资源收集阶段和提供者执行阶段。当这个内部主厨运行完成后,您将丢弃所有这些资源并退出LWRP提供程序。

票数 1
EN

Stack Overflow用户

发布于 2016-01-18 20:11:39

有关此过程的更详细概述,请参见https://coderanger.net/two-pass/。在动作块中,它的行为就像一个菜谱,但是有它自己的编译和收敛阶段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34856088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档