summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/nova-ajax-console-proxy13
-rw-r--r--nova/api/ec2/cloud.py2
-rw-r--r--nova/boto_extensions.py40
-rw-r--r--nova/compute/api.py6
-rwxr-xr-xtools/euca-get-ajax-console48
5 files changed, 63 insertions, 46 deletions
diff --git a/bin/nova-ajax-console-proxy b/bin/nova-ajax-console-proxy
index 53b779711..2bc407658 100755
--- a/bin/nova-ajax-console-proxy
+++ b/bin/nova-ajax-console-proxy
@@ -24,6 +24,7 @@ from eventlet import greenthread
from eventlet.green import urllib2
import exceptions
+import gettext
import logging
import os
import sys
@@ -38,9 +39,12 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+gettext.install('nova', unicode=1)
+
from nova import flags
-from nova import utils
+from nova import log as logging
from nova import rpc
+from nova import utils
from nova import wsgi
FLAGS = flags.FLAGS
@@ -48,6 +52,10 @@ FLAGS = flags.FLAGS
flags.DEFINE_integer('ajax_console_idle_timeout', 300,
'Seconds before idle connection destroyed')
+LOG = logging.getLogger('nova.ajax_console_proxy')
+LOG.setLevel(logging.DEBUG)
+LOG.addHandler(logging.StreamHandler())
+
class AjaxConsoleProxy(object):
tokens = {}
@@ -83,6 +91,9 @@ class AjaxConsoleProxy(object):
start_response("200 OK", info.dict.items())
return body
except (exceptions.KeyError):
+ if env['PATH_INFO'] != '/favicon.ico':
+ LOG.audit("Unauthorized request %s, %s"
+ % (req_url, str(env)))
start_response("401 NOT AUTHORIZED", [])
return "Not Authorized"
except Exception:
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 17b9a14fb..b426710bc 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -500,7 +500,7 @@ class CloudController(object):
def get_ajax_console(self, context, instance_id, **kwargs):
ec2_id = instance_id[0]
- internal_id = ec2_id_to_internal_id(ec2_id)
+ internal_id = ec2_id_to_id(ec2_id)
return self.compute_api.get_ajax_console(context, internal_id)
def describe_volumes(self, context, volume_id=None, **kwargs):
diff --git a/nova/boto_extensions.py b/nova/boto_extensions.py
deleted file mode 100644
index 6d55b8012..000000000
--- a/nova/boto_extensions.py
+++ /dev/null
@@ -1,40 +0,0 @@
-import base64
-import boto
-from boto.ec2.connection import EC2Connection
-
-class AjaxConsole:
- def __init__(self, parent=None):
- self.parent = parent
- self.instance_id = None
- self.url = None
-
- def startElement(self, name, attrs, connection):
- return None
-
- def endElement(self, name, value, connection):
- if name == 'instanceId':
- self.instance_id = value
- elif name == 'url':
- self.url = value
- else:
- setattr(self, name, value)
-
-class NovaEC2Connection(EC2Connection):
- def get_ajax_console(self, instance_id):
- """
- Retrieves a console connection for the specified instance.
-
- :type instance_id: string
- :param instance_id: The instance ID of a running instance on the cloud.
-
- :rtype: :class:`AjaxConsole`
- """
- params = {}
- self.build_list_params(params, [instance_id], 'InstanceId')
- return self.get_object('GetAjaxConsole', params, AjaxConsole)
- pass
-
-def override_connect_ec2(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
- return NovaEC2Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
-
-boto.connect_ec2 = override_connect_ec2
diff --git a/nova/compute/api.py b/nova/compute/api.py
index adf4dbe43..4d25bd705 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -416,13 +416,13 @@ class API(base.Base):
def get_ajax_console(self, context, instance_id):
"""Get a url to an AJAX Console"""
- instance_ref = db.instance_get_by_internal_id(context, instance_id)
+ instance = self.get(context, instance_id)
output = rpc.call(context,
'%s.%s' % (FLAGS.compute_topic,
- instance_ref['host']),
+ instance['host']),
{'method': 'get_ajax_console',
- 'args': {'instance_id': instance_ref['id']}})
+ 'args': {'instance_id': instance['id']}})
rpc.cast(context, '%s' % FLAGS.ajax_console_proxy_topic,
{'method': 'authorize_ajax_console',
diff --git a/tools/euca-get-ajax-console b/tools/euca-get-ajax-console
index 8e45eeed0..37060e74f 100755
--- a/tools/euca-get-ajax-console
+++ b/tools/euca-get-ajax-console
@@ -32,9 +32,10 @@ possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
sys.path.insert(0, possible_topdir)
+import boto
import nova
+from boto.ec2.connection import EC2Connection
from euca2ools import Euca2ool, InstanceValidationError, Util, ConnectionFailed
-from nova.boto_extensions import *
usage_string = """
Retrieves a url to an ajax console terminal
@@ -50,6 +51,51 @@ OPTIONAL PARAMETERS
"""
+# This class extends boto to add AjaxConsole functionality
+class NovaEC2Connection(EC2Connection):
+
+ def get_ajax_console(self, instance_id):
+ """
+ Retrieves a console connection for the specified instance.
+
+ :type instance_id: string
+ :param instance_id: The instance ID of a running instance on the cloud.
+
+ :rtype: :class:`AjaxConsole`
+ """
+
+ class AjaxConsole:
+ def __init__(self, parent=None):
+ self.parent = parent
+ self.instance_id = None
+ self.url = None
+
+ def startElement(self, name, attrs, connection):
+ return None
+
+ def endElement(self, name, value, connection):
+ if name == 'instanceId':
+ self.instance_id = value
+ elif name == 'url':
+ self.url = value
+ else:
+ setattr(self, name, value)
+
+ params = {}
+ self.build_list_params(params, [instance_id], 'InstanceId')
+ return self.get_object('GetAjaxConsole', params, AjaxConsole)
+ pass
+
+
+def override_connect_ec2(aws_access_key_id=None,
+ aws_secret_access_key=None, **kwargs):
+ return NovaEC2Connection(aws_access_key_id,
+ aws_secret_access_key, **kwargs)
+
+# override boto's connect_ec2 method, so that we can use NovaEC2Connection
+boto.connect_ec2 = override_connect_ec2
+
+
def usage(status=1):
print usage_string
Util().usage()