Chef infra 在LWRP中使用include_recipe,而不运行_上下文。include_recipe

Chef infra 在LWRP中使用include_recipe,而不运行_上下文。include_recipe,chef-infra,chef-recipe,cookbook,recipe,lwrp,Chef Infra,Chef Recipe,Cookbook,Recipe,Lwrp,我开始在我的LWRPs中使用include_recipe,它只是起作用了——我不知道run_context.include_recipe。我不确定我是否理解其中的区别,在互联网上读到的一些东西让我觉得普通的“包含”食谱甚至不应该在LWRP中起作用 这似乎很好,但只是好奇我是否做错了什么。我不想让include_recipe在每次调用资源时都运行recipes,我只是像普通的include一样使用它——依赖于某些菜谱的资源首先设置内容,只需要包含它们 我假设包含的配方仅在第一次调用资源时运行,如果

我开始在我的LWRPs中使用include_recipe,它只是起作用了——我不知道run_context.include_recipe。我不确定我是否理解其中的区别,在互联网上读到的一些东西让我觉得普通的“包含”食谱甚至不应该在LWRP中起作用

这似乎很好,但只是好奇我是否做错了什么。我不想让include_recipe在每次调用资源时都运行recipes,我只是像普通的include一样使用它——依赖于某些菜谱的资源首先设置内容,只需要包含它们


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

LWRP内部的
包含的配方
的问题在于,包含的配方中的资源最终会在提供程序操作的执行上下文中,而该操作基本上就像一个子上下文。不幸的是,很难找到好的解决办法。和你的最后一个问题一样,我的Poise库中确实有一个解决方案,但它非常复杂,所有“简单”的解决方案都有自己的缺点。如果您还没有读过,请查看,这是DSL工作原理的内部结构。除了这篇文章之外,提供者的内部基本上是它自己版本的编译和聚合周期,以及它自己的资源集合。您必须想象执行顺序是如何工作的,并对哪些资源、哪些集合以及聚合指针的位置进行分类(基本上与“普通代码”中的指令指针和子例程类似)。不幸的是,很难找到好的解决办法。和你的最后一个问题一样,我的Poise库中确实有一个解决方案,但它非常复杂,所有“简单”的解决方案都有自己的缺点。如果您还没有读过,请查看,这是DSL工作原理的内部结构。除了这篇文章之外,提供者的内部基本上是它自己版本的编译和聚合周期,以及它自己的资源集合。您必须想象执行顺序是如何工作的,并分类哪些资源进入哪些集合以及聚合指针在哪里(基本上类似于“普通代码”中的指令指针和子例程)。

我应该补充一点,您已经问了很多问题,你应该知道我们有一个懒散的团队,在那里你可以找到我和其他人来回答更多的实时问题:酷,我将加入频道。那么,运行context.include\u recipe是否会“全局”添加包含的配方,而仅仅执行include\u recipe只会使包含的配方对资源可用?这两者都是相同的,不同的是
Chef.run\u context.include\u recipe
,它将内容放在全局上下文中,但这也意味着它们的评估与提供者中的内容不同步。基本上,我会尽可能地避免这种混乱,但这通常意味着将上游食谱中面向配方的代码重构为面向资源的代码。我应该补充一点,您已经问了很多厨师问题,您应该知道我们有一个松散的团队,您可以在那里找到我和其他人,以获得更多实时问题:酷,我要加入频道。那么,运行context.include\u recipe是否会“全局”添加包含的配方,而仅仅执行include\u recipe只会使包含的配方对资源可用?这两者都是相同的,不同的是
Chef.run\u context.include\u recipe
,它将内容放在全局上下文中,但这也意味着它们的评估与提供者中的内容不同步。基本上,我会尽可能避免这种混乱,但这通常意味着将上游食谱中面向配方的代码重构为面向资源的代码。