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」が機能します