在调试厨师食谱中的错误时,我通常喜欢登录有问题的机器,输入“shef -z”。如果之前有一次成功运行,注册的 run_list 会自动加载所有相关的属性和配方,这样我就可以直接跳进去尝试有问题的行。
问题是如果 chef-client 在第一次运行时失败,run_list 是空的,shef 甚至从缓存中删除(非常需要的)食谱,说“这个客户端不再需要它的食谱”。有什么方法可以强制 shef 让我使用我的 run_list 吗?
官方wiki提到:
“运行列表的设置方式与普通厨师客户端运行的方式相同。”
但尝试“-j”似乎没有帮助。
我也尝试过运行单人模式(“-s -j”),正如这篇博文中所解释的那样。它加载 run_list (没有扩展它,这很奇怪),但是当我尝试做任何事情时,我会得到类似的东西:
“找不到食谱 tomcat。如果您从另一个食谱加载 tomcat,请确保在元数据中配置依赖项”。
请注意,我的配方有几十个 3 级深的依赖项,因此手动将所有代码粘贴到 shef 并不是一个真正的选择。我目前的解决方法是上传一个修改过的配方,其中所有可能有问题的部分都被注释掉(并从那里手动继续),但我希望有一个更好的选择。