Allow unshelve to a specific host¶
https://blueprints.launchpad.net/nova/+spec/unshelve-to-host
This blueprint proposes to allow administrator to specify host
to unshelve a shelved offloaded server.
Problem description¶
Currently, an instance can only be unshelved to a specific availability zone. The proposal is to extend the unshelve behavior allowing an instance to be unshelved to a specific host.
Use Cases¶
As a PROJECT_ADMIN, I want to specify a destination host when executing unshelve on a shelved-offloaded instance.
Proposed change¶
Add a new microversion to extend the unshelve API behavior to support a specific destination host.
Add host
attribute to POST /server/uuid/action for unshelve request body.
Add 2 checks:
Ensure the user is a PROJECT_ADMIN.
Ensure the instance state is
shelved_offloaded
.
With the introduction of the new microversion, change the scheduling and request specification (reqspec) behaviors of the unshelve API.
Current behavior:
Boot |
Unshelve after offload |
Result |
---|---|---|
No AZ |
No AZ |
Free scheduling, reqspec.AZ kept None |
No AZ |
AZ |
Schedule in the AZ, update reqspec.AZ to the requested one |
With AZ |
No AZ |
Schedule in original AZ, keep reqspec pointing that AZ |
With AZ |
AZ |
Schedule to the new AZ, update the reqspec.AZ to the new AZ |
Proposed new behavior:
Boot |
Unshelve after offload AZ |
Host |
Result |
---|---|---|---|
No AZ |
No AZ or AZ=null |
No |
Free scheduling, reqspec.AZ=None |
No AZ |
No AZ or AZ=null |
Host1 |
Schedule to host1, reqspec.AZ=None |
No AZ |
AZ=”AZ1” |
No |
Schedule to AZ1, reqspec.AZ=”AZ1” |
No AZ |
AZ=”AZ1” |
Host1 |
Verify that host1 in AZ1, or (3). Schedule to host1, reqspec.AZ=”AZ1” |
AZ1 |
No AZ |
No |
Schedule to AZ1, reqspec.AZ=”AZ1” |
AZ1 |
AZ=null |
No |
Free scheduling, reqspec.AZ=None |
AZ1 |
No AZ |
Host1 |
If host1 is in AZ1, then schedule to host1, reqspec.AZ=”AZ1”, otherwise reject the request (1) |
AZ1 |
AZ=null |
Host1 |
Schedule to host1, reqspec.AZ=None |
AZ1 |
AZ=”AZ2” |
No |
Schedule to AZ2, reqspec.AZ=”AZ2” |
AZ1 |
AZ=”AZ2” |
Host1 |
If host1 in AZ2 then schedule to host1, reqspec.AZ=”AZ2”, otherwise reject (1) |
Check at the api and return an error.
Alternatives¶
The current proposal rejects unshelve to a specific host if the instance state is not shelved_offloaded. Alternatively, a request to unshelve to a specific host would change the instance state to shelved_offloaded automatically. So the user would not have to worry about the initial instance state.
Data model impact¶
None
REST API impact¶
Change the validation schema allowing availability_zone=null
and
host
.
An error in schema validation will raise a HTTP400.
Ensure the instance state is shelved_offloaded
.
An error in such case will rise a HTTP409.
Starting from the new API microversion, the
POST /servers/{server_id}/action
API can be called with the following body:
{“unshelve”: null} (Keep compatibility with previous microversions)
or
{“unshelve”: {“availability_zone”: <string>}}
{“unshelve”: {“availability_zone”: null}} (Unpin availability zone)
{“unshelve”: {“host”: <fqdn>}}
{“unshelve”: {“availability_zone”: <string>, “host”: <fqdn>}}
{“unshelve”: {“availability_zone”: null, “host”: <fqdn>}}
Everything else is not allowed, examples:
{“unshelve”: {}}
{“unshelve”: {“host”: <fqdn>, “host”: <fqdn>}}
{“unshelve”: {“foo”: <string>}}
Security impact¶
None
Notifications impact¶
None
Other end user impact¶
The python-openstackclient
will be updated and will provide support for
the new microversion.
A new switch --unpin-az
will be introduced to the unshelve command allowing
PROJECT_ADMIN to remove the availability zone constraint of a server.
The python-novaclient
will just be extended with the python helper
functions.
Performance Impact¶
None
Other deployer impact¶
None
Developer impact¶
None
Upgrade impact¶
None
Implementation¶
Assignee(s)¶
- Primary assignee:
Uggla (rene.ribaud)
Feature Liaison¶
- Feature liaison:
sbauza
Work Items¶
Add a new microversion to the unshelve to a specific host (unshelve Action) API
Add related tests
Dependencies¶
None
Testing¶
Add related unit tests
Add related functional tests
Add a tempest test
Documentation Impact¶
The API reference and the unshelve documentation will be updated to explain the new behavior introduced by the new microversion.
References¶
None
History¶
Release Name |
Description |
---|---|
Zed |
Introduced |