使用Python API创建OpenStack客户端实例时如何指定区域名称

时间:2017-10-27 10:25:07

标签: python openstack

在使用Python API创建OpenStack客户端实例时,我能够使用关键字Jinja2==2.9.6来指定区域名称。它就像:

RegionName

但是在最新版本的OpenStack中,我收到了错误消息:

  

TypeError: init ()得到了一个意外的关键字参数'RegionName'

我不得不删除RegionName参数:

novaclient.Client(Version, User, Password, Project_ID, Auth_URL, RegionName='RegionName')

但我不知道在Python程序中指定Region Name的位置。来自OpenStack官方文档, https://docs.openstack.org/python-novaclient/latest/reference/api/index.html 我找不到有关设置区域名称的任何信息。使用凭证或keystoneauth会话时,无法指定“区域名称”。与其他OpenStack客户端相同。

我的问题是如何在使用Python API创建OpenStack客户端实例时指定区域名称?感谢你的回答!

2 个答案:

答案 0 :(得分:1)

在创建nova客户端时,您需要将region_name作为关键字参数传递给提及区域。

novaclient.Client(Version, User, Password, Project_ID, Auth_URL, region_name='Region1')

以下是Nova Client类的源参考,

https://github.com/openstack/python-novaclient/blob/4707422377214829126f1d6352119ea08a7ec104/novaclient/v2/client.py#L80

答案 1 :(得分:0)

我想在这里分享我的测试结果:

使用keystoneauth会话API和Identity API v3:

from novaclient import client as novaclient
from keystoneauth1.identity import v3
from keystoneauth1 import session
auth = v3.Password(URL,username="username",password="password", project_name="admin", user_domain_id="default", project_domain_id="default")
sess = session.Session(auth=auth)
nova_client = novaclient.Client(2,  session=sess, region_name="RegionName")

很好。

使用凭据和Identity API v2:

来自novaclient import client作为novaclient nova = novaclient.Client(版本,用户,密码,Project_ID,Auth_URL_v2,region_name =' RegionName')

很好。

使用凭据和Identity API v3:

from novaclient import client as novaclient
nova=novaclient.Client(Version, User, Password,Project_ID, Auth_URL_v3, region_name='RegionName')

它实际上与错误消息不起作用:

nova.hypervisors.list()
keystoneauth1.exceptions.http.BadRequest: Expecting to find domain in user - the server could not comply with the request since it is either malformed or otherwise incorrect. The client is assumed to be in error. (HTTP 400)

所以我的结论是novaclient不支持3) - 带有凭据的Identity API V3。我们可以使用1) - 具有keystoneauth会话的Identity API v3和2) - 具有凭证的Identity API V2