summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Behrens <cbehrens@codestud.com>2012-10-25 23:44:34 -0700
committerChris Behrens <cbehrens@codestud.com>2012-10-27 14:18:19 -0700
commit21b0bf7eeed72dffa2628dc8ebb7d0c6e371cc1c (patch)
tree9ba31bdbdb0416719d56ece4ee5fda74f975b5ac
parent07fb04a00b00ec58f3ecf7a40abd6b7161915cac (diff)
downloadnova-21b0bf7eeed72dffa2628dc8ebb7d0c6e371cc1c.tar.gz
nova-21b0bf7eeed72dffa2628dc8ebb7d0c6e371cc1c.tar.xz
nova-21b0bf7eeed72dffa2628dc8ebb7d0c6e371cc1c.zip
Make instance_get_all() not require admin context
Helps to clean up tests which use this method. Change-Id: Ic707b1d1b679b983b4d2b7dcad5a5a33ed771d3c
-rw-r--r--nova/db/sqlalchemy/api.py8
-rw-r--r--nova/tests/compute/test_compute.py38
2 files changed, 26 insertions, 20 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 888bb83a5..da8c559c6 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -1519,7 +1519,7 @@ def _build_instance_get(context, session=None):
options(joinedload('instance_type'))
-@require_admin_context
+@require_context
def instance_get_all(context, columns_to_join=None):
if columns_to_join is None:
columns_to_join = ['info_cache', 'security_groups',
@@ -1527,6 +1527,12 @@ def instance_get_all(context, columns_to_join=None):
query = model_query(context, models.Instance)
for column in columns_to_join:
query = query.options(joinedload(column))
+ if not context.is_admin:
+ # If we're not admin context, add appropriate filter..
+ if context.project_id:
+ query = query.filter_by(project_id=context.project_id)
+ else:
+ query = query.filter_by(user_id=context.user_id)
return query.all()
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index b0a2b1d92..cfcd1a7a3 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -275,7 +275,7 @@ class ComputeTestCase(BaseTestCase):
try:
self.compute.run_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
instance = instances[0]
self.assertTrue(instance.config_drive)
@@ -290,7 +290,7 @@ class ComputeTestCase(BaseTestCase):
try:
self.compute.run_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
instance = instances[0]
self.assertTrue(instance.config_drive)
@@ -519,7 +519,7 @@ class ComputeTestCase(BaseTestCase):
try:
self.compute.run_instance(self.context, instance=instance,
is_first_time=True)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
instance = instances[0]
self.assertEqual(instance.access_ip_v4, '192.168.1.100')
@@ -533,7 +533,7 @@ class ComputeTestCase(BaseTestCase):
try:
self.compute.run_instance(self.context, instance=instance,
is_first_time=True)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
instance = instances[0]
self.assertFalse(instance.access_ip_v4)
@@ -624,13 +624,13 @@ class ComputeTestCase(BaseTestCase):
self.compute.run_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
LOG.info(_("Running instances: %s"), instances)
self.assertEqual(len(instances), 1)
self.compute.terminate_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
LOG.info(_("After terminating instances: %s"), instances)
self.assertEqual(len(instances), 0)
@@ -642,7 +642,7 @@ class ComputeTestCase(BaseTestCase):
self.compute.run_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
LOG.info(_("Running instances: %s"), instances)
self.assertEqual(len(instances), 1)
@@ -665,7 +665,7 @@ class ComputeTestCase(BaseTestCase):
self.compute.terminate_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
LOG.info(_("After terminating instances: %s"), instances)
self.assertEqual(len(instances), 0)
bdms = db.block_device_mapping_get_all_by_instance(self.context,
@@ -678,7 +678,7 @@ class ComputeTestCase(BaseTestCase):
self.compute.run_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
LOG.info(_("Running instances: %s"), instances)
self.assertEqual(len(instances), 1)
@@ -691,7 +691,7 @@ class ComputeTestCase(BaseTestCase):
self.compute.terminate_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
LOG.info(_("After terminating instances: %s"), instances)
self.assertEqual(len(instances), 0)
@@ -703,7 +703,7 @@ class ComputeTestCase(BaseTestCase):
self.compute.run_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
LOG.info(_("Running instances: %s"), instances)
self.assertEqual(len(instances), 1)
@@ -721,7 +721,7 @@ class ComputeTestCase(BaseTestCase):
except TypeError:
pass
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
LOG.info(_("After terminating instances: %s"), instances)
self.assertEqual(len(instances), 1)
self.assertEqual(instances[0]['task_state'], 'deleting')
@@ -1163,7 +1163,7 @@ class ComputeTestCase(BaseTestCase):
def _assert_state(self, state_dict):
"""Assert state of VM is equal to state passed as parameter"""
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
self.assertEqual(len(instances), 1)
if 'vm_state' in state_dict:
@@ -2330,7 +2330,7 @@ class ComputeTestCase(BaseTestCase):
self.compute.run_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
+ instances = db.instance_get_all(self.context)
LOG.info(_("Running instances: %s"), instances)
self.assertEqual(len(instances), 1)
@@ -2341,7 +2341,7 @@ class ComputeTestCase(BaseTestCase):
ctxt = context.get_admin_context()
self.compute._sync_power_states(ctxt)
- instances = db.instance_get_all(ctxt)
+ instances = db.instance_get_all(self.context)
LOG.info(_("After force-killing instances: %s"), instances)
self.assertEqual(len(instances), 1)
self.assertEqual(task_states.STOPPING, instances[0]['task_state'])
@@ -2899,7 +2899,7 @@ class ComputeAPITestCase(BaseTestCase):
def test_create_instance_with_invalid_security_group_raises(self):
instance_type = instance_types.get_default_instance_type()
- pre_build_len = len(db.instance_get_all(context.get_admin_context()))
+ pre_build_len = len(db.instance_get_all(self.context))
self.assertRaises(exception.SecurityGroupNotFoundForProject,
self.compute_api.create,
self.context,
@@ -2907,7 +2907,7 @@ class ComputeAPITestCase(BaseTestCase):
image_href=None,
security_group=['this_is_a_fake_sec_group'])
self.assertEqual(pre_build_len,
- len(db.instance_get_all(context.get_admin_context())))
+ len(db.instance_get_all(self.context)))
def test_create_with_large_user_data(self):
"""Test an instance type with too much user data."""
@@ -4451,8 +4451,8 @@ class ComputeAPITestCase(BaseTestCase):
params={'architecture': ''}))
try:
self.compute.run_instance(self.context, instance=instance)
- instances = db.instance_get_all(context.get_admin_context())
- instance = instances[0]
+ instance = db.instance_get_by_uuid(self.context,
+ instance['uuid'])
self.assertNotEqual(instance['architecture'], 'Unknown')
finally:
db.instance_destroy(self.context, instance['uuid'])