Chef-dynamically-configuring-recipes

提供:Dev Guides
移動先:案内検索

Chef-レシピの動的構成

属性は、クックブックを動的に構成するための重要なコンポーネントです。 属性により、作成者はクックブックを構成可能にすることができます。 クックブックに設定されているデフォルト値をオーバーライドすることにより、ユーザーは独自の値を注入できます。

  • ステップ1 *-クックブック属性のデフォルトファイルを作成し、それにデフォルト属性を追加します。
vipin@laptop:~/chef-repo $ subl cookbooks/my_cookbook/attributes/default.rb
default['my_cookbook']['message'] = 'hello world!'
  • ステップ2 *-レシピ内の属性を定義します。
vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb
message = node['my_cookbook']['message']
Chef::Log.info("** Saying what I was told to say: #{message}")
  • ステップ3 *-変更したクックブックをアップロードします。
vipin@laptop:~/chef-repo $ knife cookbook upload my_cookbook
Uploading my_cookbook [0.1.0]
  • ステップ4 *-定義されたノードのChef-Clientを実行します。
user@server:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-01-13T20:48:21+00:00] INFO: ** Saying what I was told to
say: hello world!
...TRUNCATED OUTPUT...

作業方法

Chefは、属性ファイルからすべての属性をロードしてから実行します。 属性はノードオブジェクトとともに保存されます。 レシピ内のノードオブジェクトに格納されているすべての属性にアクセスし、現在の値を取得できます。

Chefの構造は制限されており、デフォルトの最小値から始まり、通常のセット(セットにエイリアスされます)になり、オーバーライドされます。 レシピで設定された属性レベルは、属性ファイルで設定された同じレベルよりも優先されます。

ノードおよび環境レベルでの属性のオーバーライド

ロールまたは環境で定義された属性が最も優先されます。

  • ステップ1 *-ロールを作成します。
vipin@laptop:~/chef-repo $ subl roles/german_hosts.rb
name "german_hosts"
description "This Role contains hosts, which should print out
their messages in German"
run_list "recipe[my_cookbook]"
default_attributes "my_cookbook" => { "message" => "Hallo Welt!" }
  • ステップ2 *-Chefサーバーにロールをアップロードします。
vipin@laptop:~/chef-repo $ knife role from file german_hosts.rb
Updated Role german_hosts!
  • ステップ3 *-ノードに役割を割り当てます。
vipin@laptop:~/chef-repo $ knife node edit server
"run_list": [
   "role[german_hosts]"
]
Saving updated run_list on node server
  • ステップ4 *-Chef-Clientを実行します。
user@server:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-01-13T20:49:49+00:00] INFO: ** Saying what I was told to
say: Hallo Welt!
...TRUNCATED OUTPUT...