允许可租赁节点¶
https://storyboard.openstack.org/#!/story/2006506
大型裸机部署可能由多个所有者拥有的硬件组成,这些所有者将其节点租赁给用户 - 承租人 - 承租人获得对特定节点的临时和有限访问权限。Ironic 理解硬件所有者的概念:节点可以将它的 owner 字段设置为一个项目,并且该项目可以通过使用更新后的策略文件获得对该节点的 API 访问权限。但是,Ironic 不理解节点承租人的概念。
本规范描述了一种适应节点承租人概念的解决方案。
问题描述¶
Ironic 当前支持两类用户:管理员,他们控制整个硬件清单;和所有者,他们拥有针对其拥有的节点的策略限制的 API 访问权限。但是,Ironic 不支持非管理用户 - 可以部署到节点上的用户,并且可能只能访问 API 的极小子集(例如节点电源功能)。
提议的变更¶
可以通过以下更改支持节点承租人
在节点对象中添加一个新的
lessee字段。该字段必须为空或设置为 Keystone 项目 ID。更新节点控制器,以便策略检查通过节点
lessee信息。请注意,Ironic 已经对节点所有者执行此操作 [0]。更新 Ironic 的默认生成的策略文件,以包含一个
is_node_lessee规则“is_node_lessee”: “project_id:%(node.lessee)s”
策略文件的其余部分将保持不变,因此不会更改默认 API 访问权限。
更新节点列表函数,以便具有访问
baremetal:node:list权限的项目将返回具有匹配owner或lessee字段的节点。更新 Ironic 分配,以便具有所有者的分配可以通过节点的
owner或lessee匹配节点。
请注意,这项工作不会在 Ironic 中添加任何新的调度职责。一个新的 Nova 过滤器,例如建议的 NodeOwnerFilter 的更新版本 [1],将会是可取的;并且 Blazar 可以根据需要与 lessee 字段集成。但是,建议的工作与现有创建受限分配的能力很好地集成。
在 Ironic 创建部署 API 时,我们可以使新的部署 API 操作默认可供节点承租人访问。
备选方案¶
承租人信息可以存储在字典字段中,例如 properties 或 extras。但是,这使得更新数据库查询更加困难,并且非管理用户概念感觉足够独特,值得创建一个新字段。
数据模型影响¶
将在节点表中添加一个 lessee 字段,作为 VARCHAR(255),默认值为 null。
状态机影响¶
无
REST API 影响¶
lessee字段将与节点对象一起返回。REST API 将传递
lessee以进行节点策略检查。API 将更新为允许用户通过 API 设置/取消设置该值。
节点列表 API 将更新为允许按
lessee过滤。有限的
baremetal:node:list操作将更新为同时匹配承租人和所有者。将引入一个新的 API 微版本用于新的节点
lessee字段。
客户端 (CLI) 影响¶
无
“ironic” CLI¶
无
“openstack baremetal” CLI¶
需要更新才能允许用户从命令行设置/取消设置 lessee。
RPC API 影响¶
无
驱动程序 API 影响¶
无
Nova 驱动程序影响¶
无
Ramdisk 影响¶
无
安全影响¶
此更改允许将功能暴露给其他用户。但是,默认情况下会阻止此访问;它需要更新 Oslo 策略文件,并且可以由管理员根据需要进行调整。
其他最终用户影响¶
无
可扩展性影响¶
无
性能影响¶
以前通过 owner 匹配节点的一些功能现在必须同时匹配 owner 和 lessee。这应该可以在数据库查询级别完成。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
主要负责人:* tzumainn - tzumainn@redhat.com
工作项¶
添加数据库字段。
添加对象字段。
添加 REST API 功能和微版本。
更新 REST API 文档。
更新 python-ironicclient。
更新节点控制器。
更新分配导体。
编写测试。
编写详细说明用法的文档。
依赖项¶
无
测试¶
我们将添加单元测试和 Tempest 测试。
升级和向后兼容性¶
lessee 节点字段将在升级过程期间作为数据库模式的一部分创建,并具有默认值。如果未更新策略文件,此更改不会对最终用户产生任何影响。
文档影响¶
将更新 REST API 文档。