在使用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客户端实例时指定区域名称?感谢你的回答!
答案 0 :(得分:1)
在创建nova客户端时,您需要将region_name
作为关键字参数传递给提及区域。
novaclient.Client(Version, User, Password, Project_ID, Auth_URL, region_name='Region1')
以下是Nova Client类的源参考,
答案 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:
很好。
使用凭据和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