fbpx

Chefを使ってみよう [4]

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

Cookbookの各要素の確認

CookbookはRecipeなどの設定情報をひとまとめにしたものですが、ここでは各要素がどのようなものなのか、apache2のCookbookを例に確認してみます。

Attributes

Nodeの保持している、あるいはNodeに与えるデータです。

  • IPアドレス
  • ホスト名
  • OS
  • 読み込まれた kernel モジュール
  • システムで利用できるプログラム言語のヴァージョン

などはOhaiによって判定されるAutomatic Attributesとして保持され、さらに独自に指定することもできます。

apache2のAttributeでは、プラットフォームによって設定するファイル名やプロセス名などを切り替えるように記述されています。

Definitions

既存のResourceを結びつけ、再利用可能な新しいResourceを定義することができます。

apache2のDefinitionsでは、:apache_confというResourceを定義しています。これはUbuntuの場合であれば、

templates/mods/モジュール.conf.erb をテンプレートとして値を置換して /etc/apache2/mods-available/モジュール.conf ファイルを生成、ファイルモード 0644 で配置し、apache2 サービスを再起動する。

というResourceとなります。

Files

これによって指定されたファイルは、Nodeに配置するために転送することができます。

Libraries

任意の Ruby コードを含めることができ、Chef の言語を拡張したり、独自のクラスを実装したりできます。

Metadata

ChefにRecipeや依存関係、ヴァージョン制約、サポートするプラットフォームなどを伝えるのに用いられます。この情報はChef Serverに対し、CookbookをどのNodeに適用するべきかのヒントとして用いられます。将来的に、Cookbookを発見したりインストールしたりする自動化システムに不可欠となります。

Providers

Resourceを受けて、ResourceとNodeの現在の状態を比較し、Resource中の動作を行います。これによって単一のResourceで、Chefがサポートするいろいろなプラットフォーム上でのResourceの動作を可能とします。

Recipes

Recipeは、Nodeを設定するために、定義された順番で実行されるResourceの集まりをカプセル化したものです。

apache2のRecipeは、パッケージのインストール、各種ディレクトリの作成、各種設定ファイルの生成、起動などを行います。

Resources

ResourceはChefの基本的な単位で、RecipeやDefinitionに記述されたシステム設定の個々の要素で、Nodeに適用されるものです。Resourceは通常、設定しようとするホストに対してクロスプラットフォームであるように記述されます。例えば、パッケージをインストールするにはapt、yum、BSD portsなどさまざまですが、package Resourceはその差を気にせずに実行するよう記述されています。

Templates

マークアップ言語を記述したファイルにより、変数や、より複雑なロジックに基き、最終的なファイルを動的に生成できます。

apache2のTemplateでは、Definitionによって呼び出され、Attributeの値に置換されるようになっています。

chef-soloで実際にapache2 Cookbookを実行

まず、gitコマンドでapache2 Cookbookを取得します。

root@chef-solo:~# cd /root/chef-solo/cookbooks
root@chef-solo:/root/chef-solo/cookbooks# git clone git://github.com/opscode-cookbooks/apache2.git
Cloning into apache2...
remote: Counting objects: 1157, done.
remote: Compressing objects: 100% (410/410), done.
remote: Total 1157 (delta 765), reused 1064 (delta 672)
Receiving objects: 100% (1157/1157), 166.26 KiB | 101 KiB/s, done.
Resolving deltas: 100% (765/765), done.
root@chef-solo:/root/chef-solo/cookbooks# ls -la apache2/
合計 84
drwxr-xr-x 8 root root  4096 2012-04-19 20:52 .
drwxr-xr-x 4 root root  4096 2012-04-19 20:52 ..
drwxr-xr-x 8 root root  4096 2012-04-19 20:52 .git
-rw-r--r-- 1 root root  2208 2012-04-19 20:52 CHANGELOG.md
-rw-r--r-- 1 root root  1233 2012-04-19 20:52 CONTRIBUTING
-rw-r--r-- 1 root root 10850 2012-04-19 20:52 LICENSE
-rw-r--r-- 1 root root 17675 2012-04-19 20:52 README.md
drwxr-xr-x 2 root root  4096 2012-04-19 20:52 attributes
drwxr-xr-x 2 root root  4096 2012-04-19 20:52 definitions
drwxr-xr-x 3 root root  4096 2012-04-19 20:52 files
-rw-r--r-- 1 root root  8615 2012-04-19 20:52 metadata.rb
drwxr-xr-x 2 root root  4096 2012-04-19 20:52 recipes
drwxr-xr-x 3 root root  4096 2012-04-19 20:52 templates
root@chef-solo:/root/chef-solo/cookbooks#

実行するRecipeをJSON形式で定義します。

root@chef-solo:~# cat > apache2.json
{
	"run_list": [ "recipe[apache2]" ]
}
root@chef-solo:~#

事前にapache2パッケージがインストールされていないことを確認します。

root@chef-solo:~# dpkg -l apache2
apache2 に一致するパッケージが見つかりません。
root@chef-solo:~#

chef-soloを実行します。

