允许可租赁节点

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 权限的项目将返回具有匹配 ownerlessee 字段的节点。

  • 更新 Ironic 分配,以便具有所有者的分配可以通过节点的 ownerlessee 匹配节点。

请注意,这项工作不会在 Ironic 中添加任何新的调度职责。一个新的 Nova 过滤器,例如建议的 NodeOwnerFilter 的更新版本 [1],将会是可取的;并且 Blazar 可以根据需要与 lessee 字段集成。但是,建议的工作与现有创建受限分配的能力很好地集成。

在 Ironic 创建部署 API 时,我们可以使新的部署 API 操作默认可供节点承租人访问。

备选方案

承租人信息可以存储在字典字段中,例如 propertiesextras。但是,这使得更新数据库查询更加困难,并且非管理用户概念感觉足够独特,值得创建一个新字段。

数据模型影响

将在节点表中添加一个 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 匹配节点的一些功能现在必须同时匹配 ownerlessee。这应该可以在数据库查询级别完成。

其他部署者影响

开发人员影响

实现

负责人

主要负责人:* tzumainn - tzumainn@redhat.com

工作项

  • 添加数据库字段。

  • 添加对象字段。

  • 添加 REST API 功能和微版本。

  • 更新 REST API 文档。

  • 更新 python-ironicclient。

  • 更新节点控制器。

  • 更新分配导体。

  • 编写测试。

  • 编写详细说明用法的文档。

依赖项

测试

我们将添加单元测试和 Tempest 测试。

升级和向后兼容性

lessee 节点字段将在升级过程期间作为数据库模式的一部分创建,并具有默认值。如果未更新策略文件,此更改不会对最终用户产生任何影响。

文档影响

将更新 REST API 文档。

参考资料