Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chef infra chef如何知道如何从包名安装包?_Chef Infra_Chef Recipe - Fatal编程技术网

Chef infra chef如何知道如何从包名安装包?

Chef infra chef如何知道如何从包名安装包?,chef-infra,chef-recipe,Chef Infra,Chef Recipe,我是厨师新手。我了解到Chef为资源提供了一个声明式接口。比如说: 我有一个简单的recipe.rb文件,其中有以下行: package 'foo' 这行代码足以让Chef知道如何在运行配方的环境中安装程序包foo 所以我跑: chef-apply recipe.rb 我的问题是…… 在包资源的上下文中,chef在内部如何将“声明性”菜谱转换为“程序性”菜谱?(即,将声明性配方命令转换为一系列操作以获取和安装包需要采取哪些步骤) 附言: 有关Chef如何解决此问题的详细信息很有趣,因为不同O

我是厨师新手。我了解到Chef为资源提供了一个声明式接口。比如说:

我有一个简单的recipe.rb文件,其中有以下行:

package 'foo'
这行代码足以让Chef知道如何在运行配方的环境中安装程序包
foo

所以我跑:

chef-apply recipe.rb
我的问题是……
资源的上下文中,chef在内部如何将“声明性”菜谱转换为“程序性”菜谱?(即,将声明性配方命令转换为一系列操作以获取和安装包需要采取哪些步骤)

附言: 有关Chef如何解决此问题的详细信息很有趣,因为不同OS包管理器之间的包名称不必相同。在apt索引为package
foo
中存在的内容可能在yum索引为package
bar
中存在,也可能根本不存在。而且Chef不会将食谱与特定的操作系统或包管理器绑定。因此,我很好奇,当使用Chef apply时,Chef是如何将这些声明性语句转换为apt get、yum或brew等命令的

此资源是用于特定平台上的包管理的若干其他资源的基础资源。虽然可以使用这些特定资源中的每一种,但建议尽可能多地使用包资源。有关特定平台的特定资源的更多信息,请参阅以下主题:

  • apt_包
  • bff_包
  • 厨师长
  • dpkg_包装
  • 简易安装软件包
  • freebsd_软件包
包资源根据需要委托给相应的操作系统级包。如果不同操作系统之间的包名相同,那么您很幸运。厨师长将确定使用哪个软件包管理器并安装该软件包

在您提到的案例中,如果apt的包名为
foo
,yum的包名为
bar
,则必须添加一些额外的逻辑

case node[:platform]
when "ubuntu", "debian"
  package "foo" do
    action :install
  end
when "centos"
  package "bar" do
    action :install
  end
end

Chef仍将负责确定使用哪个底层软件包管理器,因此您不必指定
apt\u-package
yum\u-package
资源,但您必须为每个平台提供正确的名称。

好的,这很有意义。事实上,我将
包'apache2'
放在配方中,并在OS X上运行chef apply,它给出了一个错误:没有适用于apache2的公式