summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorroot <root@tonbuntu>2010-11-01 16:25:56 -0700
committerroot <root@tonbuntu>2010-11-01 16:25:56 -0700
commita3077cbb859a9237f9516ed0f073fe00839277c4 (patch)
treea011d0fea8c123287797c8f4dbf92c05fac37a6a /nova/api
parent7bf0f86e5863f4943900a78f9797810b80d171e5 (diff)
basics to get proxied ajaxterm working with virsh
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/ec2/cloud.py50
1 files changed, 27 insertions, 23 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index be537a290..469331a66 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -439,10 +439,27 @@ class CloudController(object):
db.security_group_destroy(context, security_group.id)
return True
- def create_console(self, context, kind, instance_id, **_kwargs):
- """Create a Console"""
+ def get_console_output(self, context, instance_id, **kwargs):
+ # instance_id is passed in as a list of instances
+ ec2_id = instance_id[0]
+ internal_id = ec2_id_to_internal_id(ec2_id)
+ instance_ref = db.instance_get_by_internal_id(context, internal_id)
+ output = rpc.call(context,
+ '%s.%s' % (FLAGS.compute_topic,
+ instance_ref['host']),
+ {"method": "get_console_output",
+ "args": {"instance_id": instance_ref['id']}})
+
+ now = datetime.datetime.utcnow()
+ return {"InstanceId": ec2_id,
+ "Timestamp": now,
+ "output": base64.b64encode(output)}
+ def get_ajax_console(self, context, instance_id, **kwargs):
+ """Create an AJAX Console"""
- instance_ref = db.instance_get(context, instance_id)
+ ec2_id = instance_id[0]
+ internal_id = ec2_id_to_internal_id(ec2_id)
+ instance_ref = db.instance_get_by_internal_id(context, internal_id)
def get_port():
for i in xrange(0,100): # don't loop forever
@@ -450,7 +467,7 @@ class CloudController(object):
cmd = "netcat 0.0.0.0 %s -w 2 < /dev/null" % (port,)
# this Popen will exit with 0 only if the port is in use,
# so a nonzero return value implies it is unused
- port_is_unused = subprocess.Popen(cmd, shell=True).wait()
+ port_is_unused = (subprocess.Popen(cmd, shell=True).wait() != 0)
if port_is_unused:
return port
raise 'Unable to find an open port'
@@ -459,26 +476,11 @@ class CloudController(object):
token = str(uuid.uuid4())
host = instance_ref['host']
- cmd = "%s/tools/ajaxterm/ajaxterm.py --command 'ssh %s' -t %s -p %s" \
- % (utils.novadir(), host, token, port)
+ cmd = "%s/tools/ajaxterm/ajaxterm.py --command 'virsh console instance-%d' -t %s -p %s" \
+ % (utils.novadir(), internal_id, token, port)
port_is_unused = subprocess.Popen(cmd, shell=True) #TODO error check
- return {'url': 'http://%s:%s/?token=%s' % (FLAGS.cc_dmz, port, token)}
-
- def get_console_output(self, context, instance_id, **kwargs):
- # instance_id is passed in as a list of instances
- ec2_id = instance_id[0]
- internal_id = ec2_id_to_internal_id(ec2_id)
- instance_ref = db.instance_get_by_internal_id(context, internal_id)
- output = rpc.call(context,
- '%s.%s' % (FLAGS.compute_topic,
- instance_ref['host']),
- {"method": "get_console_output",
- "args": {"instance_id": instance_ref['id']}})
-
- now = datetime.datetime.utcnow()
- return {"InstanceId": ec2_id,
- "Timestamp": now,
- "output": base64.b64encode(output)}
+ dmz = 'tonbuntu' #TODO put correct value for dmz
+ return {'url': 'http://%s:%s/?token=%s&host=%s&port=%s' % (dmz, 8000, token, host, port)}
def describe_volumes(self, context, **kwargs):
if context.user.is_admin():
@@ -896,6 +898,8 @@ class CloudController(object):
(context.project.name, context.user.name, inst_id))
return self._format_run_instances(context, reservation_id)
+ def run_instances2(self, context, **kwargs):
+ return self.run_instances(context, kwargs)
def terminate_instances(self, context, instance_id, **kwargs):
"""Terminate each instance in instance_id, which is a list of ec2 ids.