如何使用apache2 chef cookbook安装apache2?

Ell*_*lla 2 chef-infra

环境:

  • CentOS 6
  • 厨师10

我从community.opscode下载了apache2 cookbook,然后# chef-client 在客户端节点中运行.安装和开始服务是成功的.

[2013-03-12T15:30:00+09:00] INFO: Processing package[apache2] action install(apache2::default line 20)
Run Code Online (Sandbox Code Playgroud)

当我去cookbooks/apache2/recipes/default.rb时,没有一行说action:install 我对Ruby很新,所以我无法弄清楚负责安装的代码行在哪里.

另外,如果正在安装apache2,配方中是否包含某种安装包?说,.rpm包?如果是,那么完整路径是什么?

提前致谢!

编辑:

我已经了解到包中的内容

package "apache2" do
   package_name node['apache']['package']
end
Run Code Online (Sandbox Code Playgroud)

具有action :install默认值.但又一次,我不知道它安装的是什么.安装程序包本身在哪里,或者菜单与安装程序相同?

jti*_*man 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
Run Code Online (Sandbox Code Playgroud)

所有意图和目的的资源名称都是"apache2".但是,packages的name属性是package_name,在这种情况下,包名称来自属性,该属性node['apache']['package']在cookbook的attributes/default.rb文件中设置.这是特定于平台的,因为没有两个发行版/操作系统可以就调用包的内容达成一致(Debian上的apache2,RHEL上的httpd).

资源的特殊属性是操作.这告诉底层提供者资源应该是什么状态.默认情况下,Chef将对资源采取最积极的行动.作为底层系统资源的声明性接口,Chef认为这是最明智的不足为奇的事情.对于包,Chef将默认安装包.

因此,作为编写此类配方的概述:

  1. 我们告诉Chef管理一个名为" apache2" 的包.
  2. 我们告诉Chef,要管理的包的名称实际上来自属性`node ['apache'] ['package'].
  3. 如果没有特定的操作,Chef将默认install包.
  4. Chef将使用默认情况下为节点平台设置的底层包管理器来安装包.在Debian/Ubuntu系统上,它会做apt-get install apache2.在RHEL/CentOS等系统上,它会做yum install httpd.