【问题标题】:Listing Servers - OpenStack Nova API列出服务器 - OpenStack Nova API
【发布时间】:2017-10-17 15:13:12
【问题描述】:

我已经从另一个类(使用 Cherrypy cookie)传递了会话对象,并在这个类中重建了 Nova 实例以列出服务器。重建的 Nova 实例有效,但是当我尝试创建服务器列表时,出现属性错误。互联网上关于此类问题的信息很少(我没有发现任何与此问题类似的东西)。 我该如何解决这个问题? :)

代码:

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'

【问题讨论】:

    标签: python openstack cherrypy openstack-nova keystone


    【解决方案1】:

    session 关键字的值应该是 Keystone session 对象,但您传入的是字符串。

    您可以阅读有关使用 Keystone 会话 here 的更多信息。

    【讨论】:

    • 就像我正在传递被归类为字符串的'sessCookie'?我对此很陌生,所以为我的无能道歉,马特欢呼:)
    • 是的,您似乎正在尝试传入一个实际上需要传入会话对象的字符串。您当然可以通过例如使用 Python 调试器检查 cherrypy.request.cookie.get('sessCookie').value 的值来验证这一点,但由于 cookie 通常是字符串,这似乎是一个安全的选择。
    • 我想我明白你的意思,但是当我这样做时:cherrypy.request.cookie.get('name').value,它会获取名为“名称”的 cookie 中的值。那么sessCookie也应该做同样的事情吗?如果有帮助,我已通过会话对象执行以下操作:cherrypy.response.cookie['sessCookie'] = sess
    • Cookie 通常只是存储在浏览器中的文本字符串。我认为您无法使用 cookie 来传输这样的 Python 对象。
    • 现在我明白你在说什么了 :) 那么我有什么替代方法来存储会话对象,以便它可以“传递”到其他类/方法以在其他地方使用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2018-01-19
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多