1

pg_clientという名前のクックブック レシピのロールを持つノードの IP アドレスにアクセスする必要がありますhc-pgrole[pg_client]テスト目的で、ランリストにとの両方を持つ単一のノードを使用していますrecipe[hc-pg]hc-pgrole でノードを検索しようとするレシピがありますpg_client。レシピコードは次のとおりです。

ruby_block "searchnode" do
  block do
   pg_client_nodes = search(:node , "chef_environment:#{node.chef_environment} AND role:pg_client")
  end
end

以下は pg_client.json ファイルです

{
"name" : "pg_client",
"description" : "Client which connects to postgres server"
}

vagrant ドライバーでテスト キッチンを使用しています。以下は .kitchen.yml です。

---
driver:
  name: vagrant

provisioner:
  name: chef_zero

platforms:
  - name: precise64
    driver:
     box: precise64-chef

suites:
  - name: default
    roles_path: ../../roles
    run_list:
      - role[pg_client]
      - recipe[hc-pg]
    attributes:
     postgresql:
      config:
       listen_addresses: "*"

実行リストのレシピの前に役割について言及しました。初めてノードを収束させると、検索でpg_client0 ノードが返されます。同じノードが 2 回目に収束されると、pg_client役割を持つノードが取得されます。したがって、私の仮定では、新たに実行すると、シェフがノードを収束するまでロールは適用されません。これは有効な仮定ですか?ロールを使用してノードにアクセスするにはどうすればよいですか?

4

1 に答える 1

1

通常、ノードは最初の実行後まで検索クエリで返されないため、おそらく不可能です。

100% 確実にするために、検索クエリでキーワードの役割(単数形ではなく複数形) を使用することもできます。

search(:node , "chef_environment:#{node.chef_environment} AND roles:pg_client")
于 2014-03-06T17:36:06.820 に答える