root@chef-solo:~# chef-solo -j apache2.json
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: *** Chef 0.10.8 ***
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Setting the run_list to ["recipe[apache2]"] from JSON
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Run List is [recipe[apache2]]
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Run List expands to [apache2]
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Starting Chef Run for chef-solo
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Running start handlers
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Start handlers complete.
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Processing package[apache2] action install (apache2::default line 20)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: package[apache2] installed version 2.2.20-1ubuntu1.2
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing service[apache2] action enable (apache2::default line 25)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing directory[/etc/apache2/ssl] action create (apache2::default line 135)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/etc/apache2/ssl] created directory /etc/apache2/ssl
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/etc/apache2/ssl] owner changed to 0
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/etc/apache2/ssl] group changed to 0
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/etc/apache2/ssl] mode changed to 755
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing directory[/etc/apache2/conf.d] action create (apache2::default line 142)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing directory[/var/cache/apache2] action create (apache2::default line 149)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/var/cache/apache2] owner changed to 0
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/var/cache/apache2] group changed to 0
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[apache2.conf] action create (apache2::default line 156)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[apache2.conf] backed up to /var/chef/backup/etc/apache2/apache2.conf.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[apache2.conf] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[apache2.conf] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[security] action create (apache2::default line 172)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[security] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[security] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[security] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[charset] action create (apache2::default line 182)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/ports.conf] action create (apache2::default line 192)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/ports.conf] backed up to /var/chef/backup/etc/apache2/ports.conf.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/ports.conf] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/ports.conf] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/ports.conf] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/sites-available/default] action create (apache2::default line 201)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/sites-available/default] backed up to /var/chef/backup/etc/apache2/sites-available/default.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/sites-available/default] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/sites-available/default] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/sites-available/default] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/status.conf] action create (apache2::mod_status line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/status.conf] backed up to /var/chef/backup/etc/apache2/mods-available/status.conf.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/status.conf] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/status.conf] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/status.conf] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod status] action run (apache2::mod_status line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/alias.conf] action create (apache2::mod_alias line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod alias] action run (apache2::mod_alias line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod auth_basic] action run (apache2::mod_auth_basic line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod authn_file] action run (apache2::mod_authn_file line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod authz_default] action run (apache2::mod_authz_default line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod authz_groupfile] action run (apache2::mod_authz_groupfile line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod authz_host] action run (apache2::mod_authz_host line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod authz_user] action run (apache2::mod_authz_user line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/autoindex.conf] action create (apache2::mod_autoindex line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod autoindex] action run (apache2::mod_autoindex line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/dir.conf] action create (apache2::mod_dir line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod dir] action run (apache2::mod_dir line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod env] action run (apache2::mod_env line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/mime.conf] action create (apache2::mod_mime line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/mime.conf] backed up to /var/chef/backup/etc/apache2/mods-available/mime.conf.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/mime.conf] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/mime.conf] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/mime.conf] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod mime] action run (apache2::mod_mime line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/negotiation.conf] action create (apache2::mod_negotiation line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod negotiation] action run (apache2::mod_negotiation line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/setenvif.conf] action create (apache2::mod_setenvif line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/setenvif.conf] backed up to /var/chef/backup/etc/apache2/mods-available/setenvif.conf.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/setenvif.conf] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/setenvif.conf] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/setenvif.conf] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod setenvif] action run (apache2::mod_setenvif line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing service[apache2] action start (apache2::default line 216)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[apache2.conf] sending restart action to service[apache2] (delayed)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing service[apache2] action restart (apache2::default line 25)
[Thu, 19 Apr 2012 20:53:47 +0900] INFO: service[apache2] restarted
[Thu, 19 Apr 2012 20:53:47 +0900] INFO: Chef Run complete in 26.607405 seconds
[Thu, 19 Apr 2012 20:53:47 +0900] INFO: Running report handlers
[Thu, 19 Apr 2012 20:53:47 +0900] INFO: Report handlers complete
root@chef-solo:~#

apache2パッケージがインストールされ、

root@chef-solo:~# dpkg -l apache2
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)維持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前         バージョ   説明
+++-==============-==============-============================================
ii  apache2        2.2.20-1ubuntu Apache HTTP Server metapackage
root@chef-solo:~#

各種設定が自動的に行われ、

root@chef-solo:~# head /etc/apache2/apache2.conf
#
# Generated by Chef
#
# Based on the Ubuntu apache2.conf

ServerRoot "/etc/apache2"

#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
root@chef-solo:~# 

root@chef-solo:~# head /etc/apache2/ports.conf
#This file generated via template by Chef.
Listen 80
NameVirtualHost *:80

Listen 443
NameVirtualHost *:443

root@chef-solo:~#

apacheプロセスが起動されました。

root@chef-solo:~# ps auxwwwf | grep "[ a]pache"
root      4765  0.0  0.1  69620  2804 ?        Ss   20:53   0:00 /usr/sbin/apache2 -k start
www-data  4768  0.0  0.0  69352  1940 ?        S    20:53   0:00  \_ /usr/sbin/apache2 -k start
www-data  4769  0.0  0.1 612692  2704 ?        Sl   20:53   0:00  \_ /usr/sbin/apache2 -k start
www-data  4770  0.0  0.1 612692  2704 ?        Sl   20:53   0:00  \_ /usr/sbin/apache2 -k start
www-data  4771  0.0  0.1 612692  2704 ?        Sl   20:53   0:00  \_ /usr/sbin/apache2 -k start
root@chef-solo:~#

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA