基于镜像属性的配置驱动

https://blueprints.launchpad.net/nova/+spec/config-drive-image-property

在创建实例时,检查镜像属性以决定是否应创建配置驱动。

问题描述

目前 Nova 决定是否为服务器创建配置驱动,基于

  1. 用户在服务器创建 API 请求中指定 config-drive 选项,或者,

  2. 服务器被调度到设置了 force_config_drive 选项的计算节点。

但我们也需要考虑镜像的要求。有些镜像可能明确要求配置驱动。

提议的变更

  • 添加一个镜像属性作为 “img_config_drive”,img_config_drive 的值可以是

    • img_config_drive=mandatory|optional

    这些含义是

    • mandatory == 实例必须始终拥有一个配置驱动

    • optional == 实例可以使用配置驱动,但即使缺少它也可以正常工作

    任何其他值都将被视为错误。如果没有指定选项,默认值为 optional。

    未来,此属性可能扩展为包含更多选项,例如 ‘disable’ 以禁用 config_drive。 届时应提供一种机制,以确保 ‘disable’ 选项不会被视为错误。

  • 配置驱动决策规则如以下表格所示。只要用户在 API 中指定、镜像属性中要求或计算节点配置选项指定,就会创建配置驱动。

    API

    镜像属性

    计算节点配置

    结果

    Mandatory

    已设置或未设置

    可选

    已设置

    可选

    未设置

    已指定

    Mandatory 或 Optional

    已设置或未设置

备选方案

另一种选择是将 API 选项和镜像属性组合成 API 层中的一个实例属性,但恕我直言,这不够清晰。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

此 BP 将添加一个额外的镜像属性,因此用户应该意识到这一点。

性能影响

不会有性能影响。

其他部署者影响

建议部署者在将 config drive 属性添加到任何镜像之前更新所有计算节点。否则,没有此功能的计算节点将不会检查镜像属性。

开发人员影响

实现

负责人

主要负责人

yunhong-jiang

工作项

  • 更改 virt/configdrive.py 以同时检查镜像属性。

依赖项

关于镜像属性增强的一些讨论见 https://blueprints.launchpad.net/nova/+spec/convert-image-meta-into-nova-object 并且讨论仍在进行中。

此提案与该提案不冲突,我们只需要确保新的 config drive 属性将在 VirtProperties 中定义。无论哪个提案先落地,这将是一项小的努力。

测试

将添加 Tempest 测试,以确保镜像 config drive 属性得到正确处理。

文档影响

需要为新的镜像属性更新文档。

参考资料