使用 V3 客户端 API¶
介绍¶
Identity v3 API 中的主要概念是
通过 keystoneclient.v3.client API,您可以查询和修改 managers。 例如,要操作项目(以前称为租户),您将与 keystoneclient.v3.projects.ProjectManager 对象交互。
您可以通过 keystoneclient.v3.client.Client 对象中的属性来访问 managers。 例如,Client 对象中的 projects 属性是一个项目 manager
>>> from keystoneclient.v3 import client
>>> keystone = client.Client(...)
>>> keystone.projects.list() # List projects
虽然可以实例化一个 keystoneclient.v3.client.Client 对象(如上所示,为了清晰起见),但推荐的方法是使用 keystoneclient.client.Client 类提供的发现机制。 将根据可用的 API 版本实例化适当的类
>>> from keystoneclient import client
>>> keystone =
... client.Client(auth_url='https://:5000', ...)
>>> type(keystone)
<class 'keystoneclient.v3.client.Client'>
可以通过使用 version 关键字参数来强制使用特定版本的 API
>>> from keystoneclient import client
>>> keystone = client.Client(auth_url='https://:5000',
version=(2,), ...)
>>> type(keystone)
<class 'keystoneclient.v2_0.client.Client'>
>>> keystone = client.Client(auth_url='https://:5000',
version=(3,), ...)
>>> type(keystone)
<class 'keystoneclient.v3.client.Client'>
或者,通过直接将特定的 API 版本认证 URL 作为 auth_url 关键字参数指定
>>> from keystoneclient import client
>>> keystone =
... client.Client(auth_url='https://:5000/v2.0', ...)
>>> type(keystone)
<class 'keystoneclient.v2_0.client.Client'>
>>> keystone =
... client.Client(auth_url='https://:5000/v3', ...)
>>> type(keystone)
<class 'keystoneclient.v3.client.Client'>
成功认证后,将返回一个 keystoneclient.v3.client.Client 对象(在使用 Identity v3 API 时)。 以下提供了认证和常见任务的示例。
通常可以预期,当客户端需要传播异常时,它会引发 keystoneclient.exceptions.ClientException 的子类的实例。
使用 Session 进行认证¶
使用 Session 实例化一个 keystoneclient.v3.client.Client,以提供认证插件、SSL/TLS 证书和其他数据
>>> from keystoneauth1.identity import v3
>>> from keystoneauth1 import session
>>> from keystoneclient.v3 import client
>>> auth = v3.Password(auth_url='https://my.keystone.com:5000/v3',
... user_id='myuserid',
... password='mypassword',
... project_id='myprojectid')
>>> sess = session.Session(auth=auth)
>>> keystone = client.Client(session=sess)
有关 Session 的更多信息,请参阅:使用 Session。
获取 Metadata 响应¶
使用 include_metadata=True 实例化 keystoneclient.v3.client.Client 将导致 manager 响应返回 keystoneclient.base.Response 而不是仅仅返回数据。 元数据属性将直接提供给 keystoneclient.base.Response,响应数据将作为属性 data 提供给它。
>>> from keystoneauth1.identity import v3
>>> from keystoneauth1 import session
>>> from keystoneclient.v3 import client
>>> auth = v3.Password(auth_url='https://my.keystone.com:5000/v3',
... user_id='myuserid',
... password='mypassword',
... project_id='myprojectid')
>>> sess = session.Session(auth=auth)
>>> keystone = client.Client(session=sess, include_metadata=True)
>>> resp = keystone.projects.list()
>>> resp.request_ids[0]
req-1234-5678-...
>>> resp.data
[<Project ...>, <Project ...>, ...]
非 Session 认证(已弃用)¶
已弃用 的认证方法是传递用户名、用户域名称(如果未指定,将默认为“Default”)和密码
>>> from keystoneclient import client
>>> auth_url = 'https://:5000'
>>> username = 'adminUser'
>>> user_domain_name = 'Default'
>>> password = 'secreetword'
>>> keystone = client.Client(auth_url=auth_url, version=(3,),
... username=username, password=password,
... user_domain_name=user_domain_name)
应将 Session 传递给 Client。 使用 Session,您不仅限于使用用户名和密码进行认证,还可以利用其他更安全的认证方法。
您可以选择指定域或项目(以及其项目域名称),以获取作用域令牌
>>> from keystoneclient import client
>>> auth_url = 'https://:5000'
>>> username = 'adminUser'
>>> user_domain_name = 'Default'
>>> project_name = 'demo'
>>> project_domain_name = 'Default'
>>> password = 'secreetword'
>>> keystone = client.Client(auth_url=auth_url, version=(3,),
... username=username, password=password,
... user_domain_name=user_domain_name,
... project_name=project_name,
... project_domain_name=project_domain_name)