поиск узла ничего не дает в тестовой кухне

Нет выхода из поиска на тестовой кухне

Выдает ошибку, проверьте рецепт и предложите мне некоторые детали

JSON-файл узла

{
    "id": "cldb",
    "chef_type": "node",
    "json_class": "Chef::Node",
    "run_list": [],
    "automatic": {
        "hostname": "cldb.net",
        "fqdn":"127.0.0.1",
        "name": "cldb.net",
        "ipaddress": "127.0.0.1",
        "roles": [],
        "cldb" : true
    }
}

Рецепт


cldbNodes = search(:node, "cldb:true")

cldb = "#{cldbNodes["fqdn"]}"

file '/tmp/test.txt' do
    content "#{cldb}"
end

person Udhay    schedule 01.03.2017    source источник
comment
Как у вас настроена конфигурация kitchen.yml и по какому пути находится файл узла JSON?   -  person coderanger    schedule 02.03.2017
comment
--- драйвер: имя: vagrant provisioner: имя: chef_zero #nodes_path: test/integration/nodes environments_path: test/integration/default/environments client_rb: environment: test always_update_cookbooks: true verifier: name: inspec platform: - name: centos- Наборы 7.2: - имя: nodesearch run_list: - recipe[nodesearch-cookbook::nodesearch_mapr]   -  person Udhay    schedule 02.03.2017
comment
nodes_path: тест/интеграция/узлы   -  person Udhay    schedule 02.03.2017
comment
Хорошо, а какой полный путь к файлу JSON?   -  person coderanger    schedule 02.03.2017
comment
/поваренная книга/тест/интеграция/узлы/cldb.json   -  person Udhay    schedule 02.03.2017
comment
Будет ли это работать, если вместо этого вы сделаете cldbNodes.first['fqdn']? Поиск обычно возвращает массив, а не один объект.   -  person coderanger    schedule 02.03.2017
comment
вывод: cldbNodes['fqdn']   -  person Udhay    schedule 02.03.2017
comment
В файле выводится cldbNodes['fqdn']   -  person Udhay    schedule 02.03.2017
comment
Да, это строка, а не выражение кода Ruby. Если вы не знакомы с синтаксисом Ruby, возможно, вам придется изучить его, прежде чем работать с Chef.   -  person coderanger    schedule 02.03.2017
comment
мне нужен только массив   -  person Udhay    schedule 02.03.2017
comment
cldb = #{cldbNodes['fqdn']}[0] я изучил рубин   -  person Udhay    schedule 02.03.2017
comment
Опять же, cldbNodes — это массив, поэтому вам нужно cldb = cldbNodes[0]['fqdn'] или cldb = cldbNodes.first['fqdn']   -  person coderanger    schedule 02.03.2017
comment
Извините #cldbList = Array.new() #cldbNodes.each do |cldb| # cldbList += cldb # i +=1 #end   -  person Udhay    schedule 02.03.2017
comment
прокомментировал эту часть забыл   -  person Udhay    schedule 02.03.2017


Ответы (1)


Подводя итог комментариям выше, search(...) возвращает массив, поэтому вам нужно получить определенный элемент, обычно первый, прежде чем вы сможете получить доступ к данным узла.

Используя приведенный выше пример, это будет что-то вроде:

cldbNodes = search(:node, "cldb:true")

cldb = cldbNodes.first["fqdn"]

file '/tmp/test.txt' do
    content cldb
end
person coderanger    schedule 02.03.2017
comment
Теперь проблема в cldbList += cldb - person Udhay; 02.03.2017
comment
неопределенный метод `[]' для nil:NilClass для - person Udhay; 02.03.2017
comment
i = 0 cldbList = cldbNodes.each do |cldb| cldbList += cldb[i]['hostname'] i +=1 конец - person Udhay; 02.03.2017
comment
я хочу сохранить массив cldbNodes['hostname'] в отдельной переменной - person Udhay; 02.03.2017