每实例序列号

添加支持为服务器提供唯一的每实例序列号。

问题描述

libvirt 客户机的机器 BIOS 中的序列号来自 [libvirt]/sysinfo_serial 配置选项 [1],默认情况下从计算主机的 /etc/machine-id 文件读取,如果该文件不存在,则从 libvirt 主机功能读取。无论哪种方式,同一主机上的所有客户机在客户机 BIOS 中都具有相同的序列号。

这对于运行基于序列号按安装收费的授权软件的客户机来说可能存在问题,因为如果客户机迁移,即使它只是运行软件的一个实例,也会产生新的费用。

如果客户机具有特定于自身的唯一序列号,那么许可证本质上会随客户机一起移动。

用例

作为用户(或云提供商),我不希望工作负载仅仅因为在云的正常运行期间迁移而产生许可证费用。

提议的变更

为了允许用户控制此行为(如果云提供商允许),将引入一个新的 flavor extra spec hw:unique_serial 和相应的镜像属性 hw_unique_serial,当其中任何一个设置为 True 时,客户机序列号将被设置为实例 UUID。

对于只想全局或针对一组主机聚合获取每实例序列号的运营商,将在现有的 [libvirt]/sysinfo_serial 配置中添加一个新的“unique”选项,如果设置了该选项,客户机序列号将被设置为实例 UUID。请注意,此蓝图不会更改该选项的默认值。

如果设置了 flavor/image 值,则它将覆盖主机配置。

备选方案

我们可以允许用户在创建服务器时传递序列号 UUID,然后将其传递给虚拟机监控程序,但这对于这个小改动来说似乎有些过分。而且,并非所有虚拟机监控程序后端都支持在客户机中指定序列号,我们希望避免添加并非所有计算驱动程序都能支持的 API 功能。允许用户指定序列号也可能被滥用于盗版软件,除非实施唯一的约束,但即使这样也必须跨整个部署(每个 cell 的数据库限制是不够的)。

数据模型影响

没有其他,除了将一个新的 FlexibleBooleanField 字段添加到 ImageMetaProps 对象。

REST API 影响

安全影响

通知影响

其他最终用户影响

没有。用户可以通过使用启用 flavor/image 的方式创建新服务器,或者使用启用 flavor/image 的方式重建/调整现有服务器来利用此功能。

性能影响

其他部署者影响

希望公开此功能的运营商可以通过将 extra spec 添加到他们的 flavor 和/或镜像,或者在 nova 配置中设置 [libvirt]/sysinfo_serial=unique 来实现。如果他们想将此功能限制为一组计算主机,也可以通过将启用的 flavor/image 限制为主机聚合来实现。

开发人员影响

没有,除了 libvirt 驱动程序的维护者可能希望最终支持此功能。

升级影响

没有明确的升级影响,除了较旧的计算代码可能不知道新的 flavor extra spec 或镜像属性,因此,如果用户请求具有该属性的服务器,但客户机中的序列号与实例 UUID 不匹配,他们可能会对为什么它不起作用感到困惑。再次强调,运营商可以通过决定何时启用该功能或将其限制为某些主机聚合来控制这一点。

实现

负责人

主要负责人

郑宇 <zhengzhenyu@huawei.com> (Kevin_Zheng)

其他贡献者

Matt Riedemann <mriedem.os@gmail.com> (mriedem)

工作项

  • 添加 ImageMetaProps.hw_unique_serial 字段。

  • 将一个新的选项“unique”添加到 [libvirt]/sysinfo_serial 配置选项。

  • 在 libvirt 驱动程序中检查 flavor extra spec 和镜像属性,并在设置序列号配置时进行检查。

  • 文档和测试。

依赖项

测试

对于这个相对较小的功能,单元测试应该足够了。

文档影响

参考资料

历史

修订

发布名称

描述

Stein

引入