2015-11-13 96 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()獲得了關鍵字的多個值參數'密碼'「。 –