Spec Lite: 将资源元数据更新传递给后端驱动

问题:

目前,Manila 允许用户对资源元数据执行添加/更新/删除操作。这包括诸如共享、快照和共享网络子网等资源。然而,这些操作仅处理数据库中的更改,假设资源元数据只能用于标记目的。因此,如果客户希望基于资源元数据对资源执行任何后端驱动操作,Manila 需要引入新的 API。

解决方案:

通过扩展现有的元数据添加/更新/删除操作以处理数据库操作以及将元数据更新传递给后端驱动,可以消除添加新 API 的工作。对于快照和共享网络子网等资源,更新后的元数据将被传递给后端驱动。对于共享等资源,除了将更新后的元数据传递给后端驱动之外,还将引入一些更改来决定可以传递哪些元数据给后端驱动。

流程 - 1. 将添加新的驱动接口 update_share_from_metadata。将在 manila.conf 的默认部分中引入新的配置选项 driver_updatable_metadata。这包含逗号分隔的列表,其中每个元素格式为 <驱动>:<driver_updatateble_key>。请注意,这包含管理员和非管理员元数据键。 2. 共享类型 extra-specs 将确定共享的初始配置。它将包含格式为 <驱动>:<driver_updatateble_key> 的值。在共享创建 API 期间,Manila 将将共享类型 extra-specs 复制到共享元数据。只有存在于配置选项 driver_updatable_metadata 中的键才会被复制,并将其值一起复制到共享元数据中。 3. 如果在共享创建 API 中提供了元数据,可能的动作如下 -

  • 如果提供的元数据存在于 admin_only_metadata 中,Manila 将检查策略是否允许用户添加/更新该元数据,如果允许,它将检查它是否存在于共享元数据中(即从共享类型 extra-spec 复制而来)。如果存在于共享元数据中,则执行数据库操作,Manila 将元数据传递给后端驱动。如果不存在,则仅执行数据库操作。

  • 如果提供的元数据不是管理员专用,Manila 将检查它是否存在于共享元数据中(即从共享类型 extra-spec 复制而来)。如果存在于共享元数据中,则执行数据库操作,Manila 将元数据传递给后端驱动。

4. 在元数据更新 API 中,首先执行验证,然后执行数据库操作。之后,更新后的元数据将被传递给后端驱动。 5. 最后,后端驱动将根据传递的元数据执行某些操作。如果操作成功或失败,用户将通过用户消息 API 收到通知。 数据库更改成功应用,但相应的后端驱动操作失败是有可能发生的。因此,使用消息 API 通知最终用户变得很重要。

用例 -

1. 例如,NetApp ONTAP 驱动程序需要为给定的共享设置快照策略。与其创建新的 API 来设置/取消设置快照策略,不如可以将快照策略作为共享元数据添加,即键值对。然后,Manila-API 服务使用 rpc 调用将元数据传递给 ONTAP 驱动程序。ONTAP 驱动程序然后为该共享设置快照策略,并通知成功/失败。 2. 此外,并非所有共享特定操作都允许普通用户执行。通过使用 admin_only_metadata 以及驱动程序可更新的元数据,管理员可以控制共享行为。例如,NetApp ONTAP 云管理员由于安全问题,不希望最终用户看到共享的根路径 (/)。这可以通过设置共享服务器 NFS 的 show-mount 选项来实现。在这种情况下,也可以通过将 show-mount 选项作为共享资源的元数据添加来代替创建新的 API 来设置/取消设置 show-mount 选项。ONTAP 驱动程序然后将在属于共享的共享服务器上设置 show-mount 选项。

影响:
  • REST API 影响。
    • 更新元数据行为将在必要时向后端发出 RPC 调用,以允许共享管理器通过驱动程序处理元数据更新。但是,此实现不会更改任何请求/响应模式或响应错误代码。

  • 文档影响
    • 用户指南

    • 管理员指南

  • 数据库影响
  • Python-manilaclient 和 OSClient 影响
替代方案:

作为替代方案,Manila 可以创建单独的 API 来处理各种资源相关操作。

时间线:

包含在 2024.2 版本中。

链接:

https://blueprints.launchpad.net/manila/+spec/pass-resource-metadata-updates-to-backend-drivers

负责人:

kpdev