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
This commit is contained in:
Takashi NATSUME 2018-02-02 14:17:48 +09:00
parent b0d875d7a8
commit e79269e710
1 changed files with 301 additions and 0 deletions

View File

@ -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 abovementioned 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