在LWRP中使用include_recipe而不是run_context.include_recipe

时间:2016-10-03 04:24:40

标签: chef chef-recipe cookbook recipe lwrp

我开始在我的LWRP中使用include_recipe而且它刚刚工作 - 不知道run_context.include_recipe。我不确定我是否理解这些差异并阅读互联网上的一些内容使得听起来像普通的include_recipe甚至不能在LWRP中工作?

它似乎工作正常,但只是好奇我在这里做错了什么。我不希望include_recipe每次调用资源时都运行配方我只是像常规包含资源一样使用它 - 依赖于某些配方设置内容的资源只是包含它们。

我假设所包含的食谱仅在第一次调用资源时运行,如果多次调用资源,则不会重新运行included_recipe。

1 个答案:

答案 0 :(得分:2)

LWRP内部include_recipe的问题在于,所包含的配方中的资源最终出现在提供者的操作的执行上下文中,这基本上类似于子上下文。不幸的是,很难找到一个好的解决方案。和你的上一个问题一样,我的Poise库中确实有一个解决方案,但它非常错综复杂,所有的简单"解决方案有其自身的缺点。如果您还没有阅读它,请查看https://coderanger.net/two-pass/,它将介绍DSL工作原理的内部结构。添加到该帖子中,提供者的内部基本上是其自己的编译和聚合循环版本及其自己的资源集合。你必须想象执行顺序是如何工作的,并找出哪些资源进入哪些集合以及汇聚指针所在的位置(基本上就像指令指针和子程序在"普通代码"中工作)。 / p>