Merge "Proposed blueprint to allow image to be passed during rescue."

This commit is contained in:
Jenkins 2014-04-02 20:56:46 +00:00 committed by Gerrit Code Review
commit 157543bd48
1 changed files with 204 additions and 0 deletions

View File

@ -0,0 +1,204 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
==========================================
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