summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-04-30 14:28:14 +0000
committerGerrit Code Review <review@openstack.org>2012-04-30 14:28:14 +0000
commitba11ef122fd548eb4d4c39f4ccee489aa5a100f6 (patch)
tree17f932ea9657c7c8c932b1eb2329d4fc3333b2eb /nova/api
parent76bb37e049818cbde4ca890566d01e85439ce517 (diff)
parentb33eb7ec75f9e6ae66e7b92ea9e50f4b04955dbe (diff)
downloadnova-ba11ef122fd548eb4d4c39f4ccee489aa5a100f6.tar.gz
nova-ba11ef122fd548eb4d4c39f4ccee489aa5a100f6.tar.xz
nova-ba11ef122fd548eb4d4c39f4ccee489aa5a100f6.zip
Merge "Implements EC2 DescribeAddresses by specific PublicIp."
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 f64bc9492..b116249d7 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)