可配置内省数据存储后端

https://storyboard.openstack.org/#!/story/1726713

此规范提出了一种从配置的存储后端读取和写入内省数据机制,并额外提供支持从 ironic inspector 数据库读取和写入内省数据。

问题描述

目前,内省数据只能存储在 Swift 中,在没有采用 Swift 的环境中没有替代方案。此外,缺乏通过扩展 ironic-inspector 来支持其他存储后端机制。

提议的变更

  • 添加一个名为 introspection_data 的表来存储内省数据。

  • 添加一个名为 introspection_data 的 inspector 插件,该插件支持三种类型的存储后端:noneswiftdatabase

    每种存储后端类型都暴露两个接口

    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 支持迁移到插件中作为存储后端。

  • 实现数据库存储后端。

  • 创建内省数据插件管理器,以根据配置选项加载驱动程序实例,并根据内省数据插件提供的接口重新设计内省数据的读取/写入访问。

  • 实现帮助内省数据迁移的工具。

依赖项

测试

这将由单元测试和功能测试覆盖。

参考资料