はじめての chef-client (solo)

そろそろ本気で chef を利用したいと思ったので、テスト環境 (CentOS 6.2 64bit) で chef-solo を利用できるように頑張ってみます。

※ とにかく動かすことが目的なので、細かい設定等は省いてます。

参考にさせて頂いたサイト様
Rubyist Magazine – Chef でサーバ管理を楽チンにしよう! (第 1 回)
インフラストラクチャ自動化フレームワーク「Chef」の基本 (1/2) – @IT

まずは chef-client のインストール。
omnibus installer という公式配布のインストーラーを利用します。

[user@test ~]$ su -
[root@test ~]# curl -L https://www.opscode.com/chef/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
101 6790 101 6790 0 0 7426 0 --:--:-- --:--:-- --:--:-- 20451
Downloading Chef for el...
Installing Chef
警告: /tmp/tmp.x9Kd5ZHe/chef-.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
準備中... ########################################### [100%]
1:chef ########################################### [100%]
Thank you for installing Chef!
[root@test ~]#

という訳で、一発であっさり終了。軽くビビる。
’13/09 の時点だと、chef 11.6.0 というバージョンがインストールされました。

[user@test ~]$ chef-solo -v
Chef: 11.6.0
[user@test ~]$ rpm -qa | grep chef
chef-11.6.0-1.el6.x86_64

インストール場所は /opt/chef 配下。

ちなみに ruby もこの時点での最新版 (1.8.7.352) を yum でインストールしました。

[user@test ~]$ ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
[user@test ~]$ rpm -qa | grep ruby
ruby-1.8.7.352-12.el6_4.x86_64
ruby-libs-1.8.7.352-12.el6_4.x86_64

…が、インストールした後に #learnchef を見てたら、どうも omnibus installer を利用した場合は ruby のインストールは要らないみたい…。

余計な事をしたツケが後で出ない事を祈ります。
https://learnchef.opscode.com/quickstart/workstation-setup/#linux

( /opt/chef/embedded/ に関連する物も全部インストールされるからかな…? )

インストールが無事終わったので、早速 test という名前の cookbook を knife コマンドで作成します。

[root@test ~]# knife cookbook create test
WARNING: No knife configuration file found
** Creating cookbook test
** Creating README for cookbook: test
** Creating CHANGELOG for cookbook: test
** Creating metadata for cookbook: test

この時、デフォルトの動作だと /var/chef 配下にファイルを作成しようとするため、それなりの権限が必要です。出力先を変更したい場合は -o オプションを利用するか、knife.rb ファイルで設定するはずなのですが、今回は先を急ぎます。

テンプレートを作成します。
テンプレートは各種設定ファイル (テキストファイル) を生成するための雛型で、eRuby で作成します。参考サイト様の例に則り、下記のように作成します。

[root@test ~]# cd /var/chef/cookbooks/test/templates/default/
[root@test default]# vi test.conf.erb

hogehoge

次にレシピを作成します。
recipes ディレクトリに default.rb というファイルが有るので、それを編集します。

[root@test ~]# cd /var/chef/cookbooks/test/recipes/
[root@test recipes]# vi default.rb

template "/tmp/test.conf" do
owner "root"
group "root"
mode "0644"
end

最後に、実行内容を JSON で記述したファイルを作成します。
場所はどこでも OK みたいですが、公式や参考サイト様を参考に ~/.chef ディレクトリを作成します。

[root@test ~]# mkdir .chef
[root@test ~]# cd .chef
[root@test .chef]# vi chef.json
{
  "run_list": [
    "recipe[test]"
  ]
}

お待ちかねの実行です。
本来は solo.rb という chef-solo の設定ファイルを作成するのですが、cookbooks のディレクトリ等をデフォルトのままにしてあれば、無くても動作可能でした。
(動作中に警告は出ます。)

[root@test ~]# chef-solo -j .chef/chef.json -l debug

これで、/tmp/test.conf というファイルが指定の内容で作成されました。

[root@test ~]# ls -la /tmp/test.conf
-rw-r--r-- 1 root root 9 9月 17 17:30 2013 /tmp/test.conf
[root@test ~]# cat /tmp/test.conf
hogehoge

パーミッションや所有者 (ファイルの状態)、ファイルの内容を変更した後にもう一度 chef-solo を実行すれば、同じ状態に戻ります。