Fixes describe_instances to filter by a list of instance_ids.

Also adds a test to verify that we don't break this again.
This commit is contained in:
Vishvananda Ishaya 2011-01-10 14:49:34 +00:00 committed by Tarmac
commit 4830cb5d89
2 changed files with 27 additions and 8 deletions

View File

@ -25,7 +25,6 @@ datastore.
import base64
import datetime
import IPy
import re
import os
from nova import compute
@ -35,7 +34,6 @@ from nova import db
from nova import exception
from nova import flags
from nova import log as logging
from nova import quota
from nova import network
from nova import rpc
from nova import utils
@ -596,19 +594,24 @@ class CloudController(object):
return [{label: x} for x in lst]
def describe_instances(self, context, **kwargs):
return self._format_describe_instances(context)
return self._format_describe_instances(context, **kwargs)
def _format_describe_instances(self, context):
return {'reservationSet': self._format_instances(context)}
def _format_describe_instances(self, context, **kwargs):
return {'reservationSet': self._format_instances(context, **kwargs)}
def _format_run_instances(self, context, reservation_id):
i = self._format_instances(context, reservation_id=reservation_id)
assert len(i) == 1
return i[0]
def _format_instances(self, context, **kwargs):
def _format_instances(self, context, instance_id=None, **kwargs):
reservations = {}
instances = self.compute_api.get_all(context, **kwargs)
# NOTE(vish): instance_id is an optional list of ids to filter by
if instance_id:
instance_id = [ec2_id_to_id(x) for x in instance_id]
instances = [self.compute_api.get(context, x) for x in instance_id]
else:
instances = self.compute_api.get_all(context, **kwargs)
for instance in instances:
if not context.user.is_admin():
if instance['image_id'] == FLAGS.vpn_image_id:

View File

@ -133,6 +133,23 @@ class CloudTestCase(test.TestCase):
db.volume_destroy(self.context, vol1['id'])
db.volume_destroy(self.context, vol2['id'])
def test_describe_instances(self):
"""Makes sure describe_instances works and filters results."""
inst1 = db.instance_create(self.context, {'reservation_id': 'a'})
inst2 = db.instance_create(self.context, {'reservation_id': 'a'})
result = self.cloud.describe_instances(self.context)
result = result['reservationSet'][0]
self.assertEqual(len(result['instancesSet']), 2)
instance_id = cloud.id_to_ec2_id(inst2['id'])
result = self.cloud.describe_instances(self.context,
instance_id=[instance_id])
result = result['reservationSet'][0]
self.assertEqual(len(result['instancesSet']), 1)
self.assertEqual(result['instancesSet'][0]['instanceId'],
instance_id)
db.instance_destroy(self.context, inst1['id'])
db.instance_destroy(self.context, inst2['id'])
def test_console_output(self):
image_id = FLAGS.default_image
instance_type = FLAGS.default_instance_type
@ -141,7 +158,6 @@ class CloudTestCase(test.TestCase):
'instance_type': instance_type,
'max_count': max_count}
rv = self.cloud.run_instances(self.context, **kwargs)
print rv
instance_id = rv['instancesSet'][0]['instanceId']
output = self.cloud.get_console_output(context=self.context,
instance_id=[instance_id])