summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-01-15 21:05:03 +0000
committerGerrit Code Review <review@openstack.org>2013-01-15 21:05:03 +0000
commit802148747052580cfca5fa8119d492354332562a (patch)
treeddd027d5908c0ae1f32618e6236cf611c9227d05
parent8d275c735afedca2884196dc6a554165dda84547 (diff)
parentf51a285c205e7b2b0e34b198b3d2fc7b035646dc (diff)
downloadnova-802148747052580cfca5fa8119d492354332562a.tar.gz
nova-802148747052580cfca5fa8119d492354332562a.tar.xz
nova-802148747052580cfca5fa8119d492354332562a.zip
Merge "Implements getPasswordData for ec2"
-rw-r--r--nova/api/ec2/cloud.py18
-rw-r--r--nova/tests/api/ec2/test_cloud.py12
2 files changed, 30 insertions, 0 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 353d08714..414b2e969 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -27,6 +27,7 @@ import time
from nova.api.ec2 import ec2utils
from nova.api.ec2 import inst_state
+from nova.api.metadata import password
from nova.api import validator
from nova import availability_zones
from nova import block_device
@@ -758,6 +759,23 @@ class CloudController(object):
return True
+ def get_password_data(self, context, instance_id, **kwargs):
+ # instance_id may be passed in as a list of instances
+ if isinstance(instance_id, list):
+ ec2_id = instance_id[0]
+ else:
+ ec2_id = instance_id
+ validate_ec2_id(ec2_id)
+ instance_uuid = ec2utils.ec2_inst_id_to_uuid(context, ec2_id)
+ instance = self.compute_api.get(context, instance_uuid)
+ output = password.extract_password(instance)
+ # NOTE(vish): this should be timestamp from the metadata fields
+ # but it isn't important enough to implement properly
+ now = timeutils.utcnow()
+ return {"InstanceId": ec2_id,
+ "Timestamp": now,
+ "passwordData": output}
+
def get_console_output(self, context, instance_id, **kwargs):
LOG.audit(_("Get console output for instance %s"), instance_id,
context=context)
diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py
index b30a3ddeb..562473121 100644
--- a/nova/tests/api/ec2/test_cloud.py
+++ b/nova/tests/api/ec2/test_cloud.py
@@ -30,6 +30,7 @@ import fixtures
from nova.api.ec2 import cloud
from nova.api.ec2 import ec2utils
from nova.api.ec2 import inst_state
+from nova.api.metadata import password
from nova.compute import api as compute_api
from nova.compute import power_state
from nova.compute import utils as compute_utils
@@ -1387,6 +1388,17 @@ class CloudTestCase(test.TestCase):
instance_id = rv['instancesSet'][0]['instanceId']
return instance_id
+ def test_get_password_data(self):
+ instance_id = self._run_instance(
+ image_id='ami-1',
+ instance_type=CONF.default_instance_type,
+ max_count=1)
+ self.stubs.Set(password, 'extract_password', lambda i: 'fakepass')
+ output = self.cloud.get_password_data(context=self.context,
+ instance_id=[instance_id])
+ self.assertEquals(output['passwordData'], 'fakepass')
+ rv = self.cloud.terminate_instances(self.context, [instance_id])
+
def test_console_output(self):
instance_id = self._run_instance(
image_id='ami-1',