summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorMotoKen <motokentsai@gmail.com>2012-04-25 11:31:39 +0800
committerMotoKen <motokentsai@gmail.com>2012-04-25 19:57:27 +0800
commitb33eb7ec75f9e6ae66e7b92ea9e50f4b04955dbe (patch)
tree93da9679157b02aed73bc668817b3a874a736c13 /nova/api
parentd813d20c3b996f90974a3c02aa658b97df9f7607 (diff)
downloadnova-b33eb7ec75f9e6ae66e7b92ea9e50f4b04955dbe.tar.gz
nova-b33eb7ec75f9e6ae66e7b92ea9e50f4b04955dbe.tar.xz
nova-b33eb7ec75f9e6ae66e7b92ea9e50f4b04955dbe.zip
Implements EC2 DescribeAddresses by specific PublicIp.
Fix bug 988189 and add a test case to verify. Change-Id: I653c29cd99feee8d811c9f64dd280b6f49a5262c
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/ec2/cloud.py48
1 files changed, 25 insertions, 23 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 012afb9be..0e29b768d 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -1237,31 +1237,33 @@ class CloudController(object):
return list(reservations.values())
- def describe_addresses(self, context, **kwargs):
- return self.format_addresses(context)
-
- def format_addresses(self, context):
- addresses = []
- floaters = self.network_api.get_floating_ips_by_project(context)
- for floating_ip_ref in floaters:
- if floating_ip_ref['project_id'] is None:
- continue
- address = floating_ip_ref['address']
- ec2_id = None
- if floating_ip_ref['fixed_ip_id']:
- fixed_id = floating_ip_ref['fixed_ip_id']
- fixed = self.network_api.get_fixed_ip(context, fixed_id)
- if fixed['instance_id'] is not None:
- ec2_id = ec2utils.id_to_ec2_id(fixed['instance_id'])
- address_rv = {'public_ip': address,
- 'instance_id': ec2_id}
- if context.is_admin:
- details = "%s (%s)" % (address_rv['instance_id'],
- floating_ip_ref['project_id'])
- address_rv['instance_id'] = details
- addresses.append(address_rv)
+ def describe_addresses(self, context, public_ip=None, **kwargs):
+ if public_ip:
+ floatings = []
+ for address in public_ip:
+ floating = self.network_api.get_floating_ip_by_address(context,
+ address)
+ floatings.append(floating)
+ else:
+ floatings = self.network_api.get_floating_ips_by_project(context)
+ addresses = [self._format_address(context, f) for f in floatings]
return {'addressesSet': addresses}
+ def _format_address(self, context, floating_ip):
+ ec2_id = None
+ if floating_ip['fixed_ip_id']:
+ fixed_id = floating_ip['fixed_ip_id']
+ fixed = self.network_api.get_fixed_ip(context, fixed_id)
+ if fixed['instance_id'] is not None:
+ ec2_id = ec2utils.id_to_ec2_id(fixed['instance_id'])
+ address = {'public_ip': floating_ip['address'],
+ 'instance_id': ec2_id}
+ if context.is_admin:
+ details = "%s (%s)" % (address['instance_id'],
+ floating_ip['project_id'])
+ address['instance_id'] = details
+ return address
+
def allocate_address(self, context, **kwargs):
LOG.audit(_("Allocate address"), context=context)
public_ip = self.network_api.allocate_floating_ip(context)