Chef-solo-quickstart is a project mainly written in Ruby, it's free.
Quick start to learn chef's DSL with chef-solo
vagrant up
下記のコマンドが chef-solo を実行するコマンドだ。 これから、このコマンドを実行するための材料を作っていく。
chef-solo -c ~/solo.rb -j node.json
chef-solo のオプションはそれぞれ下記の通り。
-c, --config CONFIG
-j, --json-attributes JSON_ATTRIBS
-r, --recipe-url RECIPE_URL
sudo -s
file_cache_path "/root/chef-solo"
cookbook_path "/root/chef-solo/cookbooks"
{
"resolver": {
"nameservers": [ "10.0.0.1" ],
"search":"int.example.com"
},
"run_list": [ "recipe[resolver]" ]
}
solo.rb
で指定した、cookbook_path
ディレクトリ配下に、cookbook を配置しておく。
今回は、resolver を使用するので、resolver を配置しておく。
git clone https://github.com/opscode/cookbooks.git opscode-cookbooks
cp -r opscode-cookbooks/resolver chef-solo/cookbooks
vagrant ~ # chef-solo -c solo.rb -j node.json
[Sat, 04 Jun 2011 03:22:13 -0700] INFO: Setting the run_list to ["recipe[resolver]"] from JSON
[Sat, 04 Jun 2011 03:22:13 -0700] INFO: Starting Chef Run (Version 0.9.12)
[Sat, 04 Jun 2011 03:22:13 -0700] INFO: Chef Run complete in 0.011504 seconds
[Sat, 04 Jun 2011 03:22:13 -0700] INFO: cleaning the checksum cache
[Sat, 04 Jun 2011 03:22:13 -0700] INFO: Running report handlers
[Sat, 04 Jun 2011 03:22:13 -0700] INFO: Report handlers complete
vagrant ~ #
mkdir -p chef-solo/cookbooks/main/recipes
vim chef-solo/cookbooks/main/recipes/default.rb
chef-solo/cookbooks/main/recipes/default.rb
directory "/this/is/very/nested/directory" do
owner "root"
group "root"
recursive true
end
file "/tmp/something" do
owner "root"
group "root"
mode "0755"
action :delete
end
chef-solo
だけで)同じことができる様にする。オプションを指定せず、chef-solo
を実行しても、さっきの chef-solo -c solo.rb -j node.json
と同じ事ができるようにしてみる。
mkdir /root/wwwroot
mv node.json wwwroot
cd chef-solo
tar czf ../wwwroot/chef-solo.tgz cookbooks
cd ../
rm -rf chef-solo
これで-c solo.rb
が不要になる。
mkdir /etc/chef/
mv solo.rb /etc/chef
vi /etc/chef/solo.rb
/etc/chef/solo.rb の中身
file_cache_path "/root/chef-solo" cookbook_path "/root/chef-solo/cookbooks" json_attribs "http://localhost:8000/node.json" recipe_url "http://localhost:8000/chef-solo.tgz"
8000番ポートで、HTTP サーバが起動し、wwwroot 配下が公開される。
cd wwwroot
python -m SimpleHTTPServer
chef-solo
mkdir chef-solo/roles
vim chef-solo/roles/test.rb
chef-solo/roles/test.rb
name 'test'
description 'This is just a test role, no big deal.'
run_list(
'recipe[main]'
)
いろいろなところで参照する変数みたいなもん。 Attributes は様々なレベルで設定される。
Resources は Puppet で言う Type みたいなもの。インフラを記述する基本単位。これが Chef DSLの超ベースの部分。
レシピは関係性の深い定義をセットにしたもの。Pupppet のモジュールに対応する。
例えば、apache のレシピでは、apache の package のインストールや、 httpd.conf の template(=httpd.conf.erb)、その
template の中で使われる属性値(=Attribute)のファイルが下記のような感じで配置される。
apache2/attributes/default.rb
apache/recipes/default.rb
apache/templates/default/httpd.conf.erb
Cookbook は Recipe を集めたもの。つまりレシピ集。