From e79269e710683891ac306f32ad4d411748347ca0 Mon Sep 17 00:00:00 2001 From: Takashi NATSUME Date: Fri, 2 Feb 2018 14:17:48 +0900 Subject: [PATCH] List/show all server migration types The spec approved in queens is amended. The 'links' parameter is also available in the response of the 'GET /os-migrations' API when the migration type is 'migration', 'resize' or 'evacuation' (besides 'live-migration') and the migration status is in-progress. Previously-approved: pike, queens APIImpact Change-Id: I74e6e88d7a8e219a4a10bcb777c95162959057f3 blueprint list-show-all-server-migration-types --- .../list-show-all-server-migration-types.rst | 301 ++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 specs/rocky/approved/list-show-all-server-migration-types.rst diff --git a/specs/rocky/approved/list-show-all-server-migration-types.rst b/specs/rocky/approved/list-show-all-server-migration-types.rst new file mode 100644 index 000000000..31a7fadad --- /dev/null +++ b/specs/rocky/approved/list-show-all-server-migration-types.rst @@ -0,0 +1,301 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + + http://creativecommons.org/licenses/by/3.0/legalcode + +==================================== +List/show all server migration types +==================================== + +https://blueprints.launchpad.net/nova/+spec/list-show-all-server-migration-types + +The following APIs are used to list in-progress server live migrations +and show an in-progress live migration's details. +So this blueprint enables us to list and show other migration types +('evacuation', 'resize', 'migration'). + +* GET /servers/{server_id}/migrations +* GET /servers/{server_id}/migrations/{migration_id} + +Problem description +=================== + +To abort cold migrations [1]_, administrators have to list/show in-progress +cold migrations. But currently they can list/show in-progress live migrations +only in server migrations APIs. + +Use Cases +--------- + +Operators want to list all in-progress migrations in the cloud [1]_. + +Proposed change +=============== + +Modify the following existing 2 APIs for live-migration to list and show +other migration types ('evacuation', 'resize', 'migration'). + +* GET /servers/{server_id}/migrations +* GET /servers/{server_id}/migrations/{migration_id} + +The former API returns in-progress migrations. +The latter API returns 404 error if the specified migration is not in progress. +The behavior is retained as it is. + +Migration status transitions are as follows: + +* Migration/resize + + - 'pre-migrating' --> 'migrating' --> 'post-migrating' --> 'finished' + +* Confirm resize + + - 'finished' --> 'confirming' --> 'confirmed' + +* Revert resize + + - 'finished' --> 'reverting' --> 'reverted' + +* Evacuation + + - 'accepted' --> 'pre-migrating' --> 'done' + +* Live migration + + - (Skip the definition) + +In-progress migration states are defined as follows: + +* migration/resize + + - 'pre-migrating', 'migrating', 'post-migrating' + +* confirm resize + + - 'confirming' + +* revert resize + + - 'reverting' + +* evacuation + + - 'accepted', 'pre-migrating' + +* live-migration + + - 'queued', 'preparing', 'running', 'post-migrating' + - Existing definition. They remains as it is. + +These in-progress migrations are listed/shown, but the migration status will +not be returned in the response. + +In addition to the aboveā€mentioned change, the 'links' parameter is also +available in the response of the following API when the migration type is +'migration', 'resize' or 'evacuation' (besides 'live-migration') and +the migration status is in-progress. + +* GET /os-migrations + +Alternatives +------------ + +None + +Data model impact +----------------- + +None + +REST API impact +--------------- + +Following changes will be introduced in a new API microversion. + +* GET /servers/{server_id}/migrations + + It lists in-progress migrations. + The migration type can be specified as a 'type' query parameter + to filter out results. + The 'type' query parameter is optional. + If 'type' parameter is not specified, all migration types are listed. + + The valid 'type' parameters are 'live-migration', 'migration', + 'resize' and 'evacuation'. + If 'type' parameter is wrong, nova-api returns 400 error. + So add badRequest(400) to error response codes. + + The 'type' parameter is added in the response. + The migration status is not included in the response. + + JSON response body example:: + + { + "migrations": [ + { + "dest_host": "10.0.2.15", + "memory_processed_bytes": null, + "type": "migration", + "updated_at": "2017-01-31T08:03:25.000000", + "created_at": "2017-01-31T08:03:21.000000", + "memory_remaining_bytes": null, + "dest_compute": "devstack-master2", + "id": 11, + "source_node": "devstack-master1", + "server_uuid": "a333ee8a-367f-4841-bdc9-c8d92a6adfe4", + "memory_total_bytes": null, + "dest_node": "devstack-master2", + "disk_total_bytes": null, + "disk_processed_bytes": null, + "disk_remaining_bytes": null, + "source_compute": "devstack-master1" + } + ] + } + +* GET /servers/{server_id}/migrations/{migration_id} + + The response codes are not modified. + Show a migration which has any migration type. + The 'type' parameter is added in the response. + The migration status is not included in the response. + + JSON response body example:: + + { + "migration": { + "dest_host": "10.0.2.15", + "memory_processed_bytes": null, + "type": "migration", + "updated_at": "2017-01-31T08:03:25.000000", + "created_at": "2017-01-31T08:03:21.000000", + "memory_remaining_bytes": null, + "dest_compute": "devstack-master2", + "id": 11, + "source_node": "devstack-master1", + "server_uuid": "a333ee8a-367f-4841-bdc9-c8d92a6adfe4", + "memory_total_bytes": null, + "dest_node": "devstack-master2", + "disk_total_bytes": null, + "disk_processed_bytes": null, + "disk_remaining_bytes": null, + "source_compute": "devstack-master1" + } + } + + If a migration is not in-progress state, it returns 404 error. + +* POST /servers/{server_id}/migrations/{migration_id}/action + + It is a "Force Migration Complete Action" API. + The migration is not a 'live-migration', it returns 400 error + instead of 404 error. + +* DELETE /servers/{server_id}/migrations/{migration_id} + + If the migration is not a 'live-migration', it returns 400 error. + It is a current behavior. (It is not changed.) + +* GET /os-migrations + + The 'links' parameter is also available in the response + when the migration type is 'migration', 'resize' or 'evacuation' + (besides 'live-migration') and the migration status is in-progress. + +Security impact +--------------- + +Only Administrator can operate suggested functions by default. +So there is no security impact. + +Notifications impact +-------------------- + +None + +Other end user impact +--------------------- + +The novaclient and openstackclient are modified to specify a migration type. + +Performance Impact +------------------ + +None + +Other deployer impact +--------------------- + +None + +Developer impact +---------------- + +None + +Upgrade impact +-------------- + +None + + +Implementation +============== + +Assignee(s) +----------- + +Primary assignee: + natsume-takashi + +Other contributors: + None + +Work Items +---------- + +* Add the 'type' query parameter to list server migrations + ('evacuation', 'resize', 'migration') API +* Modify show a server migration ('evacuation', 'resize', or 'migration') API +* Add the optional 'type' parameter in novaclient/openstackclient +* API docs including note of the possible types + +Dependencies +============ + +None + +Testing +======= + +Add the following tests. + +* functional tests +* tempest test + +Documentation Impact +==================== + +* API Reference +* CLI Reference + +References +========== + +.. [1] https://blueprints.launchpad.net/nova/+spec/abort-cold-migration + +History +======= + +.. list-table:: Revisions + :header-rows: 1 + + * - Release Name + - Description + * - Pike + - Approved + * - Queens + - Reapproved + * - Rocky + - Reproposed