允许在救援期间指定镜像

https://blueprints.launchpad.net/nova/+spec/allow-image-to-be-specified-during-rescue

在本蓝图中,我们旨在为实例救援 API 添加一个额外的可选参数。该参数将用于指定在救援实例时使用的镜像。如果未指定该参数,则将使用基本镜像来救援实例。

问题描述

救援期间使用的自定义镜像可能已损坏,导致错误,或者太大,导致超时。此外,如果删除了基本镜像,则 instance_system_metadata 上的镜像引用将无效,导致救援操作失败。此功能也可用于客户希望使用特定镜像而不是默认镜像来救援实例的情况。这将为该功能提供更大的灵活性。

提议的变更

为了实现这一点,我建议允许用户指定用于救援的镜像。(可以是默认基本镜像或自定义镜像)

备选方案

数据模型影响

REST API 影响

用于指定用于救援实例的镜像的 API

场景:情况 1:如果在救援请求中指定了 image_ref,则将使用该镜像。情况 2:如果在救援请求中未指定 image_ref,则将使用实例的 system_metadata 上的 image_base_image_ref。(默认行为)

V2 API 规范:POST: v2/{tenant_id}/servers/{server_id}/action

V3 API 规范:POST: v3/servers/{server_id}/action

请求参数:* tenant_id:多租户云中租户或帐户的 ID。* server_id:您感兴趣的服务器的 UUID。* rescue:在请求主体中指定救援操作。* adminPass(可选):为救援的实例使用此密码。如果没有提供,则生成新密码。* rescue_image_ref(可选):将此 image_ref 用于救援。

JSON 请求:{“rescue”: {“adminPass”: “MySecretPass”, “rescue_image_ref”: “848b39fb-6904-46d6-af3c-baa3eefedffc”}}

JSON 响应:{“adminPass”: “MySecretPass”}

示例 v2 请求:POST: /v2/d1b123/servers/7d14f8123/action -d ‘{“rescue”: {“rescue_image_ref”: “848b39fb-6904-46d6-af3c-baa3eefedffc”}}’

示例 v3 请求:POST: /v3/servers/7d14f8123/action -d ‘{“rescue”: {“rescue_image_ref”: “848b39fb-6904-46d6-af3c-baa3eefedffc”}}’

这将使用镜像引用“848b39fb-6904-46d6-af3c-baa3eefedffc”来救援 UUID 为“7d14f8123”的实例

JSON schema 定义

rescue = {
    'type': 'object',
    'properties': {
        'rescue': {
            'type': ['object', 'null'],
            'properties': {
                'admin_password': parameter_types.admin_password,
                'rescue_image_ref': parameter_types.image_ref,
            },
            'additionalProperties': False,
        },
    },
    'required': ['rescue'],
    'additionalProperties': False,
}

HTTP 响应代码:v2:正常 HTTP 响应代码:成功时为 200 v3:正常 HTTP 响应代码:成功时为 202(将在实现期间检查是否可以在 v2 和 v3 中保持一致。)

验证:‘rescue_image_ref’ 必须是 uuid-str 格式。失败响应代码:HTTPBadRequest,消息为“无效的镜像引用格式”。

安全影响

通知影响

其他最终用户影响

python-novaclient 中的救援调用必须包含额外的可选参数

可选参数:–rescue_image_ref <image_ref> 用于救援的镜像 ID

性能影响

其他部署者影响

开发人员影响

该参数是可选的,因此不需要更改其他代码。

实现

负责人

主要负责人

aditirav

工作项

  • 需要对计算管理器救援方法进行更改,以便在救援实例期间使用传入的镜像引用。

  • 向 V2 API 添加扩展,以使救援接受可选参数‘rescue_image_ref’

  • 对 V3 API 进行更改,以接受可选参数‘rescue_image_ref’

  • 在 tempest 中包含测试,以检查通过 API 调用传递的镜像引用进行实例救援的行为。

依赖项

测试

要向 tempest 添加测试,以检查实例的救援是否使用 API 调用中指定的镜像。

文档影响

需要对救援 API 文档进行更改,以包含可以传递的附加参数‘rescue_image_ref’。

参考资料