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:
commit
4830cb5d89
|
@ -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:
|
||||
|
|
|
@ -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])
|
||||
|
|
Loading…
Reference in New Issue