环境:
我从community.opscode下载了apache2 cookbook然后我跑了# chef-client
在客户端节点中。安装和开始服务都很成功。
[2013-03-12T15:30:00+09:00] INFO: Processing package[apache2] action install(apache2::default line 20)
当我去cookbook / apache2 / recipes / default.rb时,没有一行显示action:install
我是Ruby的新手,所以我无法弄清楚负责安装的代码行。
此外,如果正在安装apache2,配方中是否包含某种安装包?说,.rpm包?如果是,那么完整的路径是什么?
提前致谢!
修改
我已经了解了
中的包package "apache2" do
package_name node['apache']['package']
end
默认为action :install
。
但又一次,我不知道它安装的是什么。安装程序包本身在哪里,或者菜单与安装程序相同?
答案 0 :(得分:7)
这里有几点要讨论。首先,规范参考文档位于Chef Docs页面上的包资源。
由于Chef配方是Ruby DSL,让我们来看看这意味着什么。配方中定义的每个资源都有一个类型,可以有一个或多个提供者。资源是处理如何管理该资源(提供者)的基础事物的声明性接口。 Chef根据节点的平台自动选择提供程序。在包装的情况下,Chef提供yum,apt,solaris,macports等等的提供商。有关信息,请参阅文档。
当你在配方中声明一个资源时,它需要两个Ruby术语,一个字符串和一个块。字符串是资源“名称”。块中的每个属性参数都可以具有默认选项,这些选项记录在各个核心Chef资源和提供者的docs站点上。该名称还用于其中一个属性,称为“name_attribute”。在这个例子中:
package "apache2" do
package_name node['apache']['package']
end
对于所有意图和目的,资源的名称是“apache2”。但是,包的name属性为package_name
,在这种情况下,包名称来自属性node['apache']['package']
,该属性在cookbook的attributes/default.rb
文件中设置。这是特定于平台的,因为没有两个发行版/操作系统可以就调用包的内容达成一致(Debian上的apache2,RHEL上的httpd)。
资源的特殊属性是操作。这告诉底层提供者资源应该是什么状态。默认情况下,Chef将对资源采取最积极的行动。作为底层系统资源的声明性接口,Chef认为这是最明智的不足为奇的事情。对于包,Chef将默认安装包。
作为撰写此类食谱的概述:
apache2
”的包。install
包。apt-get install apache2
。在RHEL / CentOS等系统上,它将执行yum install httpd
。答案 1 :(得分:0)
在CentOS
,默认软件包管理器为yum
,因此将通过yum
进行安装。请参阅chef package resource doc provider section。