节点标签¶
https://bugs.launchpad.net/ironic/+bug/1526266
本意图是添加对节点标签的支持。
问题描述¶
Ironic 应该为每个节点提供一个标签字段,可用于将节点划分为若干组。然后我们可以通过标签进行列表查询,以获取具有相同属性(如硬件规格)的节点组。
提议的变更¶
添加允许用户为节点添加、删除和列出标签的 API。
在节点列表 API 中添加标签过滤器参数,以允许基于一个或多个字符串标签搜索节点。
备选方案¶
当前的 chassis 对象在某种程度上可以作为节点分组的替代方案。
数据模型影响¶
一个新的 ironic.objects.tags.NodeTagList 对象将被添加到对象模型中。
Python 对象模型中的 ironic.objects.tags.NodeTagList 字段将按需填充(即不立即加载)。
标签应定义为不超过 255 个字符长度的 Unicode 字符串,并对此字段建立索引。
标签是附加到实体上的字符串,用于将其分类到组中。为了简化指定标签列表的请求,标签名称中不允许包含逗号字符。
对于数据库模式,以下表结构就足够了
CREATE TABLE node_tags (
node_id INT(11) NOT NULL,
tag VARCHAR(255) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (node_id, tag),
KEY (tag),
FOREIGN KEY (node_id)
REFERENCES nodes(id)
ON DELETE CASCADE,
)
REST API 影响¶
我们将遵循 API 工作组关于标签的规范,而不是自行发明。
将支持寻址单个标签。
RPC API 影响¶
无
状态机影响¶
无
客户端 (CLI) 影响¶
添加标签 CRUD 操作命令
ironic node-tag-list <node uuid>
ironic node-tag-update <node uuid> <op> <tags>
<op> 操作:‘add’ 或 ‘remove’
对于单个标签:* ironic node-tag-add <node uuid> <tag> * ironic node-tag-remove <node uuid> <tag>
为 node-list 命令添加标签列表过滤支持
ironic node-list –tag tag1 –tag tag2
ironic node-list –tag-any tag1 –tag-any tag2
ironic node-list –not-tag tag3
多个 –tag 将用于以 AND 表达式过滤结果,而 –tag-any 用于 OR 表达式,允许通过 –not-tag 选项进行排除标签。
驱动程序 API 影响¶
无
Nova 驱动程序影响¶
标签信息可用于 nova,但本规范不考虑这一点,可能会在以后解决。
Ramdisk 影响¶
N/A
安全影响¶
无
其他最终用户影响¶
无
可扩展性影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
niu-zglinux
工作项¶
添加
node_tags表,并进行迁移。添加用于对节点标签进行 CRUD 操作的 DB API 层。
添加了用于节点标签列表过滤支持的 DB API 层。
添加 NodeTag、NodeTagList 对象以及 Node 对象中的新标签字段。
添加用于对节点标签进行 CRUD 操作的 REST API。
添加用于节点标签列表过滤支持的 REST API。
python-ironicclient 的添加和修改。
依赖项¶
无
测试¶
添加单元测试。添加 tempest API 测试。
升级和向后兼容性¶
添加数据库迁移脚本。
文档影响¶
Ironic API 和 python-ironicclient 需要更新以配合此更改。