Chef infra chef如何知道如何从包名安装包?
我是厨师新手。我了解到Chef为资源提供了一个声明式接口。比如说: 我有一个简单的recipe.rb文件,其中有以下行: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
package 'foo'
这行代码足以让Chef知道如何在运行配方的环境中安装程序包foo
所以我跑:
chef-apply recipe.rb
我的问题是……在
包资源的上下文中,chef在内部如何将“声明性”菜谱转换为“程序性”菜谱?(即,将声明性配方命令转换为一系列操作以获取和安装包需要采取哪些步骤)
附言:
有关Chef如何解决此问题的详细信息很有趣,因为不同OS包管理器之间的包名称不必相同。在apt索引为packagefoo
中存在的内容可能在yum索引为packagebar
中存在,也可能根本不存在。而且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的公式