web-dev-qa-db-ja.com

Chefで実行時にパラメーターを渡す方法はありますか?

実行時にいくつかの属性をchef-clientに渡したかった。同じことをする方法はありますか?私はchef-client -jオプションを調べていましたが、私の知る限り、それを使用してrun_listを指定できます。いくつかの属性を渡すことはできますか?はいの場合、どのように?

6
Manak Wadhwa

はい、-j jsonファイルオプションを使用してノード属性を設定できます。

{
  "my_attribute": "I like attributes!"
}

これにより、my_attributeという名前の属性がクックブックで使用できるようになります。例えば、

Chef::Log.info(node['my_attribute'])

または、

if node['my_attribute'] =~ /like/
  package "foo-likes-attributes" do
    action :install
  end
end

初期run_listの設定は、Chef Clientのjson属性ファイルの最も一般的な使用法です。ただし、Chef Client + Chef Serverを使用している場合は、webui(オープンソースChef Server)または管理コンソール(Opscode Hosted/Private Chef)を介して、またはknife node editを介してサーバー上のノードオブジェクトを変更できます。コマンドラインツール、ナイフを使用します。

JSONファイルの使用は、サーバー上のノードオブジェクトを変更するようなものであり、ここで設定された属性は、レシピで使用されるときのように「通常」の優先順位であり、これらの属性値はNodeオブジェクトに保存されます。正常な実行の最後にサーバー上で。

9
jtimberman

コマンドラインでそれを行うことができますが、特にナイフの実行では、それは非常に不気味に見え始めます:

_chef-client \
  -o vmware-tools \
  --force-formatter \
  -j '<(echo {\"vmware-tools\":{\"style\":\"rpm\"}})'
_

しかし、ここでは、-jと<(notation)を利用して、ナイフ(またはここではssh-i)を介してアーティファクトを投げ込んだJSONファイルをオンザフライで作成しています。あなたがそれをしなければならない場合、リスクは、競合する区切り文字があなたがそれを機能させる頃に狂ってしまうことです。

1
user2066657

属性を使用する理想的な方法は、クックブックまたはデータバッグに属性を書き込むことです。いずれかのファイルの場所は次のとおりです。

Chef Repoディレクトリのレイアウト

|- chef-repo
|---- cookbooks
|------- attributes
|---------- default.rb
|------- recipes
|---------- default.rb
|---- data_bags
|------- users
|---------- john.json
|---------- susan.json
|------- databases
|----------- master.json
|----------- slave.json

データを基本的なJSON形式でデータバッグファイルに保存できます(knife create data_bag users)。

Johnのユーザーデータバッグを作成します。

$ knife data bag create users john

{
  "id" : "john"
  "age" : "27"
  "height" : "60in"
}

データバッグの使用

データバッグを使用することを選択した場合(このコンテキストでは、さまざまなユーザーまたはデータベースサーバーが多数ある場合は、これらをお勧めします)、詳細情報を https://docs.getchef.com/dsl_recipe_method_data_bagで確認できます) .html 。さらに、data_bagsディレクトリにusersディレクトリを作成し、そこにユーザー.jsonファイル(〜/ chef-repo/data_bags/users/john.json)を上記の内容で作成してからアップロードする方が簡単です。 chefサーバーへのデータバッグ:knife data bag from file users /path/to/data_bags/users/john.json

属性の使用

属性ファイルにデータを保存することもできます。

属性ファイル

$ vi ~/chef-repo/cookbooks/my-cookbook-name/attributes/default.rb

default['my-cookbook-name']['user-1'] = "John"
default['my-cookbook-name']['user-1']['age'] = "27"
default['my-cookbook-name']['user-1']['height'] = "60in"

クックブックレシピ

$ vi ~/chef-repo/cookbooks/my-cookbook-name/default.rb

template "/root/user-list" do
  action :create
  source "user-list.erb"
end

user-list.erb

$ vi ~/chef-repo/cookbooks/my-cookbook-name/templates/default/user-list.erb

<html>
<head>
 <title>My User List</title>
</head>
<body>
<h1>User List</h1>
User 1: <%= node['my-cookbook-name']['user-1'] %>
User Age: <%= node['my-cookbook-name']['user-1']['age'] %>
User Height: <%= node['my-cookbook-name']['user-1']['height'] %>
</body> 
</html>
1
KLaw