Chef-scripts-for-data-bags

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

Chef-データバッグのスクリプト

特定の条件では、サーバーをChefの完全な制御下に置くことはできません。 そのような場合、スクリプトからChefデータバッグの値にアクセスする必要があります。 これを行うには、データバッグの値をJSONファイルに保存し、追加されたスクリプトがそれらの値にアクセスできるようにする必要があります。

そのためには、料理の本が必要です。 この場合、以前のようにtest_cookbookを使用し、test_cookbook定義を含むノードの実行リストが含まれている必要があります。

作業方法

  • ステップ1 *-データバッグを作成します。
vipin@laptop:~/chef-repo $ mkdir data_bags/servers
vipin@laptop:~/chef-repo $ knife data bag create servers
Created data_bag[servers]
  • ステップ2 *-データバッグアイテムを作成します。
vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json {
   "id": "storage",
   "host": "10.0.0.12"
}
  • ステップ3 *-データバッグアイテムを更新します。
vipin@laptop:~/chef-repo $ subl data_bags/servers/Storage.json {
   "id": "storage",
   "host": "10.0.0.12"
}

クックブックで使用する

  • ステップ1 *-上記のクックブックを使用してデータバッグ値を含むJSONファイルを作成し、外部スクリプトがそれらの値にアクセスできるようにする必要があります。
vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
file "/etc/backup_config.json" do
   owner "root"
   group "root"
   mode 0644
   content data_bag_item('servers', 'backup')['host'].to_json
end
  • ステップ2 *-test_cookbookをChefサーバーにアップロードします。
vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook
Uploading my_cookbook [0.1.0]
  • ステップ3 *-ノードでChefクライアントを実行します。
user@server:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-03-14T20:30:33+00:00] INFO: Processing
file[/etc/backup_config.json] action create
(my_cookbook::default line 9)
[2013-03-14T20:30:34+00:00] INFO: entered create
[2013-03-14T20:30:34+00:00] INFO:
file[/etc/backup_config.json] owner changed to 0
[2013-03-14T20:30:34+00:00] INFO:
file[/etc/backup_config.json] group changed to 0
[2013-03-14T20:30:34+00:00] INFO:
file[/etc/backup_config.json] mode changed to 644
[2013-03-14T20:30:34+00:00] INFO:
file[/etc/backup_config.json] created file
/etc/backup_config.json
...TRUNCATED OUTPUT...
  • ステップ4 *-生成されたJSONファイルのコンテンツを検証します。
user@server:~$ cat/etc/backup_config.json
"10.0.0.12"

スクリプトのワークフロー

上記のコマンドでは、 /etc ディレクトリ内にJSONファイルを作成するために使用したファイルリソースがデフォルトのクックブックで定義されています。 data_bag_itemメソッドを使用して、データバッグからファイルコンテンツを直接取得します。 データバッグアイテムからホスト値にアクセスし、JSONに変換します。 ファイルリソースは、JSON変換された値をコンテンツとして使用し、ディスクに書き込みます。