Relax API validation for v2.0 on v2.1¶
https://blueprints.launchpad.net/nova/+spec/api-relax-validation
Currently v2.1 strongly validates all API requests.
This spec details how we will relax some validation for v2.0 API requests served by the v2.1 code base. Note requests being sent to /v2.1 will keep their full strong validation.
Problem description¶
We hope that in the near future, all request to nova API can be processed by the new API v2.1 code base. At that point, we will be able to deprecate, then delete, the current v2.0 API implementation, and return to a single API implementation.
While all clients making valid requests to the v2.0 API will get the same results talking to the v2.1 API, there are issues. Various types of “invalid” requests are currently accepted by v2.0, but would be rejected by v2.1. Even tempest was found to be making invalid requests: https://review.openstack.org/#/c/138245
Use Cases¶
We need it to be low risk for users to deploy v2.1 to deal with the current requests for v2.0.
While initial tests of some major SDKs have shown they appear to be making correct requests to our v2.0 API, not all users use an SDK.
Given the problems found in the tempest test suite, where invalid requests were being made to the v2.0 API, it must be assumed that users who have written their own code to access our API will have made similar mistakes. Where possible, we want these users to be unaffected by the change from v2.0 to v2.1.
It is expected that SDKs will be updated to start adding the version headers for all their requests to the API. At this point, they will start to get the full benefits of strong API validation. Only those users that are still not specifying the version headers would be getting the weaker validation.
Project Priority¶
Part of the API v2.1 effort.
Proposed change¶
The API v2.1 validation logic will change such that:
requests to /v2.1 work the same as today after this change
requests to /v2 will have relaxed validation, and will ignore X-OpenStack-Nova-API-Version headers, and always return /v2 responses
requests made to /v2 will never return X-OpenStack-Nova-API-Version headers, even when powered by the v2.1 codebase
if we keep /v1.1 it will remain the same as /v2
The relaxed validation consists of:
no longer error out requests due to additionalProperties, instead when the request if for the /v2 API we just ignore those additionalProperties.
In addition:
any request to /v2 that includes headers for /v2.1 will be ignored when v2.1 codebase is used to deliver the /v2 requests, so it matches what the v2 codebase is doing today.
For more details see REST API impact.
Alternatives¶
The main alternative is to not do this, which is likely to lead to slower adoption of v2.1.
We could also allow /v2 requests to be sent to /v2.1, but that would confuse matters, /v2 should just ignore the version headers.
We could ensure that any requests to /v2 error out if you sent the X-OpenStack-Nova-API-Version header, but as python-novaclient already sends that header for all /v2 requests, it would create another backwards compatibility issue.
Instead of just ignoring parameters, it would be nice to also strip out any invalid parameters before passing through the request to the v2.1 code. It also feels slightly better from an input validation and security point of view, but it does risk changing how the API behaves. We could still look to add this at a later date, if it turns out to be a good idea.
Data model impact¶
None
REST API impact¶
This will have zero impact for the /v2.1 endpoint.
The /v2 endpoint powered by the v2.1 code gets the relaxed validation to make it more compatible, as mentioned above.
In addition /v2 endpoint thats powered by the v2.1 code should never accept any requests not accepted by /v2, and should only return /v2 like responses. Basically, it should always ignore any X-OpenStack-Nova-API-Version just like the v2 code base does today.
For consistency, /v1.1 will be the same as /v2
Security impact¶
None
Notifications impact¶
None
Other end user impact¶
None
Performance Impact¶
None
Other deployer impact¶
None
Developer impact¶
None
Implementation¶
Assignee(s)¶
- Primary assignee:
johnthetubaguy and alex_xu
Work Items¶
relax validation for /v2 requests when using v2.1 codebase, instead just ignore bad properties
requests made to /v2 will never return X-OpenStack-Nova-API-Version headers, even when powered by the v2.1 codebase
ensure that /v2 served up by the v2.1 codebase ignores any of the X-OpenStack-Nova-API-Version headers, just like v2.0 code base does.
Dependencies¶
None
Testing¶
Additional unit tests and integration tests should be enough to cover these changes.
Documentation Impact¶
None
References¶
None