指定哪些食谱与Chef Solo一起运行

我正在使用厨师独奏来在本地测试我的食谱,但我想要能够运行我正在测试的食谱.目前,似乎厨师独奏将在solo.rb中指定的cookbooks目录中运行所有食谱.我在json属性文件中指定了运行列表,并在solo.rb中指定了json文件的位置,但这似乎没有帮助.它至少解析所有其他食谱的属性,因为我有一个不适用于我的本地配置,并且在整个运行失败.

到目前为止,我发现的最好的解决办法是将需要测试的菜谱移到不同的目录,并在solo.rb中指定.有更好的方法吗?

更新:厨师独奏不再是厨师客户的“独立”工具.从 documentation

chef-solo is a command that executes chef-client in a way that does not require the Chef server in order to converge cookbooks. chef-solo uses chef-client’s Chef local mode, and does not support the following functionality present in chef-client / server configurations

这个变化在Chef version 12.11年实施,完成了community RFC.这是在2016年6月8日发布的.旧的行为,如下所述(虽然从4年前在这个时候),可用于–legacy-mode参数到厨师独奏.

有关Chef Solo的最新和最新信息,请阅读the official documentation

我的原始答案如下:

厨师(独奏OR客户)没有“运行”所有的食谱.

它按以下顺序将所有食谱的Ruby文件加载到以下目录中:

> libraries / *.rb
> providers / *.rb
> resources / *
> attributes / *.rb
>定义/ *

然后,它加载节点的扩展运行列表中的所有配方.随着厨师独奏,这来自-j提供的JSON文件,或者可以在属性文件中完成,但后者不推荐使用.

通过include_recipe的扩展运行列表中包含的任何配方也将加载. Chef通过评估Ruby代码来加载食谱.当它遇到被认为是资源或定义的红宝石代码时,它会将资源添加到资源集合,资源集合是所有资源的数字索引的哈希.定义是特别的,因为厨师将其包含的资源(而不是定义本身)添加到资源集合中.包括食谱的资源通过include_recipe插入到位,然后厨师继续在包括配方.

一旦Chef已经处理了所有资源的所有配方,它将按照添加到集合中的顺序,对每个资源集进行指定的操作.

我强烈建议您阅读有关此过程的文档.适用于Chef Solo;只有从服务器下载食谱的部分才被跳过.

> https://docs.chef.io/chef_client.html#the-chef-client-run

要确保仅测试您要测试的配方,请通过JSON文件将它们包含在节点的运行列表中.看起来像这样:

{ "run_list": ["recipe[mything]", "recipe[anotherthing]"] }

运行列表只是一个数组,项目可以是食谱[cookbookname]或角色[somerole].您可以在Chef Solo文档中阅读更多关于如何使用Chef Solo的角色.

> https://docs.chef.io/chef_solo.html

如果您在厨师正在加载食谱部件(每本食谱中的红宝石文件)时进行系统更改,那么“您正在做错”(tm),并应重新构建一个从配方中调用的资源中完成的任务.

相关文章
相关标签/搜索