diff options
author | Stephen Gran <stephen.gran@guardian.co.uk> | 2013-01-24 16:55:40 +0000 |
---|---|---|
committer | Stephen Gran <stephen.gran@guardian.co.uk> | 2013-01-29 08:11:05 +0000 |
commit | d3b62c1b49e4dc05d266ce679724c236456f863d (patch) | |
tree | 10d5d86a6032f854c1a02a4ead1ba9f784048955 | |
parent | ce09c50c9253131396f713edbf11ca427341be0e (diff) | |
download | nova-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.py | 6 | ||||
-rw-r--r-- | nova/tests/api/ec2/test_cloud.py | 13 |
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) |