Chef infra 为什么可以';你不知道我的食谱吗?

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

简介 我正在学习如何在工作中自动化服务器管理。 我从网站下载了chefdk3.0 现在我正试图用厨师来制作我的第一本食谱

重要 我在Windows环境中使用它进行测试,我确实希望它失败,因为Windows没有iptables,但我不希望它失败,因为它找不到烹饪书。我试过使用它,效果很好

问题 我能够创建烹饪书并运行它,但我不能引用来自超市的依赖项

我尝试了两种选择:

备选方案1

我使用下面的命令创建了这个食谱

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.