添加新的节点名称过滤 API

https://bugs.launchpad.net/ironic/+bug/1526319

此蓝图建议添加一种通过节点名称(正则表达式、通配符)在 API 中过滤节点的方式。

GET /v1/nodes/?name_regex=<regexp_str> GET /v1/nodes/?name_wildcard=<wildcard_str>

问题描述

目前,只有 API GET /v1/nodes/<node_name> 可以精确检索通过节点名称的 ironic 节点。但是,对于客户来说,如果支持正则表达式和通配符表达式过滤器,通过用户输入检索节点,这将有助于用户灵活地按名称过滤节点,特别是对于管理大量裸机节点的 ironic 用户。

可能的用例是支持客户端批量操作,例如通过节点名称正则表达式或通配符过滤掉一些节点,并使用单个命令进行批量操作。

提议的变更

添加新的 API

  • GET /v1/nodes/?name_regex=<regexp_str>

  • GET /v1/nodes/?name_wildcard=<wildcard_str>

我们支持 BRE 和 ERE IEEE POSIX 正则表达式标准[1]。

并且将添加数据库 API 支持,对于不同的数据库,正则表达式的运算符不同

  • postgresql: ‘~’

  • mysql: ‘REGEXP’

  • sqlite: ‘REGEXP’

因此,我们将检查 ironic 使用的当前数据库,并从上述映射中获取正则表达式运算符。如果上述支持映射中没有此类数据库,将向用户引发 API 异常,并告知用户当前数据库不支持此名称正则表达式查询 API。

对于通配符过滤,所有数据库都可以支持,因为将使用标准 SQL 的 ‘LIKE’ SQL 运算符运行。

备选方案

使用节点标签进行客户端批量操作。

数据模型影响

无。

状态机影响

无。

REST API 影响

添加新的 API ‘GET /v1/nodes/?name_regexp=<regexp_str>’ 和 ‘GET /v1/nodes/ ?name_wildcard=<wildcard_str>’,并增加 API 微版本。请参阅“Proposed change”。

客户端 (CLI) 影响

添加执行两个新 API 的新命令

  • ironic node-list –name-regex=<regexp_str>

  • ironic node-list –name-wildcard=<wildcard_str>

对 OSC 插件进行类似的修改。

RPC API 影响

无。

驱动程序 API 影响

无。

Nova 驱动程序影响

无。

Ramdisk 影响

N/A

安全影响

其他最终用户影响

无。

可扩展性影响

无。

性能影响

无。

其他部署者影响

无。

开发人员影响

无。

实现

负责人

主要负责人

whaom

工作项

  • 添加新的 API ‘GET /v1/nodes/?name_regex=<regexp_str>’

  • 添加新的 API ‘GET /v1/nodes/?name_wildcard=<wildcard_str>’

  • 为 ironic node-list 命令添加新的 ‘name_regex filter’ 选项。

  • 为 ironic node-list 命令添加新的 ‘name_widcard filter’ 选项。

  • 为接受节点 ID 作为输入的现有命令添加新的 ‘name_regex filter’ 选项,以支持批量操作。

  • 为接受节点 ID 作为输入的现有命令添加新的 ‘name_widcard filter’ 选项,以支持批量操作。

依赖项

无。

测试

将添加单元测试代码以覆盖新的 API。

升级和向后兼容性

无。

文档影响

更新 API 文档,添加新的 API

参考资料

[1] https://en.wikipedia.org/wiki/Regular_expression#Standards