Chef infra 是否可以强制在shef'上加载运行列表;s(chef shell)客户端模式

Chef infra 是否可以强制在shef'上加载运行列表;s(chef shell)客户端模式,chef-infra,chef-recipe,Chef Infra,Chef Recipe,当调试厨师食谱中的错误时,我通常喜欢登录到有问题的机器,键入“shef-z”。如果之前有一次成功的跑步,那么注册的跑步列表会自动加载所有相关属性和食谱,这样我就可以直接跳进去尝试那些有问题的行了 问题是,如果chef客户端在第一次运行时失败,则运行列表为空,shef甚至会从缓存中删除(急需的)食谱,并说“此客户端不再需要它的食谱”。有没有办法强迫shef让我使用我的跑步列表 官方维基 “运行列表将以与普通chef客户端相同的方式设置 跑。” 但是尝试“-j”似乎没有帮助 我还试着运行单独模式(“

当调试厨师食谱中的错误时,我通常喜欢登录到有问题的机器,键入“shef-z”。如果之前有一次成功的跑步,那么注册的跑步列表会自动加载所有相关属性和食谱,这样我就可以直接跳进去尝试那些有问题的行了

问题是,如果chef客户端在第一次运行时失败,则运行列表为空,shef甚至会从缓存中删除(急需的)食谱,并说“此客户端不再需要它的食谱”。有没有办法强迫shef让我使用我的跑步列表

官方维基

“运行列表将以与普通chef客户端相同的方式设置 跑。”

但是尝试“-j”似乎没有帮助

我还试着运行单独模式(“-s-j”),如本文所述。它加载run_列表(没有扩展它,这很奇怪),但是当我尝试做任何事情时,我会得到如下内容:

“找不到食谱tomcat。如果您正在从其他目录加载tomcat cookbook,确保在元数据中配置依赖项”


请注意,我的配方有几十个3级的依赖项,因此手动将所有代码粘贴到shef并不是一个真正的选项。我目前的解决方法是上传一个修改过的配方,并注释掉所有可能有问题的部分(并从那里手动继续),但我希望有一个更好的选择。

当Chef第一次运行时,它会创建/etc/Chef/first-boot.json文件,其中包含运行列表。尝试运行:

shef -z -j /etc/chef/first-boot.json

当您在客户机或solo模式下启动shef时,默认情况下不包括配方,因为shef的一个用例是确定为什么配方可能根本没有加载,例如导致某些异常的编译时错误

因此,您需要使用include_recipe来包含您希望使用的配方。您可以通过以下方式为节点运行列表中的所有角色/食谱自动执行此操作:

node.run_list.expand(node.chef_environment).recipes.each do |r|
  include_recipe r
end

有关这方面的更多信息,以及使用Shef调试chef客户端运行的其他一些重要提示,请参见

Nope,正如我前面提到的,这不会为我加载任何内容(但在“-s”模式下部分工作)。为了以防万一,我现在使用的是10.12.0版,但我还记得其他版本中的这种行为。它对您有用吗?我想它不会在solo模式下扩展运行列表,因为运行列表扩展是Chef Server API接口的一部分(请参阅/environments下的cookbook_versions文章),需要一些依赖项解决代码,而Chef solo可能无法解决这些问题。谢谢,这是一篇很好的文章。在第一次尝试时,我仍然得到相同的“Cookbook xyz not found”错误,因为尚未填充此节点的运行列表,但随后我重新阅读了“我们只能在Shef启动时下载的食谱上使用include_recipe”,然后它击中了我。我用
刀节点run\u list add
手动加载run\u list,然后只运行
shef-z
就可以很好地工作,而不需要传递json中的run\u list。需要使用
node.run\u list.expand(node.environment,'disk')
来实现chef solo