Native Keystone Resources¶
https://blueprints.launchpad.net/heat/+spec/keystone-resources
问题描述¶
一些云运营商希望能够使用 Heat 模板来管理 Keystone 中的用户、项目和角色。目前我们只能创建用户,而且只能通过 AWS IAM 资源类型来实现。
这在邮件列表中讨论过,起始线程在这里
http://lists.openstack.org/pipermail/openstack-dev/2015-January/055554.html
提议的变更¶
实现以下原生资源类型
OS::Keystone::User
name (可选 - 默认为 self.physical_resource_name())
default_project_id (可选)
email (可选)
domain (可选)
password (可选)
enabled (默认 True)
groups (列表)
roles (列表)
domain (可选 - 必须指定 domain 或 project 或两者)
project (可选 - 必须指定 domain 或 project 或两者)
角色
OS::Keystone::Group
name (可选 - 默认为 self.physical_resource_name())
domain (可选)
description (可选)
roles (列表)
domain (可选 - 必须指定 domain 或 project 或两者)
project (可选 - 必须指定 domain 或 project 或两者)
角色
OS::Keystone::Role
name (可选 - 默认为 self.physical_resource_name())
OS::Keystone::Project
name (可选 - 默认为 self.physical_resource_name())
domain (可选)
description (可选)
enabled (默认 True)
由于在默认 policy.json 配置中,这些 API 仅对管理用户可用,因此该插件将位于 /contrib 树中,并且默认情况下不会安装。
备选方案¶
另一种可能的数据模型是拥有一个单独的 RoleAssignment 资源(或类似资源)来将角色授予用户或组,而不是在用户或组资源中列出角色。类似的情况也适用于组中的用户列表,可以将其实现为 GroupMembership 资源。
然而,该数据模型存在一些问题。首先是添加用户到组或将角色授予用户/组不会创建具有自身 UUID 的物理资源。这使得 Heat 难以管理这些资源。
第二个问题是,这种方法倾向于为用户创建依赖问题 - 例如,在这种模型中,如果另一个资源依赖于 User,那么 Heat 可能会在 User 被分配其可能需要执行操作的角色之前开始创建它。这可能不如在 Keystone 资源中那样在 Neutron 资源中表现得明显,但这是 Heat 数据建模中已知的反模式。
用户和组也存在类似的问题 - 另一种实现方式是组定义包含一个用户列表,而不是用户定义包含一个组列表。优点是它更接近 API 的实现方式,但选择这种方式是因为它更有可能自动生成正确的依赖关系:任何依赖于 User 的资源都将始终等待所有组被分配。两种方法都可能使某些(不同的)用例变得笨拙,但唯一的解决方案是单独的 GroupMembership 资源类型,并且它将遭受所有与 RoleAssignment 讨论过的问题。
实现¶
负责人¶
- 主要负责人
kanagaraj-manickam
里程碑¶
- 完成目标里程碑
Kilo-3
工作项¶
用户插件
项目插件
组插件
角色插件
keystone.project 的自定义约束
keystone.group 的自定义约束
keystone.role 的自定义约束
keystone.domain 的自定义约束
依赖项¶
无