概述:
随着Keystone的发展,对于multi domains支持的进一步完善,federation features进一步实现,关于multi domain backends的管理以及user , group的管理,因为机制的不同,出现了一些问题。
原有user , group存储在本地的数据库中,通过分配给user,group一个UUID进行操作;现在,Keystone实现了对于multi domain backends可以配置成不同的LDAP,将user,group的信息 存储在LDAP中,或者通过federation的方式,将user,group的数据管理与验证,delegate给extensional的Identity Service。这些方式的实现,都面临着如何在Keystone中继续通过unique ID对user,group进行操作,以及快速的通过user,group的unique ID,找到其所在domain的driver,以便调用driver进行user,group的数据操作等问题。
Keystone为了解决上述问题,且尽可能的减少其他引用Keystone Service的components的代码改动,引入了ID Mapping的概念,将user,group的local ID,其所在的domain id,已经在Keystone service中可用的unique ID进行了mapping。
关于ID Mapping的Spec,可以参考OpenStack Community文档:
Cross-backend IDs for User and Group Entities
解析
1. 配置项:
配置 ID Mapping(/etc/keystone/keystone.conf):
driver = sql
generator = sha256
backward_compatible_ids = true
在Kilo release中,简化了配置项中的参数书写格式,Kilo之前的版本,配置项如下:
driver = keystone.identity.id_generators.sha256.Generator
generator = keystone.identity.mapping_backends.sql.Mapping
backward_compatible_ids = true
2. 代码解析:
ID Mapping的数据存储在数据库中的表“id_mapping”中,数据库表结构如下:
ID Mapping的data model如下:
class IDMapping(sql.ModelBase, sql.ModelDictMixin):
__tablename__ = 'id_mapping'
public_id = sql.Column(sql.String(64), primary_key=True)
domain_id = sql.Column(sql</