Шеф-повар: "поиск" не находит узлы по роли в dev

Я работаю над раскруткой кластера узлов. В myrepo/cookbooks/mycookbook/.kitchen.yml я имею

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 ответ

На StackOverflow ответили, скопировав ответ для записи:

Чтобы поиск работал в 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(',')
Другие вопросы по тегам