Chef-レシピ付きRubyGems
レシピは、基本的にRubyコードであるクックブックの主要な構成要素です。Chefレシピ内ですべてのRuby言語機能を使用することが可能です。ほとんどの場合、Rubyの組み込み機能で十分ですが、追加のRubygemを使用する必要がある場合もあります。たとえば、レシピ自体からMySQLデータベースにアクセスする必要がある場合です。
Chefレシピには、まったく同じレシピ内で使用するために必要なRubygemを取得する機能があります。
指定されたレシピでiptableGemを使用する
Step 1 −クックブックのデフォルトレシピを編集し、レシピ内で使用するgemをインストールします。
vipin@laptop:~/chef-repo $ subl
cookbooks/my_cookbook/recipes/default.rb
chef_gem 'ipaddress'
require 'ipaddress'
ip = IPAddress("192.168.0.1/24")
Chef::Log.info("Netmask of #{ip}: #{ip.netmask}")
Step 2 −変更したクックブックをChefサーバーにアップロードします。
vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook
Uploading my_cookbook [0.1.0]
Step 3 −Chefクライアントを実行して出力を確認します。
user@server $ sudo chef-client
...TRUNCATED OUTPUT...
[2013-01-18T14:02:02+00:00] INFO: Netmask of 192.168.0.1:
255.255.255.0
...TRUNCATED OUTPUT...
作業方法
Chefの実行ステップは、すべてのリソースをコンパイルするコンパイルフェーズと、Chefがリソースプロバイダーを実行してノードを目的の状態に収束する実行フェーズで構成されます。クックブック内に特定のRubygemが必要な場合は、複雑化フェーズでgemをインストールする必要があります。
chef_gemリソースはまったく同じことを行い、ChefではOmnibusが唯一の作業方法です。その主な機能は、シェフ自身が宝石を利用できるようにすることです。