なみひらブログ

学んだことを日々記録する。~ since 2012/06/24 ~

Chefの環境構築

Chefのインストール

サーバー構成管理ツール「Chef」のインストールは、コマンド1つで実行できます。

[namihira@xx.xx.xx.xx]~/chef% curl -U (プロキシユーザ名):(プロキシパスワード) -x (プロキシサーバ):(ポート) -L https://www.opscode.com/chef/install.sh | sudo bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14101  100 14101    0     0  15465      0 --:--:-- --:--:-- --:--:-- 19916
Downloading Chef  for el...
downloading https://www.opscode.com/chef/metadata?v=&prerelease=false&p=el&pv=6&m=x86_64
  to file /tmp/install.sh.16053/metadata.txt
trying wget...
url     https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-11.8.2-1.el6.x86_64.rpm
md5     10f3d0da82efa973fe91cc24a6a74549
sha256  044558f38d25bbf75dbd5790ccce892a38e5e9f2a091ed55367ab914fbd1cfed
downloaded metadata file looks valid...
downloading https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-11.8.2-1.el6.x86_64.rpm
  to file /tmp/install.sh.16053/chef-.x86_64.rpm
trying wget...
Checksum compare with sha256sum succeeded.
Installing Chef
installing with rpm...
警告: /tmp/install.sh.16053/chef-.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
準備中...                ########################################### [100%]
   1:chef                   ########################################### [100%]
Thank you for installing Chef!
[namihira@xx.xx.xx.xx]~/chef%

chef-repoを用意する

Chefを利用するためのベースとなるパッケージをGithubのChefリポジトリからとってきます。

[namihira@xx.xx.xx.xx]~/chef/% wget https://github.com/opscode/chef-repo/archive/master.zip
[namihira@xx.xx.xx.xx]~/chef% unzip master
[namihira@xx.xx.xx.xx]~/chef% mv chef-repo.master chef-repo
[namihira@xx.xx.xx.xx]~/chef% mv chef-repo
[namihira@xx.xx.xx.xx]~/chef/chef-repo% ls
LICENSE  README.md  Rakefile  certificates  chefignore  config  cookbooks  data_bags  environments  roles

cookbookの作成

cookbookを作成します。
今回は、apacheのインストールをしてみます。

[namihira@xx.xx.xx.xx]~/chef/chef-repo/cookbooks% knife cookbook create apache -o .
WARNING: No knife configuration file found
** Creating cookbook apache
** Creating README for cookbook: apache
** Creating CHANGELOG for cookbook: apache
** Creating metadata for cookbook: apache
[namihira@xx.xx.xx.xx]~/chef/chef-repo/cookbooks%

設定ファイルを作成する

通常はインターネット上に公開されているcookbookを利用すればいいですが、今回は自分で作成してみます。

chef-repo/cookbooks/apache/recipes/default.rb

#
# Cookbook Name:: apache
# Recipe:: default
#
# Copyright 2013, kohsuke Namihira
#
# All rights reserved - Do Not Redistribute
#
package 'apache2' do
  case node[ :platform ]
  when 'redhat', 'centos'
    package_name 'httpd'
  when 'debian', 'ubuntu'
    package_name 'apache2'
  end
end
#
# set content
#
template 'index.html' do
  case node[ :platform ]
  when 'redhat', 'centos'
    path '/var/www/html/index.html'
  when 'debian', 'ubuntu'
    path '/var/www/index.html'
  end
  source 'index.html.erb'
  mode 0644
  variables( { :fqdn => node[ :fqdn ] } )
end
#
# set auto start and restart apache2
#
service 'apache2' do
  case node[ :platform ]
  when 'redhat', 'centos'
    service_name 'httpd'
  when 'debian', 'ubuntu'
    service_name 'apache2'
  end
    action [ :enable, :start ]
end
#
# [EOF]
#

chef-repo/cookbooks/apache2/templates/default/index.html.erb

Welcome to <%= @fqdn %>

chef-repo/solo.json
実行するレシピの一覧

{
        "run_list": [
                "recipe[apache2]"
        ]
}

chef-repo/solo.json
cookbookへのパス

cookbook_path [ '/home/namihira/chef/chef-repo/cookbooks' ]

実行してみる

[namihira@xx.xx.xx.xx]~/chef/chef-repo% sudo chef-solo -j solo.json -c solo.rb

確認してみる

[namihira@xx.xx.xx.xx]~/chef/chef-repo% curl http://(自マシンのIPアドレス)
Welcome to hogehoge

表示された\(^o^)/

参考

特集 DevOps時代の必須知識:インフラストラクチャ自動化フレームワーク「Chef」の基本 (1/2) - @IT