2014-03-05 2 views
1

역할이있는 노드의 IP 주소에 hc-pg라는 요리 책 레서피에있는 pg_client에 액세스해야합니다. 테스트 목적으로 나는 실행 목록에 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 역할을 가진 노드를 얻는다. 그래서 내 생각에 신선한 실행에서는 셰프가 노드를 수렴 할 때까지 역할이 적용되지 않습니다. 이것은 유효한 가정입니까? 그런 다음 역할이있는 노드에 어떻게 액세스합니까?

+0

* 후 * 최초의 요리사 실행이 성공 :

그냥 검색 쿼리 100 % 당신은 또한 키워드를 역할를 사용하여 시도 할 수 있는지 (복수가 아닌 단수)이 될 수 있습니다 – sethvargo

+0

내 방법이 유효합니까? 나는 셰프 내에서 그 역할을 사용하고 싶습니다. 나의 유스 케이스는 역할'pg_client'를 가진 노드의 IP 주소를 얻는 것이다. 프로비저닝중인 동일한 노드가 될 수 있습니다. – Vaibhav

+0

무슨 뜻인지 모르겠다. 역할이 적용될 때까지 적용된 역할을 검색 할 수 없습니다. – sethvargo

답변

1

일반적으로 노드는 처음 실행될 때까지 검색 쿼리에 반환되지 않으므로 불가능할 수 있습니다.

이 역할이 될 때까지 적용되지 않습니다
search(:node , "chef_environment:#{node.chef_environment} AND roles:pg_client")