问题描述
在学习使用 Chef 的过程中,尝试为公司创建一个 POC。他的项目包含两个位于 cookbook 文件夹下的 cookbook。一个叫做 ‘hydra-base’ 的基础 cookbook,另一个叫做 ‘automator’ 的扩展 cookbook。目前他只编写了一个在扩展 cookbook 中的测试,并调用了一个基础 cookbook 的 recipe。
他遇到的问题是,在尝试使用 Kitchen 进行验证时,一切都正常上传,直到尝试应用 recipe 时出现了以下行:Recipe: hydra-base::default
,然后 Kitchen 就卡住了。它已经空闲了大约45分钟。如果他中断了工具(ctrl-c),然后重新运行 kitchen converge 命令,它会给出以下错误并卡住:[2018-01-09T17:35:23+00:00] WARN: Chef client 1514 is running, will wait for it to finish and then run.
。
因此,看起来 Chef 仍然认为正在尝试更新某些内容。以下是相关文件:
# automator/recipes/default.rb
include_recipe 'hydra-base::default'
# automator/Berksfile
source 'https://supermarket.chef.io'
cookbook 'hydra-base', path: '../hydra-base'
# automator/metadata.rb
depends 'hydra-base'
通过调用 kitchen verify -l debug
命令,无法在挂起的行后获得任何附加信息。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
在这种情况下,根据用户的问题描述和最佳回答,问题可能与 AWS 上的网络速度较慢和 apt-get 在基础 cookbook 中的超时有关。以下是一些可能的解决方案。
方案1:检查网络和依赖
- 确保你的 AWS 环境网络连接正常,网络速度没有明显问题。
- 在基础 cookbook 的 recipe 中,检查 apt-get 命令是否正常工作,是否会因为网络问题而超时。你可以尝试增加 apt-get 命令的超时时间。
方案2:检查基础 Cookbook
- 回到基础 cookbook ‘hydra-base’,确保其中的 recipe 部分正常工作,没有导致卡顿的问题。
- 仔细检查基础 cookbook 是否有任何可能引起卡住的代码,特别是与网络操作和依赖关系有关的部分。
方案3:调整 Chef 配置
- 在 Kitchen 的配置文件(kitchen.yaml)中,尝试增加 Chef 的日志级别,以获取更多的调试信息。
- 确保 Kitchen 的配置中没有一些不必要的参数或配置错误,导致了卡住的情况。
方案4:考虑使用 Vagrant
如果你想在本地快速测试,可以考虑使用 Vagrant 替代 AWS。Vagrant 提供了一种轻松设置本地虚拟机环境的方式,可以更方便地进行测试和调试。
请记住,以上方案只是一些可能的解决方法,具体问题需要根据你的实际情况进行调查和调试。如果问题仍然存在,你可能需要深入分析日志和代码,找到问题的根本原因。
希望这些解决方案能够帮助你解决 Kitchen 在使用本地 cookbook 时卡住的问题。如果问题依然存在,你可能需要根据实际情况进一步调查和分析。