軽量簡易Chef Server「chef-zero」を使ってみよう #opschef_ja
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
1. chef-zero とは
chef-zero とは、Chef 11 Server 同等の REST API インターフェースを備えた軽量で簡易な Chef Server です。認証やデータの永続的な保存などを行わない代わりに導入が大変簡単で、Chef Clientなどのテストに有用です。
#ChefConf2013 にて発表されたスライドも参照してください。
2. chef-zero のインストール
インストールは gem コマンドを用います。
$ sudo gem install chef-zero --no-ri --no-rdoc
3. chef-zero の起動
chef-zero コマンドで起動可能です。以下が usage です。
$ chef-zero -h
Usage: chef-zero [ARGS]
-H, --host HOST Host to bind to (default: 127.0.0.1)
-p, --port PORT Port to listen on
--[no-]generate-keys Whether to generate actual keys or fake it (faster). Default: false.
-h, --help Show this message
--version Show version
オプションなしで起動すると 127.0.0.1 で起動するため、今回は全インターフェースから接続可能なように 0.0.0.0 を指定して起動します。
$ chef-zero -H 0.0.0.0
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:8889, CTRL+C to stop
4. Workstation の設定
次にローカルマシンを Workstation と見立てて chef-zero サーバと通信します。一般に Workstation と Chef Server の通信は、 Workstation の chef-repo/.chef ディレクトリ下の knife.rb 内に記載されている設定内容と、その設定内容から参照される .pem ファイルの key 値を用いて認証されます。chef-zero でも同等のファイルは必要となりますが、 .pem ファイルの key 値は無視されます。今回は chef-zero リポジトリにある playground という chef-repo 相当のサンプルを使用します。
playground 配下は以下の構成になっています。
playground
├── .chef
│ ├── knife.rb
│ └── stickywicket.pem
├── cookbooks
(以下省略)
ここの .chef ディレクトリ配下をそのまま用いることが可能ですので、ローカルマシンの chef-repo/.chef に配置します。
knife.rb の chef_server_url が 127.0.0.1 のままだと、 guest から chef-zero server に通信ができないため、具体的に host の IP アドレスを指定します。
validation_key と client_key は、両方とも playground で提供されているサンプル .pem ファイルを指定します。
chef_repo = File.join(File.dirname(__FILE__), "..")
chef_server_url "http://192.168.11.101:8889"
node_name "stickywicket"
client_key File.join(File.dirname(__FILE__), "stickywicket.pem")
cookbook_path "#{chef_repo}/cookbooks"
validation_key File.join(File.dirname(__FILE__), "stickywicket.pem")
5. knife コマンドの実行
この状態でローカルマシンの chef-repo ディレクトリで knife コマンドを実行します。
$ knife client list
chef-validator
chef-webui
内容はともかく、エラーにならずに結果が返ってきました。
6. cookbook の upload
続けてローカルの cookbook を upload します。
$ knife cookbook upload -a
Uploading apache-enable [0.2.0]
Uploading apache2 [1.6.2]
Uploading apt [1.9.2]
Uploading chef-client [2.2.2]
Uploading cron [1.2.2]
Uploaded all cookbooks.
knife cookbook list で確認します。
$ knife cookbook list
apache-enable 0.2.0
apache2 1.6.2
apt 1.9.2
chef-client 2.2.2
cron 1.2.2
正しく upload されています。
7. node の起動
次に upload された cookbook を用いて node を起動します。今回 node として Vagrant を使用しますが、Vagrant の使用方法詳細はここでは省きます。
vagrant up でゲストを起動すると、 localhost のポート 2222 で ssh 待ち受けをするので、それに対して knife bootstrap を実行します。
knife bootstrap localhost \
--ssh-user vagrant \
--ssh-password vagrant \
--ssh-port 2222 \
--run-list "recipe[chef-client]","recipe[cron]","recipe[apt]","recipe[apache2]","recipe[apache-enable]" \
--sudo
Bootstrapping Chef on localhost
localhost Starting Chef Client, version 11.2.0
...(中略)...
localhost Synchronizing Cookbooks:
localhost - chef-client
localhost - cron
localhost - apt
localhost - apache2
localhost - apache-enable
localhost Compiling Cookbooks...
...(中略)...
localhost Chef Client finished, 33 resources updated
上のとおり、 node が起動しました。
chef-zero によって、 chef-client や knife コマンドのテストもやりやすくなりました。
また、 John Keiser 氏のスライドにも USB を使ったユニークなユースケースが紹介されています。
みなさんもぜひご利用されてみてはいかがでしょうか。