Chef infra 为什么可以';你不知道我的食谱吗?
简介 我正在学习如何在工作中自动化服务器管理。 我从网站下载了chefdk3.0 现在我正试图用厨师来制作我的第一本食谱 重要 我在Windows环境中使用它进行测试,我确实希望它失败,因为Windows没有iptables,但我不希望它失败,因为它找不到烹饪书。我试过使用它,效果很好 问题 我能够创建烹饪书并运行它,但我不能引用来自超市的依赖项 我尝试了两种选择: 备选方案1 我使用下面的命令创建了这个食谱Chef infra 为什么可以';你不知道我的食谱吗?,chef-infra,chef-recipe,berkshelf,Chef Infra,Chef Recipe,Berkshelf,简介 我正在学习如何在工作中自动化服务器管理。 我从网站下载了chefdk3.0 现在我正试图用厨师来制作我的第一本食谱 重要 我在Windows环境中使用它进行测试,我确实希望它失败,因为Windows没有iptables,但我不希望它失败,因为它找不到烹饪书。我试过使用它,效果很好 问题 我能够创建烹饪书并运行它,但我不能引用来自超市的依赖项 我尝试了两种选择: 备选方案1 我使用下面的命令创建了这个食谱 chef generate cookbook learn_chef_httpd Ch
chef generate cookbook 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
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
(来自)
我能够完成教程,现在我想测试引用另一本烹饪书,所以我选择了
我加了这一行
cookbook 'simple_iptables', '~> 0.7.0'
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
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 generate cookbook 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
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'
depends 'simple_iptables', '~> 0.7.0'
但我仍然得到一个错误:
Error Resolving Cookbooks for Run List:
Missing Cookbooks:
No such cookbook: simple_iptables
Error Resolving Cookbooks for Run List:
Missing Cookbooks:
No such cookbook: simple_iptables
备选方案2
我仍在努力让它发挥作用,所以我也试着让它成为“书架式”,所以我创造了一本新的烹饪书
berks cookbook test
我加了这一行
cookbook 'simple_iptables', '~> 0.7.0'
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
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]'
同样的错误再次出现
我尝试将其添加到元数据中:
depends 'simple_iptables', '~> 0.7.0'
depends 'simple_iptables', '~> 0.7.0'
但我仍然得到一个错误:
Error Resolving Cookbooks for Run List:
Missing Cookbooks:
No such cookbook: simple_iptables
Error Resolving Cookbooks for Run List:
Missing Cookbooks:
No such cookbook: simple_iptables
我看了一下~/berkshelf文件夹,食谱就在那里
**备选案文3**
我在Amazon上启动了CentOS 6.5 EC2实例,安装了Ruby 2.1.3和Chef。
创建了~/chef repo/cookbooks文件夹
我用berkshelf创建了一本食谱
bundle install
添加了参考/代码,与其他备选方案相同
然后
和上次一样跑
我也有同样的问题
我错过了什么?我需要做些什么才能使其工作?确保您已按照中的说明配置了
厨师回复路径
基本上,本地模式
需要知道在哪里可以找到您的烹饪书、角色、环境、数据包等。遗憾的是,文档中没有非常清楚地说明您在哪里/如何设置厨师回复路径
下面是我可以从代码中看出的
如果找到client.rb
并包含cookbook\u path
,chef\u repo\u path
=“{cookbook\u path}/。”
如果找到knife.rb
并包含cookbook\u path
,chef\u repo\u path=“{cookbook\u path}/”
厨师可以试着预测这条路。将从pwd
向上搜索名为cookbooks
的目录。如果找到它,则cookbooks/。
将设置为您的厨师回复路径
如果所有其他操作都失败,pwd
将用作您的chef\u repo\u路径
如果您使用的是Berkshelf,那么最好的选择就是做一个berks供应商
,以获得一个目录,其中包含您需要的所有烹饪书。然后,您可以将chef_repo_路径指向存放您的供应商菜谱的菜谱
目录的父目录
请注意,这是从10分钟的源代码中挖掘出来的,所以我可能没有完全正确。在几个小时的心碎后,我尝试了@kilian和@gratzy的答案组合,这很有帮助
cmd/c E:&&cd/d E:\Items\u CI Exploration\chef\chef repo\cookbooks\&&chef client——本地模式——运行列表“菜谱[cisamplecookbooks::web]”
是的,没有引号。还要注意前面添加的“E:”。虽然“&”的数量没有什么区别
“E:\Items\u CI Exploration\chef\chef repo\cookbooks\”
这是我运行烹饪书的路径。我猜烹饪书
旁边的最后一个斜杠(\)也很重要。在寻找本地运行进行测试时,我遇到了相同的“无法解决烹饪书”错误。由于我可能希望在没有Chef服务器的情况下运行cookbooks,但也不希望为非Chef开发人员安装ChefDK来执行简单的一次性工作站设置,因此我将以下工作流组合在一起
你的食谱需要放在一个名为cookbooks的文件夹下的文件夹中,这似乎是硬编码的“魔法”,但它似乎可以放在任何地方,例如userdir/projects/cookbooks/my_cookbook\u name/
如果您有依赖项的Berksfile,则需要在本地获取它们,然后才能运行chef client-z-o my_cookbook_name
,因此运行berks vendor
将依赖项拉入当前文件夹中的cookbooks
目录
berks vendor
命令将您的其他依赖项拉入cookbooks目录,以便chef zero/chef solo可以找到它们。在管理员PowerShell提示符下运行以下命令,它可能与命令提示符兼容,但我尽量不鼓励使用cmd.exe
cd/path/to/cookbook/my\u cookbook\u name
伯克斯的卖主。
主厨客户-z-o我的食谱\u名字
使用客户端内置的新chef zero的好处在于,您不一定需要完整的ChefDK来测试,尽管您需要在至少一台机器上安装berks命令的berkshelf,因为在没有ChefDK的情况下安装它是一场噩梦。一旦你有了berks
,你就可以运行berks包
并将它创建的文件复制到一台只有chef客户端的机器上,然后在某个地方添加它,然后在包含cookbooks
文件夹的目录中运行chef客户端-z-o你的烹饪书
要想获得更多信息,请使用omnibus安装程序,您有足够的资源来引导节点或运行配方
。{iwr-usebhttps://omnitruck.chef.io/install.