diff options
| author | Anthony Young <sleepsonthefloor@gmail.com> | 2011-12-22 21:39:21 +0000 |
|---|---|---|
| committer | Anthony Young <sleepsonthefloor@gmail.com> | 2012-01-17 14:18:31 -0800 |
| commit | 8d010cacb520786fa12794801bc31eddd23b2af7 (patch) | |
| tree | 51609a7c80b6a62128a9819fadb0064209e17a81 /nova/api | |
| parent | 5987ed97ffb90e52acb7a7d9e0a915d072aadaed (diff) | |
| download | nova-8d010cacb520786fa12794801bc31eddd23b2af7.tar.gz nova-8d010cacb520786fa12794801bc31eddd23b2af7.tar.xz nova-8d010cacb520786fa12794801bc31eddd23b2af7.zip | |
Implements blueprint vnc-console-cleanup
* Creates a unified way to access vnc consoles for xenserver and libvirt
* Now supports both java and websocket clients
* Removes nova-vncproxy - a replacement version of this (nova-novncproxy) can be found as described in vncconsole.rst
* Adds nova-xvpvncproxy, which supports a java vnc client
* Adds api extension to access java and novnc access_urls
* Fixes proxy server to close/shutdown sockets more cleanly
* Address style feedback
* Use new-style extension format
* Fix setup.py
* utils.gen_uuid must be wrapped like str(utils.gen_uuid()) or it can't be serialized
Change-Id: I5e42e2f160e8e3476269bd64b0e8aa77e66c918c
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/ec2/cloud.py | 9 | ||||
| -rw-r--r-- | nova/api/openstack/compute/contrib/consoles.py | 79 |
2 files changed, 79 insertions, 9 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py index b082d0598..2869b4fe1 100644 --- a/nova/api/ec2/cloud.py +++ b/nova/api/ec2/cloud.py @@ -829,15 +829,6 @@ class CloudController(object): instance = self.compute_api.get(context, instance_id) return self.compute_api.get_ajax_console(context, instance) - def get_vnc_console(self, context, instance_id, **kwargs): - """Returns vnc browser url. - - This is an extension to the normal ec2_api""" - ec2_id = instance_id - instance_id = ec2utils.ec2_id_to_id(ec2_id) - instance = self.compute_api.get(context, instance_id) - return self.compute_api.get_vnc_console(context, instance) - def describe_volumes(self, context, volume_id=None, **kwargs): if volume_id: volumes = [] diff --git a/nova/api/openstack/compute/contrib/consoles.py b/nova/api/openstack/compute/contrib/consoles.py new file mode 100644 index 000000000..46e3559ff --- /dev/null +++ b/nova/api/openstack/compute/contrib/consoles.py @@ -0,0 +1,79 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2012 OpenStack LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License + +import webob + +from nova import compute +from nova import exception +from nova import log as logging +from nova.api.openstack import extensions +from nova.api.openstack import wsgi + + +LOG = logging.getLogger('nova.api.openstack.compute.contrib.console') + + +class ConsolesController(wsgi.Controller): + def __init__(self, *args, **kwargs): + self.compute_api = compute.API() + super(ConsolesController, self).__init__(*args, **kwargs) + + @wsgi.action('os-getVNCConsole') + def get_vnc_console(self, req, id, body): + """Get text console output.""" + context = req.environ['nova.context'] + + console_type = body['os-getVNCConsole'].get('type') + + if not console_type: + raise webob.exc.HTTPBadRequest(_('Missing type specification')) + + try: + instance = self.compute_api.routing_get(context, id) + except exception.NotFound: + raise webob.exc.HTTPNotFound(_('Instance not found')) + + try: + output = self.compute_api.get_vnc_console(context, + instance, + console_type) + except exception.ConsoleTypeInvalid, e: + raise webob.exc.HTTPBadRequest(_('Invalid type specification')) + except exception.ApiError, e: + raise webob.exc.HTTPBadRequest(explanation=e.message) + except exception.NotAuthorized, e: + raise webob.exc.HTTPUnauthorized() + + return {'console': {'type': console_type, 'url': output['url']}} + + def get_actions(self): + """Return the actions the extension adds, as required by contract.""" + actions = [extensions.ActionExtension("servers", "os-getVNCConsole", + self.get_vnc_console)] + return actions + + +class Consoles(extensions.ExtensionDescriptor): + """Interactive Console support.""" + name = "Consoles" + alias = "os-consoles" + namespace = "http://docs.openstack.org/compute/ext/os-consoles/api/v2" + updated = "2011-12-23T00:00:00+00:00" + + def get_controller_extensions(self): + controller = ConsolesController() + extension = extensions.ControllerExtension(self, 'servers', controller) + return [extension] |
