2014-07-03 7 views
1

wJ'explore le rest api de Chef à des fins de projet. Je suis capable d'obtenir, d'afficher et de supprimer des données de nœud/nœud. Mais je ne suis pas en mesure d'exécuter la requête PUT, c'est-à-dire de mettre à jour les données relatives au nœud sur le serveur. Voici la capture d'écran de l'erreur que je reçois. enter image description hereChef REST API REST

Voici le code qui effectue la demande. J'ai correctement spécifié les paramètres d'authentification et ils fonctionnent correctement.

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")  

Veuillez suggérer une solution.

+0

Votre URL est-elle vraiment https: // googler? En outre, il serait utile d'avoir le stacktrace en texte clair au lieu d'une capture d'écran – sethvargo

+0

On dirait que vous codez dans Ruby? Utilisez l'excellent Ridley gem au lieu d'appeler l'API REST directement: https://github.com/RiotGames/ridley –

+0

@sethvargon Ouais. En fait, je cours le serveur sur mon centre de données local vm, et l'ai défini comme le nom de domaine complet. + J'ai ajouté la même chose au fichier hosts sur mon poste de travail, donc je peux y accéder avec ce nom. – tortuga

Répondre

3

donc deux questions:

  1. Le principal problème est que vous avez cité "update_node" dans le put_rest si vous envoyez ce retour comme un littéral, lorsque le serveur attend un hachage.
  2. Vous ne pouvez pas simplement envoyer la liste d'exécution pour le PUT, vous devez envoyer une structure de données de nœud complet. Le moyen le plus simple de le faire est de modifier celui que vous récupérez du serveur depuis le GET.