2017-10-17 9 views
0

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' 

Répondre

1

La valeur du mot-clé session est censé être un objet Keystone session, mais vous passez dans une chaîne. Vous pouvez en savoir plus sur l'utilisation des sessions Keystone here.

+0

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

+0

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

+0

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