1

我必须访问一个节点的 IP 地址,该节点pg_client在名为hc-pg. 出于测试目的,我使用了一个在运行列表中同时具有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角色的节点。所以我的假设是,在新的运行中,在厨师收敛节点之前不会应用角色。这是一个有效的假设吗?那么如何访问具有角色的节点呢?

4

1 回答 1

1

通常,节点在第一次运行之后才会在搜索查询中返回,因此这可能是不可能的。

只是为了 100% 确定您也可以尝试在搜索查询中使用关键字角色(复数而不是单数):

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