使用 V2 客户端 API

介绍

Identity v2 API 中的主要概念是

  • 租户 (tenants)

  • users

  • roles

  • services

  • endpoints

V2 客户端 API 允许您通过管理器查询和进行更改。例如,要操作租户,您将与 keystoneclient.v2_0.tenants.TenantManager 对象交互。

您通过 keystoneclient.v2_0.client.Client 对象的属性访问管理器。例如,Client 类的 tenants 属性是一个租户管理器

>>> from keystoneclient.v2_0 import client
>>> keystone = client.Client(...)
>>> keystone.tenants.list() # List tenants

您通过将 Session 传递给构造函数来创建一个有效的 keystoneclient.v2_0.client.Client 对象。以下提供了身份验证和常见任务的示例。

通常可以预期,当客户端需要传播异常时,它会引发 keystoneclient.exceptions.ClientException 子类的实例

身份验证

有两种方式可以对 keystone 进行身份验证
  • 使用管理员令牌 (admin token) 对管理员端点进行身份验证

  • 使用用户名和密码对公共端点进行身份验证

如果您是管理员,可以通过连接到管理员端点并使用管理员令牌(有时也称为服务令牌)进行身份验证。令牌在您的 keystone.conf 配置文件中指定为 admin_token 配置选项,该文件通常位于 /etc/keystone

>>> from keystoneauth1.identity import v2
>>> from keystoneauth1 import session
>>> from keystoneclient.v2_0 import client
>>> token = '012345SECRET99TOKEN012345'
>>> endpoint = 'http://192.168.206.130:35357/v2.0'
>>> auth = v2.Token(auth_url=endpoint, token=token)
>>> sess = session.Session(auth=auth)
>>> keystone = client.Client(session=sess)

如果您有用户名和密码,则身份验证是在公共端点完成的。您还必须指定与用户关联的租户

>>> from keystoneauth1.identity import v2
>>> from keystoneauth1 import session
>>> from keystoneclient.v2_0 import client
>>> username='adminUser'
>>> password='secretword'
>>> tenant_name='openstackDemo'
>>> auth_url='http://192.168.206.130:5000/v2.0'
>>> auth = v2.Password(username=username, password=password,
...                    tenant_name=tenant_name, auth_url=auth_url)
>>> sess = session.Session(auth=auth)
>>> keystone = client.Client(session=sess)

创建租户

此示例将创建一个名为 openstackDemo 的租户

>>> from keystoneclient.v2_0 import client
>>> keystone = client.Client(...)
>>> keystone.tenants.create(tenant_name="openstackDemo",
...                         description="Default Tenant", enabled=True)
<Tenant {'id': '9b7962da6eb04745b477ae920ad55939', 'enabled': True, 'description': 'Default Tenant', 'name': 'openstackDemo'}>

创建用户

此示例将在 openstackDemo 租户中创建一个名为 adminUser 的用户,密码为 secretword。 我们首先需要检索租户

>>> from keystoneclient.v2_0 import client
>>> keystone = client.Client(...)
>>> tenants = keystone.tenants.list()
>>> my_tenant = [x for x in tenants if x.name=='openstackDemo'][0]
>>> my_user = keystone.users.create(name="adminUser",
...                                 password="secretword",
...                                 tenant_id=my_tenant.id)

创建角色并添加用户

此示例将创建一个管理员角色,并将 my_user 用户添加到该角色,但仅针对 my_tenant 租户

>>> from keystoneclient.v2_0 import client
>>> keystone = client.Client(...)
>>> role = keystone.roles.create('admin')
>>> my_tenant = ...
>>> my_user = ...
>>> keystone.roles.add_user_role(my_user, role, my_tenant)

创建服务和端点

此示例将为 Compute 服务创建服务和相应的端点

>>> from keystoneclient.v2_0 import client
>>> keystone = client.Client(...)
>>> service = keystone.services.create(name="nova", service_type="compute",
...                                    description="Nova Compute Service")
>>> keystone.endpoints.create(
...     region="RegionOne", service_id=service.id,
...     publicurl="http://192.168.206.130:8774/v2/%(tenant_id)s",
...     adminurl="http://192.168.206.130:8774/v2/%(tenant_id)s",
...     internalurl="http://192.168.206.130:8774/v2/%(tenant_id)s")