REST API сервера Chef

#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:

Итак, две проблемы:

  1. Основная проблема заключается в том, что вы заключили в кавычки "update_node" в put_rest, поэтому вы отправляете это обратно как литерал, когда сервер ожидает хэш.
  2. Вы не можете просто отправить список выполнения для PUT, вам нужно отправить полную структуру данных узла. Самый простой способ сделать это — изменить тот, который вы получаете обратно с сервера из GET.