解决 Test Kitchen 在使用本地 cookbook 时卡住的问题

67次阅读
没有评论

问题描述

在学习使用 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:检查网络和依赖

  1. 确保你的 AWS 环境网络连接正常,网络速度没有明显问题。
  2. 在基础 cookbook 的 recipe 中,检查 apt-get 命令是否正常工作,是否会因为网络问题而超时。你可以尝试增加 apt-get 命令的超时时间。

方案2:检查基础 Cookbook

  1. 回到基础 cookbook ‘hydra-base’,确保其中的 recipe 部分正常工作,没有导致卡顿的问题。
  2. 仔细检查基础 cookbook 是否有任何可能引起卡住的代码,特别是与网络操作和依赖关系有关的部分。

方案3:调整 Chef 配置

  1. 在 Kitchen 的配置文件(kitchen.yaml)中,尝试增加 Chef 的日志级别,以获取更多的调试信息。
  2. 确保 Kitchen 的配置中没有一些不必要的参数或配置错误,导致了卡住的情况。

方案4:考虑使用 Vagrant

如果你想在本地快速测试,可以考虑使用 Vagrant 替代 AWS。Vagrant 提供了一种轻松设置本地虚拟机环境的方式,可以更方便地进行测试和调试。

请记住,以上方案只是一些可能的解决方法,具体问题需要根据你的实际情况进行调查和调试。如果问题仍然存在,你可能需要深入分析日志和代码,找到问题的根本原因。

希望这些解决方案能够帮助你解决 Kitchen 在使用本地 cookbook 时卡住的问题。如果问题依然存在,你可能需要根据实际情况进一步调查和分析。

正文完