J'ai transmis l'objet session d'une autre classe (en utilisant des cookies Cherrypy) et j'ai reconstruit l'instance Nova dans cette classe pour lister les serveurs. L'instance Nova reconstruite fonctionne cependant quand j'essaye de créer une liste de serveurs, j'ai une erreur d'attribut. Il y a très peu (je n'ai rien trouvé de plus éloigné de ce problème) sur Internet à propos de ce genre de problème. Comment résoudre ce problème? :)Liste des serveurs - API OpenStack Nova
code:
import cherrypy
import xmlrpclib
import xml.etree.ElementTree as ET
from keystoneauth1 import loading
from keystoneauth1 import session
import novaclient.client as client
from socket import gethostbyaddr
nova = client.Client("2.1", session=cherrypy.request.cookie.get('sessCookie').value)
serverList = nova.servers.list()
print serverList
Erreur:
File "/usr/lib/python2.7/site-packages/cherrypy/_cprequest.py", line 656, in respond
response.body = self.handler()
File "/usr/lib/python2.7/site-packages/cherrypy/lib/encoding.py", line 188, in __call__
self.body = self.oldhandler(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/cherrypy/lib/jsontools.py", line 61, in json_handler
value = cherrypy.serving.request._json_inner_handler(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/cherrypy/_cpdispatch.py", line 34, in __call__
return self.callable(*self.args, **self.kwargs)
File "/var/www/frontend/controllers/api/vm.py", line 158, in GET
serverList = nova.servers.list()
File "/usr/lib/python2.7/site-packages/novaclient/v2/servers.py", line 749, in list
"servers")
File "/usr/lib/python2.7/site-packages/novaclient/base.py", line 242, in _list
resp, body = self.api.client.get(url)
File "/usr/lib/python2.7/site-packages/keystoneauth1/adapter.py", line 173, in get
return self.request(url, 'GET', **kwargs)
File "/usr/lib/python2.7/site-packages/novaclient/client.py", line 89, in request
**kwargs)
File "/usr/lib/python2.7/site-packages/keystoneauth1/adapter.py", line 331, in request
resp = super(LegacyJsonAdapter, self).request(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/keystoneauth1/adapter.py", line 98, in request
return self.session.request(url, method, **kwargs)
AttributeError: 'str' object has no attribute 'request'
Comme je passe 'sessCookie' qui est classé comme une chaîne? Je suis plutôt nouveau à cela, donc excuses pour mon incompétence, encourage Matt :) – MRichards
Oui, il semble que vous essayez de passer dans une chaîne où vous avez réellement besoin de passer dans un objet de session. Vous pouvez bien sûr vérifier cela en utilisant, par exemple, le débogueur Python pour inspecter la valeur de 'cherrypy.request.cookie.get ('sessCookie'). Value', mais comme les cookies sont généralement des chaînes, cela semble être un pari sûr. – larsks
Je pense que je comprends votre point, mais quand je le fais: 'cherrypy.request.cookie.get ('nom'). Value', il obtient la valeur dans le cookie appelé 'nom'. Donc, la même chose devrait être fait avec sessCookie? J'ai passé l'objet session en faisant ce qui suit: 'cherrypy.response.cookie ['sessCookie'] = sess' – MRichards