2015-11-13 103 views
2

试图遵循一个简单的openstack python API教程,我在http://docs.openstack.org/developer/python-novaclient/api.html找到,但似乎没有工作。当我试图从Python解释器教程运行openstack:novaclient Python API不能正常工作

nova.servers.list() 

nova.flavors.list() 

,我得到以下错误:

File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/dist-packages/novaclient/v2/servers.py", line 617, in list 
    return self._list("/servers%s%s" % (detail, query_string), "servers") 
    File "/usr/lib/python2.7/dist-packages/novaclient/base.py", line 64, in _list 
    _resp, body = self.api.client.get(url) 
    File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 440, in get 
    return self._cs_request(url, 'GET', **kwargs) 
    File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 399, in _cs_request 
    self.authenticate() 
    File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 569, in authenticate 
    self._v2_auth(auth_url) 
    File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 634, in _v2_auth 
    return self._authenticate(url, body) 
    File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 647, in _authenticate 
    **kwargs) 
    File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 392, in _time_request 
    resp, body = self.request(url, method, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/novaclient/client.py", line 386, in request 
    raise exceptions.from_response(resp, body, url, method) 
novaclient.exceptions.NotFound: The resource could not be found. (HTTP 404) 

我使用的是相同的凭据admin_openrc。嘘,这是有效的。无法弄清楚可能是什么问题。

+0

你验证您的keystone身份验证运行正常吗? – idjaw

+0

这是因为使用CLI实用工具而不是python API工作正常。 –

+0

尝试使用novaclient API时,您是通过keystone设置凭证并创建会话吗?或直接到novaclient?您可以检查CLI以查看它使用什么auth方法来查看有什么不同。 – idjaw

回答

0

解决了这个问题:不知道为什么,openstack在auth中抱怨缺少用户域(不记得确切的消息错误)。找不到如何在nova中通知用户域,但我确实发现它在keystone上!

from keystoneclient.auth.identity import v3 
from keystoneclient import session 
from keystoneclient.v3 import client 
auth_url = 'http://10.37.135.89:5000/v3/' 
username = 'admin' 
user_domain_name = 'Default' 
project_name = 'admin' 
project_domain_name = 'Default' 
password = '123456' 
auth = v3.Password(auth_url=auth_url, 
        username=username, 
        password=password, 
        project_id='d5eef1aae54742e787d0653eea57254b', 
        user_domain_name=user_domain_name) 
sess = session.Session(auth=auth) 
keystone = client.Client(session=sess) 
keystone.projects.list() 

,之后我用梯形用于验证的新星:

from novaclient import client 
nova = client.Client(2, session=keystone.session) 
nova.flavors.list() 

,我用这个回答一些有用的链接:

http://docs.openstack.org/developer/python-keystoneclient/authentication-plugins.html http://docs.openstack.org/developer/python-keystoneclient/using-api-v3.html http://docs.openstack.org/developer/python-novaclient/api.html

1

您正在使用python-novaclient作为库,它从来没有被设计为以这种方式使用。人们不幸使用这种CLI作为图书馆。

试试官方的Python OpenStack SDK。

pip install openstacksdk 

列出服务器或口味的代码。

import sys 

from openstack import connection 
from openstack import profile 
from openstack import utils 

utils.enable_logging(True, stream=sys.stdout) 

prof = profile.Profile() 
prof.set_region(prof.ALL, 'RegionOne') 

conn = connection.Connection(
    auth_url='http://my.openstack.com:5000/v2.0', 
    profile=prof, 
    username='demo', 
    project_name='demo', 
    password='demo') 

for server in conn.compute.servers(): 
    print(server) 

for flavor in conn.compute.flavors(): 
    print(flavor) 

更多信息,可能是也有帮助:

+0

在你发送的两个链接上,我收到了这个错误:“期望在项目中找到域名 - 服务器无法遵守请求,因为它的格式不正确或者不正确,客户端被认为是错误的。”如何在连接期间通知域名? –

+0

我不完全确定你的意思是“你发送的这两个链接”。你能分享你正在使用的代码和堆栈跟踪吗?[gist](https://gist.github.com/)或者什么? –

0

从你的描述,CLI工作正常,但脚本/解释器失败,所以它肯定是因为你以错误的方式初始化novaclient.client.Client。

novaclient.client.Client的使用取决于你使用的是什么版本的,但你的问题并没有提供这样的信息,所以目前我不能为你提供一个例子,你可以通过运行命令“新星检查 - -版'。

你可以从开发文档帮助蟒蛇,novaclient http://docs.openstack.org/developer/python-novaclient/api.html

请记住,这是一个很好的做法,而不是使用正常的说法,这意味着

nc = client.Client(version=2, user='admin', password='password', 
        project_id='12345678', auth_url='http://127.0.0.1:5000') 

关键字参数被鼓励,但它当您尝试以错误的方式做某事时会暴露问题。

+0

当我运行nova --version时得到了2.31.0,当我用建议的关键字(使用正确的用户,密码和project_id)运行命令时,我得到这个错误:“TypeError:_construct_http_client()获得了关键字的多个值参数'密码'“。 –