无法搜索节点在厨师食谱配方中的角色

时间:2014-03-05 08:08:53

标签: ruby chef test-kitchen

我必须在名为pg_client的菜谱配方中访问角色为hc-pg的节点的IP地址。出于测试目的,我使用的是运行列表中同时包含role[pg_client]recipe[hc-pg]的单个节点。 hc-pg有一个配方,尝试搜索角色为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"
}

我正在使用带有流浪驱动程序的测试厨房,以下是.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_client返回0节点。当第二次聚合同一节点时,我确实得到了pg_client角色的节点。所以我的假设是,在新的运行中,直到厨师收敛节点才会应用该角色。这是一个有效的假设吗?如何使用角色访问节点?

1 个答案:

答案 0 :(得分:1)

通常,在第一次运行之后,搜索查询中不会返回节点,所以它可能是不可能的。

要100%确定您还可以尝试在搜索查询中使用关键字角色(复数而非单数):

search(:node , "chef_environment:#{node.chef_environment} AND roles:pg_client")