节点标签¶
https://bugs.launchpad.net/ironic/+bug/1526266
本规范旨在添加对节点标签的支持。
问题描述¶
Ironic 应该为每个节点提供标签字段,该字段可用于将节点划分为若干组。然后我们可以通过标签进行列表查询,以获取具有相同属性(如硬件规格)的节点组。
提议的变更¶
添加允许用户为节点添加、删除和列出标签的 API。
在节点列表 API 中添加标签过滤参数,以允许基于一个或多个字符串标签搜索节点。
备选方案¶
当前的 chassis 对象在某种程度上可以作为节点分组的替代方案。
数据模型影响¶
将在对象模型中添加一个新的 ironic.objects.tags.NodeTagList 对象。
Python 对象模型中的 ironic.objects.tags.NodeTagList 字段将按需填充(即不立即加载)。
标签应定义为 Unicode 字符串,长度不超过 255 个字符,并在此字段上建立索引。
标签是附加到实体上的字符串,用于将其分类到组中。为了简化指定标签列表的请求,标签名称中不允许使用逗号字符。
对于数据库模式,以下表结构就足够了
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表并进行迁移。添加用于 node 标签 CRUD 操作的 DB API 层。
添加了用于 node 标签列表过滤支持的 DB API 层。
添加 NodeTag、NodeTagList 对象以及 Node 对象中的新 tags 字段。
添加用于 node 标签 CRUD 操作的 REST API。
添加用于 node 标签列表过滤支持的 REST API。
python-ironicclient 的添加和修改。
依赖项¶
无
测试¶
添加单元测试。添加 tempest API 测试。
升级和向后兼容性¶
添加数据库迁移脚本。
文档影响¶
Ironic API 和 python-ironicclient 需要更新以配合此更改。