Merge "api: Add response body schemas for console auth token APIs"

This commit is contained in:
Zuul 2024-12-09 18:49:51 +00:00 committed by Gerrit Code Review
commit 49476c6267
5 changed files with 71 additions and 19 deletions

View File

@ -67,11 +67,15 @@ class ConsoleAuthTokensController(wsgi.Controller):
@wsgi.Controller.api_version("2.1", "2.30")
@wsgi.expected_errors((400, 401, 404))
@validation.query_schema(schema.show_query)
# NOTE(stephenfin): Technically this will never return a response now (as
# an exception will be raised instead) but we use the same schema for
# documentation purposes
@validation.response_body_schema(schema.show_response)
def show(self, req, id):
"""Until microversion 2.30, this API was available only for the
rdp-html5 console type which has been removed along with the HyperV
driver in the Nova 29.0.0 (Caracal) release. As this method is for
microversion <=2.30, it will return an http 400 error. Starting
microversion <= 2.30, it will return an http 400 error. Starting
from 2.31 microversion, this API works for all the supported
console types that are handled by the separate show method
defined below.
@ -81,5 +85,6 @@ class ConsoleAuthTokensController(wsgi.Controller):
@wsgi.Controller.api_version("2.31") # noqa
@wsgi.expected_errors((400, 404))
@validation.query_schema(schema.show_query)
@validation.response_body_schema(schema.show_response)
def show(self, req, id): # noqa
return self._show(req, id)

View File

@ -16,3 +16,34 @@ show_query = {
'properties': {},
'additionalProperties': True,
}
show_response = {
'type': 'object',
'properties': {
'console': {
'type': 'object',
'properties': {
'instance_uuid': {'type': 'string', 'format': 'uuid'},
'host': {'type': ['string', 'null']},
'port': {'type': 'integer'},
'internal_access_path': {
'oneOf': [
{
'type': 'null',
},
{
'type': 'string',
'format': 'uuid',
},
],
},
},
'required': [
'instance_uuid', 'host', 'port', 'internal_access_path',
],
'additionalProperties': False,
},
},
'required': ['console'],
'additionalProperties': False,
}

View File

@ -33,15 +33,14 @@ class ConsoleAuthTokensExtensionTestV21(test.NoDBTestCase):
_EXPECTED_OUTPUT = {'console': {'instance_uuid': fakes.FAKE_UUID,
'host': 'fake_host',
'port': '1234',
'internal_access_path':
'fake_access_path'}}
'internal_access_path': fakes.FAKE_UUID}}
# The database backend returns a ConsoleAuthToken.to_dict() and o.vo
# StringField are unicode. And the port is an IntegerField.
_EXPECTED_OUTPUT_DB = copy.deepcopy(_EXPECTED_OUTPUT)
_EXPECTED_OUTPUT_DB['console'].update(
{'host': u'fake_host', 'port': 1234,
'internal_access_path': u'fake_access_path'})
{'host': 'fake_host', 'port': 1234,
'internal_access_path': fakes.FAKE_UUID})
def setUp(self):
super(ConsoleAuthTokensExtensionTestV21, self).setUp()
@ -66,7 +65,7 @@ class ConsoleAuthTokensExtensionTestV231(ConsoleAuthTokensExtensionTestV21):
@mock.patch('nova.objects.ConsoleAuthToken.validate',
return_value = objects.ConsoleAuthToken(
instance_uuid=fakes.FAKE_UUID, host='fake_host',
port='1234', internal_access_path='fake_access_path',
port='1234', internal_access_path=fakes.FAKE_UUID,
console_type='webmks',
token=fakes.FAKE_UUID))
def test_get_console_connect_info(self, mock_validate):

View File

@ -12,7 +12,10 @@
from unittest import mock
from oslo_utils.fixture import uuidsentinel as uuids
from nova.api.openstack.compute import console_auth_tokens
from nova import objects
from nova.tests.unit.api.openstack import fakes
from nova.tests.unit.policies import base
@ -43,6 +46,16 @@ class ConsoleAuthTokensPolicyTest(base.BasePolicyTest):
@mock.patch('nova.objects.ConsoleAuthToken.validate')
def test_console_connect_info_token_policy(self, mock_validate):
rule_name = "os_compute_api:os-console-auth-tokens"
mock_validate.return_value = objects.ConsoleAuthToken(
id=1,
host='node1',
port=10000,
console_type='novnc',
access_url_base='https://example.net:6080',
internal_access_path=None,
instance_uuid=uuids.instance,
token='123-456-789',
)
self.common_policy_auth(self.project_admin_authorized_contexts,
rule_name, self.controller.show,
self.req, fakes.FAKE_UUID)

View File

@ -476,25 +476,29 @@ class FakeDriver(driver.ComputeDriver):
return 'FAKE CONSOLE OUTPUT\nANOTHER\nLAST LINE'
def get_vnc_console(self, context, instance):
return ctype.ConsoleVNC(internal_access_path='FAKE',
host='fakevncconsole.com',
port=6969)
return ctype.ConsoleVNC(
internal_access_path=uuids.vnc_access_path,
host='fakevncconsole.com',
port=6969)
def get_spice_console(self, context, instance):
return ctype.ConsoleSpice(internal_access_path='FAKE',
host='fakespiceconsole.com',
port=6969,
tlsPort=6970)
return ctype.ConsoleSpice(
internal_access_path=uuids.spice_access_path,
host='fakespiceconsole.com',
port=6969,
tlsPort=6970)
def get_serial_console(self, context, instance):
return ctype.ConsoleSerial(internal_access_path='FAKE',
host='fakerdpconsole.com',
port=6969)
return ctype.ConsoleSerial(
internal_access_path=uuids.serial_access_path,
host='fakerdpconsole.com',
port=6969)
def get_mks_console(self, context, instance):
return ctype.ConsoleMKS(internal_access_path='FAKE',
host='fakemksconsole.com',
port=6969)
return ctype.ConsoleMKS(
internal_access_path=uuids.mks_access_path,
host='fakemksconsole.com',
port=6969)
def get_available_resource(self, nodename):
"""Updates compute manager resource info on ComputeNode table.