rpmパッケージ(httpd)をインストール(yum)

$ cd chef/foo-repo
$ vi site-cookbooks/build/recipes/default.rb
# 以下を追加
package "https" do
  action :install
end

$ knife solo cook foo
    〜略〜
Recipe: build::default
  * log[Build start...] action write

  * package[httpd] action install
    - install version 2.2.15-29.el6.centos of package httpd

Chef Client finished, 2 resources updated


rpmパッケージ(httpd)をインストール(rpm)

事前に"$ yumdownloader httpd --resolv"でファイル取得(httpdとhttp-toolsがダウンロードされた)

なお、配布したrpmインストール時に依存関係を解決できない場合は、chefがyumコマンドで必要なパッケージを自動でインストールしてくれる;-)

$ cd chef/foo-repo
$ cp httpd-2.2.15-29.el6.centos.x86_64.rpm  site-cookbooks/build/files/default/
$ cp httpd-tools-2.2.15-29.el6.centos.x86_64.rpm   site-cookbooks/build/files/default/
$ vi site-cookbooks/build/recipes/default.rb
# 以下を追加
rpmfiles = ['httpd-2.2.15-29.el6.centos.x86_64.rpm', 'httpd-tools-2.2.15-29.el6.centos.x86_64.rpm']

rpmfiles.each do |rpm|
  cookbook_file "/tmp/#{rpm}" do
    mode 0644
  end
end

rpmfiles.each do |rpm|
  package "httpd" do
    action :install
    source  "/tmp/#{rpm}"
  end
end
$ knife solo cook foo
    〜略〜
Recipe: build::default
  * log[Build start...] action write

  * package[httpd] action install
    - install version 2.2.15-29.el6.centos of package httpd

Chef Client finished, 2 resources updated


サービス(httpd)の起動と自動起動設定on

$ cd chef/foo-repo
$ vi site-cookbooks/build/recipes/default.rb
# 以下を追加
service "httpd" do
  action [:start, :enable]
end

$ knife solo cook foo
    〜略〜
  * service[httpd] action start
    - start service service[httpd]

  * service[httpd] action enable
    - enable service service[httpd]


複数サービス(iptables,ip6tables,mysqld)の停止と自動起動設定off

$ vi site-cookbooks/build/recipes/default.rb
# 以下を追加
%w{iptables ip6tables mysqld}.each do |p|
  service p do
    action [:stop, :disable]
  end
end

$ knife solo cook foo
    〜略〜


テンプレートファイルの配布

httpdの設定ファイルを置き換え(Port番号変更)とサービス再起動

  • default.rb
$ vi site-cookbooks/build/recipes/default.rb
template "httpd.conf" do
    path "/etc/httpd/conf/httpd.conf"
    source "httpd.conf.erb"
    mode 0644
    notifies :restart, 'service[httpd]'
end
  • nodes
$ vi nodes/foo.json
{
    "httpd": {
        "port": 8080
    },
    "run_list":[
        "recipe[build]"
    ]
}
  • templates
$ vi site-cookbooks/buid/templates/default/httpd.conf.erb
  〜略〜
# 待ち受けPort設定を以下を変更
Listen <%= node['httpd']['port'] %>
  〜略〜

[実行]

$ knife solo cook foo
$ ssh foo
$ grep ^Listen /etc/httpd/conf/httpd.conf
Listen 8080


テンプレートファイル配置(ホスト名等の情報を付与)

  • default.rb
$ vi site-cookbooks/build/recipes/default.rb
template "index.html" do
    path "/var/www/html/index.html"
    source "index.html.erb"
    mode 0644
end
  • nodes
$ vi nodes/foo.json
{
    "owner": {
        "name": "Foo"
    },
    "httpd": {
        "port": 8080
    },
    "run_list":[
        "recipe[build]"
    ]
}
  • templates
$ vi site-cookbooks/build/templates/default/index.html.erb

  Print: <%= node[:platform] %> : <%= node['owner']['name'] %>.

[実行]

$ knife solo cook foo
$ ssh foo
$ cat /var/www/html/index.html
<html>
  Print: Foo.com : Foo.
</html>