4.9 KiB
Allow image to be specified during rescue
https://blueprints.launchpad.net/nova/+spec/allow-image-to-be-specified-during-rescue
In this blueprint we aim to add an additional optional parameter to the instance rescue API. This parameter will be used to specify the image to be used while rescuing the instance. If the parameter is not specified, the instance will be rescued using the base image.
Problem description
The custom image used during rescue might be corrupt, leading to errors, or too large, leading to timeouts. Also, if the base image is deleted, the image ref on the instance_system_metadata will be invalid, leading to the rescue operation failing. This feature can also be used in the case where the customer wants to rescue the instance with a specific image, rather the default one. This would provide more flexibility to the feature.
Proposed change
In order to implement this I propose that we allow the user to specify which image is to be used for rescue. (could be a default base image or a custom image)
Alternatives
None
Data model impact
None
REST API impact
API for specifying image to be used to rescue an instance:
Scenarios: Case 1: If image_ref is specified as part of the rescue request, that image will be used. Case 2: If image_ref is not specified as part of the rescue request, image_base_image_ref on the system_metadata of the instance will be used. (Default behavior)
V2 API specification: POST: v2/{tenant_id}/servers/{server_id}/action
V3 API specification: POST: v3/servers/{server_id}/action
Request parameters: * tenant_id: The ID for the tenant or account in a multi-tenancy cloud. * server_id: The UUID for the server of interest to you. * rescue: Specify the rescue action in the request body. * adminPass(Optional): Use this password for the rescued instance. Generate a new password if none is provided. * rescue_image_ref(Optional): Use this image_ref for rescue.
JSON request: {"rescue": {"adminPass": "MySecretPass", "rescue_image_ref": "848b39fb-6904-46d6-af3c-baa3eefedffc"}}
JSON response: {"adminPass": "MySecretPass"}
Sample v2 request: POST: /v2/d1b123/servers/7d14f8123/action -d '{"rescue": {"rescue_image_ref": "848b39fb-6904-46d6-af3c-baa3eefedffc"}}'
Sample v3 request: POST: /v3/servers/7d14f8123/action -d '{"rescue": {"rescue_image_ref": "848b39fb-6904-46d6-af3c-baa3eefedffc"}}'
This would use image with ref "848b39fb-6904-46d6-af3c-baa3eefedffc" to rescue instance with uuid "7d14f8123"
JSON schema definition:
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 response codes: v2: Normal HTTP Response Code: 200 on success v3: Normal HTTP Response Code: 202 on success (Will check whether these can be made consistent in v2 and v3 during implementation.)
Validation: 'rescue_image_ref' must be of a uuid-str format. Failure Response Code: HTTPBadRequest with "Invalid image ref format" message.
Security impact
None
Notifications impact
None
Other end user impact
The rescue call in python-novaclient will have to include the additional optional parameter
Optional argument: --rescue_image_ref <image_ref> ID of image to be used for rescue
Performance Impact
None
Other deployer impact
None
Developer impact
The parameter will be optional, so no other code needs to be changed.
Implementation
Assignee(s)
- Primary assignee:
-
aditirav
Work Items
- Changes to be made to the compute manager rescue method to use the image ref passed in, during the rescue of the instance.
- Add an extension to the V2 API to make rescue take in the optional parameter 'rescue_image_ref
- Changes to the V3 API to take in the optional parameter 'rescue_image_ref'
- Include tests in tempest to check the behavior of rescue instance with the image ref passed in through the API call.
Dependencies
None
Testing
Tempest tests to be added to check if rescue of the instance uses the image specified in the API call.
Documentation Impact
Changes to be made to the rescue API documentation to include the additional parameter 'rescue_image_ref' that can be passed in.
References
None