これまでChefとか全くやったことなかったのだけれど、PrePANとかで必要になったのとなんとなく興味もあったので、naoyaさんが最近出した入門Chef Soloを読んでみました。
読んでみた感想としては非常によくまとまっていて分かりやすいけど、全くChefをやったことない人にとってはChefの実行を試すフェーズが少しやりづらい印象を受けました。理由としてはAWS環境を持っていない場合、2,3章のChefを試す章ができず、さらにそのあとにvagrantでローカルに仮想環境を作るのを学んだとしても、その仮想環境を使って試す部分が少ないためです。
そこで僕は全くchefをやったことない人はまずvagrantでの実行環境を作れるようになってから、本を読み始めるとより知識が深まるのではないかなと思いました。この本の4章でそのあたりも学べるので、その章をまず読んでその後自分でvagrantを少しいじってみると良いと思います。
vagrantでchef-soloの実行環境を作る
vagrantというのはVirtualBoxみたいなVMをコマンドラインからたちあげるなどのことが出来るツールです。
とりあえずvagrantでVM立ち上げたり、壊したり出来るところまで出来るとchef-soloの実行・テスト環境を作ることが出来ます。
vagrantのインストールなどは http://docs.vagrantup.com/v2/installation/index.html 辺りを参考にどうぞ。gem版じゃなくてpackage版が推奨されています。
まずvagrantのboxを落としてきます。
$ vagrant box add base http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.3-x86_64-v20130101.box
vagrant initするとVagrantfileが出来、vagrant upするとVMが立ち上がります。sshしたければvagrant sshすれば良いです。
$ mkdir chef-solo-tutorial-sample && cd chef-solo-tutorial-sample $ vagrant init $ vagrant up $ vagrant ssh
これでとりあえず立ち上がるところまでいけると思います。逆に作ったものを壊したい時は
$ vagrant destroy
とすればVMを消すことができます。chefを試したい時はvagrant upしてたちあげて実行したあとに、うまく行かなかったらvagrant destroyして壊して、もう一度vagrant upからやり直すみたいにします。
vagrantについては以下の記事も参考にしてください。
chef solo入門に出てくるサンプルをvagrant上で動かす
vagrantを立ち上げられるようになったとしても、2,3章のサンプルはvagrantで立ち上げたVMで動かすようになっていません。そこでとりあえず2章のhello worldをvagrantのVMで実行する手順を書いてみます。
必要なgemをインストールしておく
knife-soloが必要なのでインストールしておきます。この本では0.3.0を使ったほうがよいとされているので、それをインストールしてみます。
$ git clone git://github.com/matschaffer/knife-solo.git $ cd knife-solo $ rake install
chef soloの雛形を作る
以下のコマンドで出来ます。
$ cd chef-solo-tutorial-sample
$ knife solo init .
hello worldを作る
まずhello recipeの雛形を作ります。
$ knife cookbook create hello -o site-cookbooks/
そのあとsite-cookbooks/hello/recipes/default.rbに以下を追記します。
log "Hello, Chef!"
そのあとnodes/melody.jsonというファイルを追加し、以下を書いておきます。
{ "run_list":[ "hello" ] }
vagrant上でchef soloを実行する
このあとchef soloをssh経由で実行します。
まず~/.ssh/configに必要な情報を追記します。必要な情報はvagrant upした状態でvagrant ssh-configすれば出てきます。
$ vagrant ssh-config --host melody Host melody HostName 127.0.0.1 User vagrant Port 2200 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile "/Users/sample/.vagrant.d/insecure_private_key" IdentitiesOnly yes
自分の環境でssh-configを実行して出てきた設定を~/.ssh/configに追記しておきます。この状態で
以下のようにしてVMの中にssh出来ることを確認しておいてください。
$ ssh melody
そのあとchef soloのセットアップをします。
$ knife solo prepare melody Bootstrapping Chef... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 101 6471 101 6471 0 0 1037 0 0:00:06 0:00:06 --:--:-- 37189 Downloading Chef 11.4.0 for el... Installing Chef 11.4.0 warning: /tmp/tmp.e8Qh0w4p/chef-11.4.0.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY Preparing... ########################################### [100%] 1:chef ########################################### [100%] Thank you for installing Chef!
これでchefのセットアップが終わったので、先ほどのhello worldを実行します。
$ knife solo cook melody Running Chef on melody... Checking Chef version... Syncing kitchen... Adding patches... Syncing solo config... Running Chef... Starting Chef Client, version 11.4.0 Compiling Cookbooks... Converging 1 resources Recipe: hello::default * log[Hello, Chef!] action write Chef Client finished, 1 resources updated
これでlog[Hello, Chef!]が出てくれば成功です。
まとめ
Chef Solo本を読んでもうちょっとvagrant上で実行できるサンプルがあると嬉しいなと思って、hello recipeを参考に手元のvagrantで実行する方法をまとめてみました。今回のsampleはhttps://github.com/shibayu36/chef-solo-tutorial-sampleに置きましたので、これを参考に本に出てくる他のサンプルもためしてみると理解が深まると思います。