适应 nova 中的文件注入弃用

Trove 当前使用 –personality 在通过 Nova api 启动实例时注入文件。不幸的是,此参数从 Queens 版本开始已被弃用,nova 微版本 2.57。正如 bp 弃用文件注入 1 所述,支持它的代码将保留,但拥有一个微版本边界将使 Nova 能够最终删除该代码。在本规范中,我们尝试适应文件注入弃用,并实现另一种将文件注入实例的方法。

Launchpad Blueprint: https://blueprints.launchpad.net/trove/+spec/adapt-to-file-injection-deprecation-in-nova

问题描述

Nova 通过在微版本 2.57 的请求模式中弹出 –personality 参数来弃用文件注入,然后 –personality 的值将不会传递到 Nova api 服务。这是 Trove 当前使用此参数注入文件的方式。我们面临的风险是它可能会完全破坏 Trove。

提议的变更

使用 –user-data 是启动实例时注入文件的替代方案之一。

这是我们要做的事情

  • 重组函数 trove.instance.models.BaseInstance#get_injected_files 以获取文件内容、注入路径、所有者和权限,然后构建一个 InjectedFile 对象。如果将多个文件注入实例,我们应该构建并返回一个 InjectedFile 对象列表。

  • 更改 trove.taskmanager.models.FreshInstanceTasks#_prepare_userdata。基于 InjectedFile 对象列表构建 cloud-config 脚本。如果存在 <datastore_manager>.cloudinit 脚本,例如 mysql.cloudinit,我们应该检测脚本的格式,然后将其与 cloud-config 脚本 2 一起转换为 mime 多部分文件 3,以防我们需要将多种类型的数据传递给 cloud-init。因此,这里应该有两个主要的辅助函数,一个用于组织 cloud-config 脚本,如下所示

    #cloud-config
    write_files:
    -   encoding: b64
        content: CiMgVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiBTRUxpbnV4...
        owner: trove:trove
        path: /etc/trove/trove.conf
    

    另一个用于生成 mime 消息,如果有任何 *.cloudinit 脚本。

    注意

    请注意,目前我们将仅支持 *.cloudinit 文件的两种格式:cloud-config 和 user-data 脚本 4。基于一个 mime 多部分文件或 gzip 压缩内容组织一个 user-data 脚本可能很困难,而且其他格式可能不会被大量使用。有关格式参考,请参阅 5

  • 使用 –user-data 传递我们构建的上述参数,同时启动实例,然后我们可以将文件注入实例的指定位置,并具有适当的所有者和权限。这里有一点需要澄清的是,根据配置项

    cfg.BoolOpt('use_nova_server_config_drive', default=True,
                help='Use config drive for file injection when booting '
                'instance.'),
    

    我们在调用 novaclient 创建服务器时默认启用 –config-drive

  • 删除未使用的和已弃用的代码。

配置

数据库

公共 API

公共 API 安全

Python API

CLI (python-troveclient)

内部 API

Guest Agent

备选方案

Dashboard 影响 (UX)

实现

负责人

主要负责人

张帆 <zh.f@outlook.com>

里程碑

完成目标里程碑

Rocky-R2

工作项

  • 添加新的 InjectedFile 对象。

  • 添加新的辅助函数。

  • 修改当前代码,包括弃用文件参数并更改为 user-data。

  • 修改使用 –personality 参数启动实例的相关代码。

升级影响

依赖项

测试

  • 当前的单元测试应该涵盖创建实例的场景。

  • 需要一些新的单元测试。

文档影响

需要有关新的配置项使用情况的文档。

附录

无。