项目树分配列表

bp list-assignment-subtree

提供列出给定树中所有项目分配的能力。

问题描述

我们已经支持项目层次结构,以及一些可以对此类树进行操作的 API(例如,将该树中的所有项目列出为一个列表)。这些 API 的提供是为了简化使用 keystone 的其他项目的工作——例如 nova 管理树的配额。

Horizon 团队(因此可能还有其他 UI 开发人员)也开始将项目树操作集成到他们的支持中。这项工作产生的一个直接请求是能够列出域中的所有角色分配。

提议的变更

虽然可以提供一个特定于域的能力来列出该域内的这些项目的分配,但值得首先退一步,并结合我们正在对域和项目层次结构所做的更改来考虑这个需求。Liberty 提案(在最近两次峰会上已进行了深入讨论)是域成为一种特殊类型的项目,并且该域内的所有项目都在该项目层次结构中作为子项目存在。鉴于这一趋势,似乎更合适的是提供列出项目层次结构分配的能力,如果该项目充当域,这将导致列出域的所有分配。

这种方法的优点是它符合我们朝着项目相关的 API 进行域操作的目标(尽管我们当然保留对传统域 API 的支持),并且还提供了列出任何任意项目树分配的能力,从而为 API 客户端提供了更多选项来呈现 keystone 对象。

与其他树操作一样,目前域边界是不透明的——因此,对非叶域调用新的 API 将不会包含与子项目相关的任何分配。

备选方案

我们可以提供一些特定于域的内容,尽管除了消除对 Liberty 已经进行中的域-项目集成工作的依赖之外,似乎没有其他优势。

数据模型影响

REST API 影响

为了提供 API,将在 GET /role_assignments 调用中添加一个额外的查询参数 (include_subtree)。

安全影响

就新的 API 的策略而言,建议这是与常规列表分配规则不同的策略规则。这将允许 API 通过树的根项目上的角色进行权限控制,从而在 API 被调用。这与此新 API 的最常见用例(域管理员检查域中所有项目的分配)兼容。

通知影响

其他最终用户影响

性能影响

在项目树中列出分配的性能可能比在单个项目中列出更差。但是,该实现将能够利用其他工作,将列出分配的过滤移动到驱动程序中,并实现物化树。

`Improve List Role Assignments Filters Performance <https://review.openstack.org/#/c/137202>`_
`bp materialize-project-hierarchy <https://review.openstack.org/#/c/173424/>`_

其他部署者影响

开发人员影响

实现

负责人

主要负责人

henry-nash

工作项

  • 实现新的 API 选项

  • 为 keystoneclient 库添加支持

  • 为 openstack 客户端添加支持

将在 Horizon 中支持此 API 的工作将另行提出。

依赖项

测试

除了常规单元测试之外,没有其他。

文档影响

Identity API 的更改。

参考资料