そろそろ本気で 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 を実行すれば、同じ状態に戻ります。