Chef-cross-platform-cookbooks
提供:Dev Guides
シェフ-クックブックのクロスプラットフォーム
Cross-Platformクックブックは、実行する基本的な環境を採用するクックブックです。 Chefは多くの機能を提供します。これは、デプロイされるOSで実行可能なクロスプラットフォームクックブックを作成するのに役立ちます。 これにより、開発者は完全に機能するクックブックを作成できます。
これを行うには、クックブックが必要です。 私たちの場合、それはtest_cookbookとクックブック定義を含む実行リストになります。
作業方法
ノードプラットフォームの詳細を取得し、クックブックで条件ロジックを実行することは、プラットフォームに依存します。 今回のケースでは、Ubuntuでテストします。
- ステップ1 *-ノードがUbuntuの場合、メッセージを記録します。
vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
Log.info("Running on ubuntu") if node.platform['ubuntu']
- ステップ2 *-クックブックをChefサーバーにアップロードします。
vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
Uploading my_cookbook [0.1.0]
Uploaded 1 cookbook.
- ステップ3 *-ノードでChefクライアントを実行します。
user@server:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-03-03T20:07:39+00:00] INFO: Running on Ubuntu
...TRUNCATED OUTPUT...
あるいは、特定のプラットフォームに興味がなく、使用している宣言的なプラットフォームを知るだけでよい場合は、次のステートメントを使用できます。
Log.info("Running on a debian derivative") if
platform_family?('debian')
変更されたクックブックをアップロードし、UbuntuノードでChefクライアントを実行すると、次の結果が表示されます。
[2013-03-03T20:16:14+00:00] INFO: Running on a debian
derivative
スクリプトのワークフロー
上記のコマンドで、Ohaiはノードのオペレーティングシステムの現在のステータスを検出し、ノードオブジェクトと共にプラットフォーム属性として保存します。
node['platform']
または、メソッドスタイルの構文を使用することができます-
node.platform
プラットフォーム固有の値の設定
プラットフォーム固有の値を設定するために、chefは便利なメソッドvalue_for_platformおよびvalue_for_platform_familyを提供しています。 複雑なcaseステートメントを回避し、代わりに単純なハッシュを使用するために使用できます。
クックブックの例
execute "start-runsvdir" do
command value_for_platform(
"debian" => { "default" => "runsvdir-start" },
"ubuntu" => { "default" => "start runsvdir" },
"gentoo" => { "default" => "/etc/init.d/runit-start start" }
)
action :nothing
end
上記の例では、コマンドは定義されているOS固有です。
- Debianの場合、「runsvdir-start」が機能します
- Ubuntuの場合、「start runsvdir」が機能します
- Gentooの場合、「/etc/init.d/runit-start」が機能します