JSB*_*ach 16 chef-infra chef-recipe berkshelf
简介 我正在学习厨师在工作中自动化服务器管理.我从这里下载了chefdk 3.0 ,现在我正在尝试用厨师制作我的第一本食谱.
重要 我在Windows环境中使用它进行测试,我确实认为它失败了,因为Windows没有iptables,但我不认为它会失败,说它找不到食谱.我尝试过使用Windows cookbook,但它确实有效.
问题 我能够创建菜谱并运行它,但我无法引用超市的依赖关系.
我尝试过两种选择:
备选方案1
我使用以下命令来创建cookbook
chef generate cookbook learn_chef_httpd
Run Code Online (Sandbox Code Playgroud)
(来自本教程)
我能够完成教程,现在我想测试引用另一本食谱,所以我选择了simple_iptables
我添加了这一行
cookbook 'simple_iptables', '~> 0.7.0'
Run Code Online (Sandbox Code Playgroud)
对于我的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
Run Code Online (Sandbox Code Playgroud)
我使用以下方法运行食谱:
chef-client --local-mode --runlist 'recipe[learn_chef_httpd]'
Run Code Online (Sandbox Code Playgroud)
问题是厨师找不到食谱
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
Run Code Online (Sandbox Code Playgroud)
我尝试将其添加到元数据中:
depends 'simple_iptables', '~> 0.7.0'
Run Code Online (Sandbox Code Playgroud)
但我仍然得到一个错误:
Error Resolving Cookbooks for Run List:
Missing Cookbooks:
No such cookbook: simple_iptables
Run Code Online (Sandbox Code Playgroud)
备选方案2
我仍然试图让它工作,所以我也尝试使它成为"berkshelf方式",所以我创建了一个新的食谱.
berks cookbook test
Run Code Online (Sandbox Code Playgroud)
我添加了这一行
cookbook 'simple_iptables', '~> 0.7.0'
Run Code Online (Sandbox Code Playgroud)
对于我的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
Run Code Online (Sandbox Code Playgroud)
执行berks安装:
berks安装
并运行它:
chef-client --local-mode --runlist 'recipe[test]'
Run Code Online (Sandbox Code Playgroud)
同样的错误又回来了
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
Run Code Online (Sandbox Code Playgroud)
我尝试将其添加到元数据中:
depends 'simple_iptables', '~> 0.7.0'
Run Code Online (Sandbox Code Playgroud)
但我仍然得到一个错误:
Error Resolving Cookbooks for Run List:
Missing Cookbooks:
No such cookbook: simple_iptables
Run Code Online (Sandbox Code Playgroud)
我看了〜/ berkshelf文件夹,那里有食谱.
**替代3**
我在亚马逊上启动了CentOS 6.5 EC2实例,安装了Ruby 2.1.3和Chef.创建了一个〜/ chef-repo/cookbooks文件夹
我用berkshelf创建了一本食谱,跑了
bundle install
Run Code Online (Sandbox Code Playgroud)
然后添加参考/代码,如同其他替代品
berks install
Run Code Online (Sandbox Code Playgroud)
和我上次做的一样.
我遇到了同样的问题.
我错过了什么?我需要做些什么才能让它发挥作用?
Tej*_*don 18
确保您已chef_repo_path按照文档中的说明进行了配置.
基本上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分钟开始,所以我可能没有这么做.