#rest #chef-infra
#rest #шеф-инфраструктура
Вопрос:
Я изучаю Rest api Chef для целей проекта. Я могу получать, публиковать и удалять данные узла / node-data. Но я не могу выполнить запрос PUT, т. Е. обновить данные, связанные с узлом, на сервере. Вот снимок экрана ошибки, которую я получаю.
Ниже приведен код, который выполняет запрос. Я правильно указал параметры аутентификации, и они работают должным образом.
rest = Chef::REST.new(server_url, client_name, signing_key_filename)
print "Enter the node you want to edit :n"
editnode = gets.chomp
node = rest.get_rest("/nodes/#{editnode}")
print "#{node.name}n"
print "t#{node.run_list}n"
print "Now updating the node as per the parameters specified :n"
update_node = {
"run_list" => "recipe[123]"
}
rest.put_rest("nodes/#{editnode}","update_node")
Пожалуйста, предложите какое-нибудь решение.
Комментарии:
1. Ваш URL-адрес действительно googler ? Кроме того, было бы полезно иметь stacktrace в виде открытого текста вместо скриншота
2. Похоже, ты кодируешь на Ruby? Используйте превосходный камень Ridley вместо прямого вызова REST API: github.com/RiotGames/ridley
3. @sethvargon Да. На самом деле я запускаю сервер на своей локальной виртуальной машине центра обработки данных и установил это в качестве полного доменного имени. Я добавил то же самое в файл hosts на своей рабочей станции, поэтому могу получить к нему доступ с этим именем.
Ответ №1:
Итак, две проблемы:
- Основная проблема заключается в том, что вы заключили в кавычки
"update_node"
в put_rest, поэтому вы отправляете это обратно как литерал, когда сервер ожидает хэш. - Вы не можете просто отправить список выполнения для PUT, вам нужно отправить полную структуру данных узла. Самый простой способ сделать это — изменить тот, который вы получаете обратно с сервера из GET.