2015-01-05 8 views
1

Я работаю над разворачиванием кластера узлов. В myrepo/cookbooks/mycookbook/.kitchen.yml У меня есть`search` не найти узлы по ролям на dev

driver: 
    name: vagrant 

provisioner: 
    name: chef_zero 
    roles_path: '../../roles' 
    environments_path: '../../environments' 
    data_bags_path: '../../data_bags' 

platforms: 
    - name: ubuntu-12.04 
    suites: 
     - name: node01 
     driver: 
      vm_hostname: "node01.localhost" 
     run_list: 
      - role[genericnode] 
     provisioner: 
      client_rb: 
       environment: development 

myrepo/cookbooks/mycookbook/recipes/default.rb В меня

nodes = [] 
search(:node, 'role:genericnode').each do |node| 
    nodes.push("http://#{node['ipaddress']}:8080") 
end 

node.default['mysetting'] = nodes.join(',') 

В моей среде разработки, хотя, поиск возвращает пустой список. Нужно ли мне больше, чем настройки .kitchen.yml, чтобы иметь доступ к ip-адресам узлов в моей сети с ролью genericnode?

Дополнительная информация:

Вот роль:

{ 
    "name": "genericnode", 
    "description": "Generic Node", 
    "json_class": "Chef::Role", 
    "default_attributes": { 

    }, 
    "override_attributes": { 

    }, 
    "chef_type": "role", 
    "run_list": [ 
    "recipe[apt::default]", "recipe[mycookbook::default]" 
    ], 
    "env_run_lists": { 

    } 
} 

ответ

1

Для поиска работы под chef_zero вам необходимо предоставить папку узлов объектов, как JSON, чтобы быть данные, что ищется. Поиск не найдет текущий узел, если он не находится на сервере (это не так, если вы не добавили его в эти узлы/папку.

Обычное исправление для этого - использовать как поиск, так и проверку локальных значений .

ips = [] 
search(:node, 'roles:genericnode').each do |n| 
    ips << n['ipaddress'] 
end 
if node['roles'].include?'(genericnode') 
    ips |= [node['ipaddress']] 
end 

node.default['mysetting'] = ips.map{|ip| "http://#{ip}:8080"}.join(',') 
+0

Это, кажется, работает Но как я могу указать IP-адрес этого узла в 'узлов/genericnode.json' Или делать это в .kitchen.yml с' сети:!? - [ «private_network» , {ip: "192.168.0.2"}] ', например? или оба? – KeatsKelleher

+0

Получил это! Вам просто нужно настроить его так:' { "name": "genericnode", "chef_type": "node ", " json_class ":" Шеф :: Узел ", "chef_environment": "развитие", "run_list": [ "роль [genericnode]"], "роль": "genericnode", "автомат": { "IPAddress": "192.168.0.2" } } ' – KeatsKelleher