Chef运行列表报错找不到Apache Cookbook问题求助
解决Chef Client提示"No such cookbook: apache"的问题
我来帮你搞定这个问题,你遇到的核心问题是Chef Zero(就是你用-z参数启动的本地模式)找不到你的apache Cookbook,下面是一步步的排查和解决方法:
1. 先确认Cookbook的存放位置
Chef Zero默认会从当前目录下的cookbooks文件夹里搜索Cookbook。但你用chef generate cookbook apache生成的Cookbook,默认是直接放在当前目录下的apache文件夹里,而不是cookbooks/apache,这就导致Chef找不到它。
解决方法很简单,把Cookbook移到cookbooks目录里:
# 先创建cookbooks目录(如果没有的话) mkdir -p cookbooks # 把apache Cookbook移进去 mv apache cookbooks/
然后再运行正确的chef-client命令:
sudo chef-client -z --runlist "recipe[apache::server]"
2. 不想移动目录?直接指定Cookbook路径
如果你不想移动Cookbook的位置,可以用--cookbook-path参数告诉Chef Client你的Cookbook在哪里:
# 假设apache Cookbook就在当前目录下 sudo chef-client -z --cookbook-path ./apache --runlist "recipe[apache::server]" # 或者直接指定当前目录(如果当前目录下就是apache Cookbook的根目录) sudo chef-client -z --cookbook-path . --runlist "recipe[apache::server]"
3. 检查Cookbook的结构是否合规
Chef识别Cookbook需要标准的目录结构,你要确保你的apache Cookbook至少有这些文件:
apache/ ├── recipes/ │ └── server.rb # 你写的安装httpd的代码在这里 └── metadata.rb # 这个文件是必须的!
chef generate cookbook命令应该已经自动生成了metadata.rb,你可以打开它确认一下,里面至少要有name 'apache'这一行,没有的话手动加上就行。
4. 确保runlist的格式正确
你之前试的几种命令里,只有这个格式是正确的:
sudo chef-client -z --runlist "recipe[apache::server]"
另外两种格式(不加引号或者用方括号包裹)都是错误的,以后用这个正确的格式就没问题了。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

