0
我已经从另一个类(使用Cherrypy cookies)传递了会话对象,并重建了此类中的Nova实例以列出服务器。然而,当我尝试创建一个服务器列表时,重建的Nova实例可以正常工作,但我有一个属性错误。这种问题很少(我没有在这个问题上发现任何东西)在互联网上。 我该如何解决这个问题? :)列表服务器 - OpenStack Nova API
代码:
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
错误:
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'
正如我在传递被分类为字符串的'sessCookie'?我对此很陌生,因此对我的无能表示歉意,欢呼马特:) – MRichards
是的,看起来您正尝试传递一个字符串,您实际上需要传递一个会话对象。例如,你可以通过使用Python调试器检查'cherrypy.request.cookie.get('sessCookie').value'的值来验证,但由于cookie通常是字符串,所以这似乎是一个安全的选择。 – larsks
我想我明白你的意思,但是当我这样做时: 'cherrypy.request.cookie.get('name').value',它获得了名为'name'的cookie内的值。那么sessCookie也应该这样做? 如果有帮助,我已经通过会话对象执行以下操作: 'cherrypy.response.cookie ['sessCookie'] = sess' – MRichards