可配置内省数据存储后端¶
https://storyboard.openstack.org/#!/story/1726713
此规范提出了一种从配置的存储后端读取和写入内省数据机制,并额外提供支持从 ironic inspector 数据库读取和写入内省数据。
问题描述¶
目前,内省数据只能存储在 Swift 中,在没有采用 Swift 的环境中没有替代方案。此外,缺乏通过扩展 ironic-inspector 来支持其他存储后端机制。
提议的变更¶
添加一个名为
introspection_data的表来存储内省数据。添加一个名为
introspection_data的 inspector 插件,该插件支持三种类型的存储后端:none、swift和database。每种存储后端类型都暴露两个接口
def get(self, node_id, suffix=None): pass def save(self, node_info, data, suffix=None): pass
添加一个插件管理器,以根据配置选项
[processing]storage_backend动态加载驱动程序扩展,方式类似于规则管理器。在 setup.cfg 中添加一个新的入口点
ironic_inspector.introspection.storage_backend = none = ironic_inspector.plugins.introspection_data:NoStore swift = ironic_inspector.plugins.introspection_data:SwiftStore database = ironic_inspector.plugins.introspection_data:DatabaseStore
备选方案¶
无
数据模型影响¶
将创建一个名为 introspection_data 的新表,包含三个字段
uuid:String(36),外键指向node.uuid。processed:Boolean,用于确定内省数据是否已处理。目前,inspector 使用后缀UNPROCESSED表示未处理的数据,None表示已处理的数据。这将映射到布尔字段。注意
Swift 存储后端将后缀作为对象名称的一部分使用:
inspector_data-<uuid>[-suffix]。data:JsonEncodedDict(),MySQL 的 LONGTEXT。此字段用作内省数据的存储。
当从缓存中删除节点时,相关的内省数据也将被删除。
HTTP API 影响¶
无
客户端 (CLI) 影响¶
无
Ironic python agent 影响¶
无
性能和可扩展性影响¶
无
安全影响¶
无
部署者影响¶
配置选项 [processing]storage_backend 将具有 database 作为有效值。设置后,检查的数据将存储到 ironic inspector 数据库。
在这种情况下,Swift 不是存储内省数据的强制要求。
开发者影响¶
实现此功能后,可以实现其他插件来支持其他类型的存储。
升级和向后兼容性¶
数据库升级将由 ironic-inspector-dbsync 处理。
提供一个工具来协助在 Swift 和数据库之间迁移现有的内省数据,例如:
$ ironic-inspector-migrate-data --from swift --to database
$ ironic-inspector-migrate-data --from database --to swift
实现¶
负责人¶
- 主要负责人
kaifeng
工作项¶
实现 db 层支持。
实现内省数据插件,将 swift 支持迁移到插件中作为存储后端。
实现数据库存储后端。
创建内省数据插件管理器,以根据配置选项加载驱动程序实例,并根据内省数据插件提供的接口重新设计内省数据的读取/写入访问。
实现帮助内省数据迁移的工具。
依赖项¶
无
测试¶
这将由单元测试和功能测试覆盖。
参考资料¶
无