読者です 読者をやめる 読者になる 読者になる

CentOSにchef-zeroのインストール

chef-zeroとは

chef-zero とは、Chef 11 Server 同等の REST API インターフェースを備えた軽量で簡易な Chef Server です。認証やデータの永続的な保存などを行わない代わりに導入が大変簡単で、Chef Clientなどのテストに有用です。 とのこと。

chef-zeroのインストール

chef-zeroが依存するGemにはRuby拡張をビルドするものがあるため、Development Toolsパッケージグループとruby-develパッケージ、openssl-develパッケージをインストールしておきます。

$ sudo yum groupinstall "Development Tools"
$ sudo yum install ruby-devel openssl-devel

gemが入っていない場合にはインストールします。

$ yum install rubygems
$ ruby -v                  
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

chef-zeroのインストールを行います。

$ sudo gem install chef-zero json --no-ri --no-rdoc
Building native extensions.  This could take a while...
Successfully installed mixlib-log-1.6.0
Successfully installed hashie-2.0.5
Successfully installed moneta-0.6.0
Successfully installed json-1.8.1
Successfully installed rack-1.5.2
Successfully installed chef-zero-1.7.2
Building native extensions.  This could take a while...
Successfully installed json-1.8.1
7 gems installed

chef-zero を実行します。 とりあえず、全てのサーバから接続を受け付けるようにして起動してみます。

$ chef-zero -H 0.0.0.0 &
[2] 2777
[vagrant@vagrant-centos64 ~]$ >> Starting Chef Zero (v1.7.2)...
>> WEBrick (v1.3.1) on Rack (v1.5) is listening at http://0.0.0.0:8889
>> Press CTRL+C to stop
workstationの設定

今回はworkstationとchef-clientは同一ホストにするので、引き続きchefクライアントのインストールを行います。

$   curl -L https://www.opscode.com/chef/install.sh | bash

つづいて、knifeコマンドを使えるようにしてみます。

$  mkdir /home/vagrant/.chef/
$ vim /home/vagrant/.chef/knife.rb

knife.rbの設定は次のようになります。 client_keyは適当なClientキーを指定し、node_nameも適当に指定します。 client_keyは読み込み可能なprivate key であれば何でも良いです。

log_level               :info
log_location            STDOUT
node_name               'ubuntu1'
client_key              '/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.0/spec/data/ssl/private_key.pem'
chef_server_url         'http://10.0.1.9:8889'

動作確認のため利用するレシピはOPSCODEのgetting-startedです。
このレシピはホームディレクトリに、chef-getting-started.txt を作成するレシピです。
レシピをChef Serverにアップロードします。

$ git clone https://github.com/opscode-cookbooks/getting-started.git
$ knife cookbook upload getting-started -o .
管理対象ノード(chef-client)の設定

chef-clientとして実行するには、client.rbが必要なので/etc/chef/client.rbの内容を編集します。 今回は、workstationと同じホストで試しているためnode_nameが同じになっています。 client_keyとvalidation_key は読み込み可能なprivate key であれば何でも良いです。

log_level               :info
log_location            STDOUT
node_name               'ubuntu1'
client_key              '/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.0/spec/data/ssl/private_key.pem'
validation_key          '/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.0/spec/data/ssl/private_key.pem'
chef_server_url         'http://10.0.1.9:8889'

これでchef-clientを実行すると、chef-zeroサーバにノードが登録されます。

$ sudo chef-client 
[2013-11-25T23:17:00+00:00] INFO: Forking chef instance to converge...
Starting Chef Client, version 11.8.0
[2013-11-25T23:17:00+00:00] INFO: *** Chef 11.8.0 ***
[2013-11-25T23:17:00+00:00] INFO: Chef-client pid: 3811
[2013-11-25T23:17:00+00:00] INFO: Run List is []
[2013-11-25T23:17:00+00:00] INFO: Run List expands to []
[2013-11-25T23:17:00+00:00] INFO: Starting Chef Run for ubuntu1
[2013-11-25T23:17:00+00:00] INFO: Running start handlers
[2013-11-25T23:17:00+00:00] INFO: Start handlers complete.
[2013-11-25T23:17:00+00:00] INFO: HTTP Request Returned 404 Not Found : Object not found: /reports/nodes/ubuntu1/runs
resolving cookbooks for run list: []
[2013-11-25T23:17:00+00:00] INFO: Loading cookbooks []
Synchronizing Cookbooks:
Compiling Cookbooks...
[2013-11-25T23:17:00+00:00] WARN: Node ubuntu1 has an empty run list.
Converging 0 resources
[2013-11-25T23:17:00+00:00] INFO: Chef Run complete in 0.060747315 seconds
[2013-11-25T23:17:00+00:00] INFO: Running report handlers
[2013-11-25T23:17:00+00:00] INFO: Report handlers complete
Chef Client finished, 0 resources updated

