summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Gran <stephen.gran@guardian.co.uk>2013-01-24 16:55:40 +0000
committerStephen Gran <stephen.gran@guardian.co.uk>2013-01-29 08:11:05 +0000
commitd3b62c1b49e4dc05d266ce679724c236456f863d (patch)
tree10d5d86a6032f854c1a02a4ead1ba9f784048955
parentce09c50c9253131396f713edbf11ca427341be0e (diff)
downloadnova-d3b62c1b49e4dc05d266ce679724c236456f863d.tar.gz
nova-d3b62c1b49e4dc05d266ce679724c236456f863d.tar.xz
nova-d3b62c1b49e4dc05d266ce679724c236456f863d.zip
Pass parameter 'filter' back to model layer
This allows the API to pass back additional arguments to filter search results by. This will be useful for resource tagging or other filters. DocImpact: Adds 'Filter' parameter to DescribeInstance (see http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstances.html) Fixes: bug #922835 Change-Id: I58cc12df650829ed7eb685184a22186d8a5406f4 Signed-off-by: Stephen Gran <stephen.gran@guardian.co.uk>
-rw-r--r--nova/api/ec2/cloud.py6
-rw-r--r--nova/tests/api/ec2/test_cloud.py13
2 files changed, 18 insertions, 1 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index 48b0f632f..05fb0a7f9 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -991,18 +991,22 @@ class CloudController(object):
def describe_instances(self, context, **kwargs):
# Optional DescribeInstances argument
instance_id = kwargs.get('instance_id', None)
+ filters = kwargs.get('filter', None)
instances = self._enforce_valid_instance_ids(context, instance_id)
return self._format_describe_instances(context,
instance_id=instance_id,
- instance_cache=instances)
+ instance_cache=instances,
+ filter=filters)
def describe_instances_v6(self, context, **kwargs):
# Optional DescribeInstancesV6 argument
instance_id = kwargs.get('instance_id', None)
+ filters = kwargs.get('filter', None)
instances = self._enforce_valid_instance_ids(context, instance_id)
return self._format_describe_instances(context,
instance_id=instance_id,
instance_cache=instances,
+ filter=filters,
use_v6=True)
def _format_describe_instances(self, context, **kwargs):
diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py
index a00dceff1..c60a0148e 100644
--- a/nova/tests/api/ec2/test_cloud.py
+++ b/nova/tests/api/ec2/test_cloud.py
@@ -824,6 +824,19 @@ class CloudTestCase(test.TestCase):
self.cloud.describe_instances, self.context,
instance_id=[instance_id])
+ def test_describe_instances_with_filters(self):
+ # Makes sure describe_instances works and filters results.
+ filters = {'filter': [{'name': 'test',
+ 'value': ['a', 'b']},
+ {'name': 'another_test',
+ 'value': 'a string'}]}
+
+ self._stub_instance_get_with_fixed_ips('get_all')
+ self._stub_instance_get_with_fixed_ips('get')
+
+ result = self.cloud.describe_instances(self.context, **filters)
+ self.assertEqual(result, {'reservationSet': []})
+
def test_describe_instances_sorting(self):
# Makes sure describe_instances works and is sorted as expected.
self.flags(use_ipv6=True)