Spec Lite: 将验证数据与镜像位置一起嵌入

项目:

glance

问题:

使用 HTTP 存储的新镜像,其 locations 可以使用 HTTP PATCH 请求中的 addreplace 操作初始化,但目前没有提供伴随校验和和多哈希值的方法。

解决方案:

允许在名为 validation_data 的新的只写 JSON 对象中嵌入 checksumos_hash_algoos_hash_value 的值,以及镜像位置的 urlmetadata。这些值将用于填充相应的镜像属性。

对于这些项目中的任何新值,只有当镜像状态为 queued 并且相应的镜像属性尚未填充时,才会被接受。为了允许幂等性,此对象可以在添加或替换处于 active 状态或/且已经填充了相应属性的镜像的位置时包含,但提供的值必须与现有值完全匹配。

该对象可以包含在 locations 列表中的一个或多个项目中,但值必须在所有实例中保持一致。

虽然 validation_data 对象是可选的,但如果存在,则需要 os_hash_algoos_hash_value 项目,以强制采用多哈希。由于多哈希将是 Stein 版本的客户端的默认机制,因此 checksum 是可选的,但包含在内是为了适应尚未实现多哈希的遗留消费者。预计消费者知道仅在他们的部署需要时才填充 checksum

os_hash_algo 必须与 Glance 服务器的 DEFAULT.hashing_algorithm 配置选项匹配。虽然要求输入只有一个可接受的值似乎是多余的,但这是为了确保用户知道需要哪种算法。 checksumos_hash_value 无法验证(因为 Glance 服务器没有镜像数据的副本),但它们将被验证为相应算法的正确大小的十六进制值。

任何违反上述规则的行为都将导致 HTTPConflict 异常(HTTP 状态 409)。

以下内容将被添加到 images 模式中 locations 项目的属性中

'validation_data': {
    'description': _(
        'Values to be used to populate the corresponding '
        'image properties. If the image status is not '
        '"queued" or/and the image properties are already '
        'populated, any supplied values must exactly match '
        'existing ones.'
    ),
    'type': 'object',
    'writeOnly': True,
    'properties': {
        'checksum': {
            'type': 'string',
            'minLength': 32,
            'maxLength': 32,
        },
        'os_hash_algo': {
            'type': 'string',
            'maxLength': 64,
        },
        'os_hash_value': {
            'type': 'string',
            'maxLength': 128,
        },
    },
    'required': [
        'os_hash_algo',
        'os_hash_value',
    ],
},

还将向 python-glanceclient 中的 add_location() 方法和 location-add shell 命令添加支持。

替代方案:

实现一种导入方法,以直接注册镜像以供 HTTP 存储使用(无需使用 HTTP PATCH)。

时间线:

包含在 Stein 版本中。需要尽快批准,以便我可以继续为我的 Rocky 升级进行私有回溯(v1 API 已删除)。

链接:

https://review.openstack.org/597368

负责人:

imacdonn