$ knife node list
ubuntu1

引き続きノードにrecipeを追加します。

$knife node run_list add ubuntu1 "recipe[getting-started]"

最後にchef-clientを実行します。

$ sudo chef-client                                                                
[2013-11-26T13:18:22+00:00] INFO: Forking chef instance to converge...
Starting Chef Client, version 11.8.0
[2013-11-26T13:18:22+00:00] INFO: *** Chef 11.8.0 ***
[2013-11-26T13:18:22+00:00] INFO: Chef-client pid: 4521
[2013-11-26T13:18:22+00:00] INFO: Run List is [recipe[getting-started]]
[2013-11-26T13:18:22+00:00] INFO: Run List expands to [getting-started]
[2013-11-26T13:18:22+00:00] INFO: Starting Chef Run for ubuntu1
[2013-11-26T13:18:22+00:00] INFO: Running start handlers
[2013-11-26T13:18:22+00:00] INFO: Start handlers complete.
[2013-11-26T13:18:22+00:00] INFO: HTTP Request Returned 404 Not Found : Object not found: /reports/nodes/ubuntu1/runs
resolving cookbooks for run list: ["getting-started"]
[2013-11-26T13:18:22+00:00] INFO: Loading cookbooks [getting-started]
Synchronizing Cookbooks:
[2013-11-26T13:18:22+00:00] INFO: Storing updated cookbooks/getting-started/recipes/default.rb in the cache.
[2013-11-26T13:18:22+00:00] INFO: Storing updated cookbooks/getting-started/attributes/default.rb in the cache.
[2013-11-26T13:18:22+00:00] INFO: Storing updated cookbooks/getting-started/metadata.rb in the cache.
[2013-11-26T13:18:22+00:00] INFO: Storing updated cookbooks/getting-started/README.md in the cache.
  - getting-started
Compiling Cookbooks...
Converging 1 resources
Recipe: getting-started::default
  * template[/home/vagrant/chef-getting-started.txt] action create[2013-11-26T13:18:22+00:00] INFO: Processing template[/home/vagrant/chef-getting-started.txt] action create (getting-started::default line 20)
[2013-11-26T13:18:22+00:00] INFO: template[/home/vagrant/chef-getting-started.txt] created file /home/vagrant/chef-getting-started.txt

    - create new file /home/vagrant/chef-getting-started.txt[2013-11-26T13:18:22+00:00] INFO: template[/home/vagrant/chef-getting-started.txt] updated file contents /home/vagrant/chef-getting-started.txt

    - update content in file /home/vagrant/chef-getting-started.txt from none to e84a13
        --- /home/vagrant/chef-getting-started.txt      2013-11-26 13:18:22.966299400 +0000
        +++ /tmp/chef-rendered-template20131126-4521-17p6nv5    2013-11-26 13:18:22.966299400 +0000
        @@ -1 +1,6 @@
        +Welcome to Chef!
        +
        +This is Chef version 11.8.0.
        +Running on ubuntu.
        +Version 13.04.[2013-11-26T13:18:22+00:00] INFO: template[/home/vagrant/chef-getting-started.txt] mode changed to 644

    - change mode from '' to '0644'

[2013-11-26T13:18:23+00:00] INFO: Chef Run complete in 0.162571175 seconds
[2013-11-26T13:18:23+00:00] INFO: Running report handlers
[2013-11-26T13:18:23+00:00] INFO: Report handlers complete
Chef Client finished, 1 resources updated
雑感

validation_keyのコピーなどが発生しないため比較的簡単に使えるようになりますが、結局server、workstation、clientの構成は必要になるのでchef-soloと比べると手軽さは非常に落ちます。 ただし、Chef 11 Server 同等の REST API インターフェースを備えているということなので、そのあたりに価値を見いだせればお試しとして使ってみるのは良いかもしれません。