适应 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 脚本。
使用 –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 参数启动实例的相关代码。
升级影响¶
无
依赖项¶
无
测试¶
当前的单元测试应该涵盖创建实例的场景。
需要一些新的单元测试。
文档影响¶
需要有关新的配置项使用情况的文档。
参考资料¶
- 1
- 2
http://cloudinit.readthedocs.io/en/latest/topics/format.html#cloud-config-data
- 3
http://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive
- 4
http://cloudinit.readthedocs.io/en/latest/topics/format.html#user-data-script
- 5
http://cloudinit.readthedocs.io/en/latest/topics/format.html#formats
附录¶
无。