2017-09-28 25 views
0

で使用するノード名:私は値がPT1またはPT2のいずれかに当てはまると等しいかどうかを確認するために私の属性をチェックしていますシェフのレシピ - 属性私は、次のコードを持っているシェフのレシピで

if (node['server1']['PT1'] == true) 
    setup('PT1') 
elsif (node['server1']['PT2'] == true) 
    setup('PT2') 
end 

。これはコードにをハードコードしても正しく動作しますが、これを実行しているサーバーに応じて動的に行うことを知りたいのです。どのようにnode['server1']node.nameのようなものに置き換えると、属性ファイル内の別のサーバーを見つけることができますか。私の属性の一例は:

default['server1'][...]... 
default['server2'][...]... 
default['server3'][...]... 
default['server4'][...]... 

私が動的に異なるサーバを見ることができれば、理想的な結果になるでしょう。

+0

'node'の例値、オブジェクトのクラスは何ですか? –

+0

申し訳ありませんが、私の属性は 'node'ではなく' default'で始まります。 'server1、server2、etc'と表示される属性の最初の部分である異なるサーバ名を持つことを計画しています。この計画では、サーバー名を渡して属性と照合します。 – user081608

答えて

1

あなたも、これは完全に動的に行うことができます:

node['whatever'][node.name].each do |key, value| 
    setup(key) if value == true 
end 
1

命名規則によって異なります。オハイはノード名情報を自動的に集めるようには見えませんが、多くの情報を収集します。

ホスト名やfqdnをノード名として使用するなど、ノード名の周囲に標準がある場合は、単純にその名前を問い合せることができます。

node['hostname']... node['fqdn']...

あなたのノードがどのように知っている方法ですあなたはまだあなたのノード上にあるclient.rbを照会することができ、あなたのホスト情報とは何の関係もない自分のノードに名前を付けるために、より難解な方法を使用している場合Chefサーバーに関して自分自身を識別します。 Windowsの場合はC:/chef/client.rb、UNIXの場合は/etc/chef/client.rbにあります。私はファイルの解析をあなたに任せます。

ohai(すべて利用可能なものはすべてnode)は、ブートストラップされたマシンにログオンし、シェルにohaiと入力してください。そのかなりのビットですので、テキストファイルに出力し、エディタを使ってスクロール/検索することができます。

EDIT1: テストキッチンでは、場所が変わります。あなたのノードの内容は、[「サーバが」] PT1またはPT2のいずれかであることができるならば、戻ってあなたの元の例にそれを持って来るために :それはあなたが窓とそのデフォルト値を使用して放浪を使用している場合、それはc:\users\vagrant\appdata\local\temp\kitchen\client.rb

EDIT2なり、<your kitchen cache location>\client.rb> EXなり、あなたは、次の

setup(node['server'])

を行うことができますし、メカニズムのいずれか様々な経由でどのようなサーバーの内容を制御することができます。ホスト名で制御している場合は、 recipes/default.rb ... setup(node['hostname']) のように、 attributes/default.rb ... node['server']= node['hostname'] 以上を簡単に実行できますが、通常は実行リストに定義されている別のレシピで設定するものを制御します。

+0

必要に応じて、同じホスト名に変更することができます。だから私のレシピで 'node ['hostname'] [PT1]'を実行すると、ホスト名が 'server1'の場合、' default ['server1'] ['PT1] '属性が見つかるでしょうか?私は 'default ['hostname']'で始まる実際の属性を探し、それを変換しないと考えました。 – user081608

+0

編集内容に合わせて編集する:node ['hostname']は、シェフが実行中の現在のサーバーのホスト名を返します。あなたのホスト名がserver1で、server2の同じコードが 'server2'を返すならば、 'server1'を返します。 ohaiは現在のノードのみを認識しています。 – JackChance

関連する問題