添加新的节点名称过滤 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