Chefを使ってみよう [3]
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
Chef Soloを使ってみよう
Chef SoloとはChef ServerなしでCookbookを利用するためのツールです。インストールや管理に手間のかかるChef Serverを準備する必要がなく、単一のホストでChefを利用することが可能になります。その反面、Chef Soloを実行するホスト上にChefを利用するための情報を揃えておく必要があります。
chef-soloホストの準備
Chef Soloを実行するホストをchef-soloホストとします。これまで同様、chef-soloホストは新規にUbuntu Server 11.10をインストールし、Opscode社のaptレポジトリの設定までを行います。
chef-soloコマンドはchefパッケージに入っているのでインストールします。
root@chef-solo:~# aptitude install chef The following NEW packages will be installed: chef libabstract-ruby1.8{a} libbunny-ruby{a} libbunny-ruby1.8{a} liberubis-ruby{a} liberubis-ruby1.8{a} libhighline-ruby{a} libjson-ruby{a} libmixlib-authentication-ruby{a} libmixlib-authentication-ruby1.8{a} libmixlib-cli-ruby{a} libmixlib-cli-ruby1.8{a} libmixlib-config-ruby{a} libmixlib-config-ruby1.8{a} libmixlib-log-ruby{a} libmixlib-log-ruby1.8{a} libmoneta-ruby{a} libmoneta-ruby1.8{a} libnet-ssh-multi-ruby{a} libnet-ssh2-ruby{a} libohai-ruby{a} libohai-ruby1.8{a} libpolyglot-ruby{a} libreadline5{a} librestclient-ruby{a} libruby1.8{a} libsystemu-ruby1.8{a} libtreetop-ruby{a} libuuidtools-ruby{a} libuuidtools-ruby1.8{a} libyajl-ruby{a} ohai{a} ruby-highline{a} ruby-ipaddress{a} ruby-json{a} ruby-mime-types{a} ruby-net-ssh{a} ruby-net-ssh-gateway{a} ruby-net-ssh-multi{a} ruby-rest-client{a} ruby1.8{a} ruby1.8-dev{a} rubygems{a} 0 packages upgraded, 43 newly installed, 0 to remove and 0 not upgraded. Need to get 0 B/3,932 kB of archives. After unpacking 22.3 MB will be used. Do you want to continue? [Y/n/?] y : : : root@chef-solo:~#
This is the full URI that clients will use to connect to the server. . This will be used in /etc/chef/client.rb as 'chef_server_url'. URL of Chef Server (e.g., http://chef.example.com:4000):
chef-soloコマンドはChef Serverを利用しないので、chef_server_urlの設定は空欄のままにします。
root@chef-solo:~# ls -laR /etc/chef /etc/chef: 合計 8 drwxr-xr-x 2 root root 4096 2012-04-16 22:01 . drwxr-xr-x 82 root root 4096 2012-04-16 22:01 .. -rw-r----- 1 root root 0 2012-04-16 22:01 client.rb root@chef-solo:~#
このようにchef-clientプロセスの設定ファイルは空ですが、chef-clientプロセスが起動しているので停止しておきます。
root@chef-solo:~# ps auxwwwf | grep '[ c]hef' root 3995 0.0 1.3 95376 26736 ? S 22:01 0:00 /usr/bin/ruby1.8 /usr/bin/chef-client -d -P /var/run/chef/client.pid -L /var/log/chef/client.log -c /etc/chef/client.rb -i 1800 -s 20 root@chef-solo:~#
root@chef-solo:~# /etc/init.d/chef-client stop * Stopping chef-client chef-client ...done. root@chef-solo:~#
さらに、自動起動しないように設定します。
root@chef-solo:~# ls -l /etc/rc*/*chef-client lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc0.d/K02chef-client -> ../init.d/chef-client lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc1.d/K02chef-client -> ../init.d/chef-client lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc2.d/S99chef-client -> ../init.d/chef-client lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc3.d/S99chef-client -> ../init.d/chef-client lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc4.d/S99chef-client -> ../init.d/chef-client lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc5.d/S99chef-client -> ../init.d/chef-client lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc6.d/K02chef-client -> ../init.d/chef-client root@chef-solo:~#
root@chef-solo:~# update-rc.d -f chef-client remove Removing any system startup links for /etc/init.d/chef-client ... /etc/rc0.d/K02chef-client /etc/rc1.d/K02chef-client /etc/rc2.d/S99chef-client /etc/rc3.d/S99chef-client /etc/rc4.d/S99chef-client /etc/rc5.d/S99chef-client /etc/rc6.d/K02chef-client root@chef-solo:~#
chef-soloコマンドの設定
chef-soloコマンド用の設定ファイルを準備します。
root@chef-solo:~# cat > /etc/chef/solo.rb file_cache_path "/tmp" cookbook_path "/root/chef-solo/cookbooks" root@chef-solo:~#
Cookbookを格納するディレクトリを設定ファイルに記載した位置に作成します。
root@chef-solo:~# mkdir -p /root/chef-solo/cookbooks root@chef-solo:~#
設定を行っていませんがknifeコマンドは使用できるので、Cookbookの雛形を作成します。
root@chef-solo:~# knife cookbook create sample_solo -o /root/chef-solo/cookbooks WARNING: No knife configuration file found ** Creating cookbook sample_solo ** Creating README for cookbook: sample_solo ** Creating metadata for cookbook: sample_solo root@chef-solo:~#
/tmpにファイルを書き出すRecipeを作成します。
root@chef-solo:~# vi /root/chef-solo/cookbooks/sample_solo/recipes/default.rb # # Cookbook Name:: sample_solo # Recipe:: default # template '/tmp/chef_solo-test' do source 'chef_solo-test.erb' mode 0644 end root@chef-solo:~#
root@chef-solo:~# vi /root/chef-solo/cookbooks/sample_solo/templates/default/chef_solo-test.erb Welcome to Chef Solo! CPU :<%= node[:cpu][:"0"][:model_name] %> Memory:<%= node[:memory][:total] %> OS :<%= node[:platform] %> <%= node[:platform_version] %> root@chef-solo:~#
Chef Serverがある場合は、実行するRecipeとChef Nodeをknifeコマンドによって結びつけていましたが、Chef Soloの場合は実行するRecipeをJSON形式のファイルで定義します。
root@chef-solo:~# cat > /root/chef-solo/chef-solo.json { "run_list": [ "recipe[sample_solo]" ] } root@chef-solo:~#
chef-soloコマンドの実行
準備ができたところでchef-soloコマンドを実行します。-jオプションで実行するRecipeを定義したJSONファイルを与えます。また、Cookbookへのパスは先に作成した/etc/chef/solo.rbでの設定が用いられます。
root@chef-solo:~# chef-solo -j /root/chef-solo/chef-solo.json [Mon, 16 Apr 2012 22:31:24 +0900] INFO: *** Chef 0.10.8 *** [Mon, 16 Apr 2012 22:31:24 +0900] INFO: Setting the run_list to ["recipe[sample_solo]"] from JSON [Mon, 16 Apr 2012 22:31:24 +0900] INFO: Run List is [recipe[sample_solo]] [Mon, 16 Apr 2012 22:31:24 +0900] INFO: Run List expands to [sample_solo] [Mon, 16 Apr 2012 22:31:24 +0900] INFO: Starting Chef Run for chef-solo [Mon, 16 Apr 2012 22:31:24 +0900] INFO: Running start handlers [Mon, 16 Apr 2012 22:31:24 +0900] INFO: Start handlers complete. [Mon, 16 Apr 2012 22:31:24 +0900] INFO: Processing template[/tmp/chef_solo-test] action create (sample_solo::default line 6) [Mon, 16 Apr 2012 22:31:24 +0900] INFO: template[/tmp/chef_solo-test] mode changed to 644 [Mon, 16 Apr 2012 22:31:24 +0900] INFO: template[/tmp/chef_solo-test] updated content [Mon, 16 Apr 2012 22:31:24 +0900] INFO: Chef Run complete in 0.00459 seconds [Mon, 16 Apr 2012 22:31:24 +0900] INFO: Running report handlers [Mon, 16 Apr 2012 22:31:24 +0900] INFO: Report handlers complete root@chef-solo:~#
このようにRecipeが実行され、/tmpにファイルが生成されました。
root@chef-solo:~# ls -la /tmp/ 合計 12 drwxrwxrwt 2 root root 4096 2012-04-16 22:31 . drwxr-xr-x 23 root root 4096 2012-04-02 21:29 .. -rw-r--r-- 1 root root 96 2012-04-16 22:31 chef_solo-test root@chef-solo:~# cat /tmp/chef_solo-test Welcome to Chef Solo! CPU :QEMU Virtual CPU version 1.0 Memory:2056408kB OS :ubuntu 11.10 root@chef-solo:~#
なお、chef-soloコマンドはデーモンプロセスとして起動することや、遠隔のCookbookを参照することも可能です。詳細はman pageやOpscode社のドキュメントを参照してください。