简介我正在学习Chef在工作中自动进行服务器管理。我从这里下载了Chefdk 3.0 ,现在我正在尝试使用Chef构建我的第一本食谱。
重要说明:我正在Windows环境中使用它进行测试,我确实希望它会失败,因为Windows没有iptables,但是我并不希望它失败,因为它找不到菜谱。我试过使用Windows食谱,并且可以使用。
这个问题我能够创建食谱,并运行它,但我不能够参考依赖从超市。
我尝试了两种选择:
选择1
我使用以下命令创建食谱
chef generate cookbook learn_chef_httpd
(来自本教程)
我能够完成本教程,现在我想测试参考另一本食谱,因此我选择了simple_iptables
我加了这条线
cookbook 'simple_iptables', '~> 0.7.0'
对于我的Berksfile,如超级市场中所述。
然后,将这些行添加到我的default.rb文件中:
include_recipe 'simple_iptables'
# Allow HTTP, HTTPS
simple_iptables_rule "http" do
rule [ "--proto tcp --dport 80",
"--proto tcp --dport 443" ]
jump "ACCEPT"
end
我使用以下命令运行食谱:
chef-client --local-mode --runlist 'recipe[learn_chef_httpd]'
问题是厨师找不到菜谱
Chef::Exceptions::CookbookNotFound
----------------------------------
Cookbook simple_iptables not found. If you're loading simple_iptables from anoth er cookbook, make sure you configure the dependency in your metadata
我尝试将其添加到元数据中:
depends 'simple_iptables', '~> 0.7.0'
但是我仍然得到一个错误:
Error Resolving Cookbooks for Run List:
Missing Cookbooks:
No such cookbook: simple_iptables
选择2
我仍在尝试使其工作,因此我也尝试使其成为“ berkshelf方式”,因此我创建了新的食谱。
berks cookbook test
我添加了这一行
cookbook 'simple_iptables', '~> 0.7.0'
对于我的Berksfile,如超级市场中所述。
然后,将这些行添加到我的default.rb文件中:
include_recipe 'simple_iptables'
# Allow HTTP, HTTPS
simple_iptables_rule "http" do
rule [ "--proto tcp --dport 80",
"--proto tcp --dport 443" ]
jump "ACCEPT"
end
执行的berks安装:
伯克斯安装
并运行它:
chef-client --local-mode --runlist 'recipe[test]'
再次出现相同的错误
Chef::Exceptions::CookbookNotFound
----------------------------------
Cookbook simple_iptables not found. If you're loading simple_iptables from anoth er cookbook, make sure you configure the dependency in your metadata
我尝试将其添加到元数据中:
depends 'simple_iptables', '~> 0.7.0'
但是我仍然得到一个错误:
Error Resolving Cookbooks for Run List:
Missing Cookbooks:
No such cookbook: simple_iptables
我看着〜/ berkshelf文件夹,那里有食谱。
**替代3 **
我在亚马逊上启动了一个CentOS 6.5 EC2实例,安装了Ruby 2.1.3和Chef。创建了一个〜/ chef-repo / cookbooks文件夹
我使用berkshelf创建了一个食谱,
bundle install
像其他替代品一样添加了参考/代码,然后
berks install
并以与上次相同的方式运行。
我有同样的问题。
我想念什么?我需要什么使它起作用?
确保已chef_repo_path
按照docs中所述配置了。
基本上local-mode
需要知道在哪里可以找到您的食谱,角色,环境,数据包等。可惜的是,有关在何处/如何进行设置的文档并不十分清楚chef_repo_path
这是我可以从代码中看出的内容。
client.rb
找到并包含cookbook_path
,chef_repo_path
="#{cookbook_path}/.."
knife.rb
找到并包含cookbook_path
,chef_repo_path = "#{cookbook_path}/.."
pwd
向上搜索以查找目录cookbooks
。如果找到它,cookbooks/..
则将其设置为您的chef_repo_path。pwd
将用作您的chef_repo_path
如果您使用的是Berkshelf,最好的选择是做一个berks vendor
以获得单个目录的目录,该目录将包含您需要的所有菜谱。然后,您可以将chef_repo_path指向cookbooks
保存您供应的食谱的目录的父目录。
请注意,这是从源代码中挖掘10分钟开始的,所以我可能不太正确。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句