使用 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")