summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Gordon <jogo@cloudscaling.com>2012-11-28 16:31:57 -0800
committerJoe Gordon <joe.gordon0@gmail.com>2012-11-28 20:48:40 -0800
commit4e6bae7a00a1a5768a20f54f484299d7396123d5 (patch)
tree1867837292d048ed15bf03198bc9e42f26239b4a
parent0666348b033b1838eef37c0f7e9db0d9e7bcb03a (diff)
downloadnova-4e6bae7a00a1a5768a20f54f484299d7396123d5.tar.gz
nova-4e6bae7a00a1a5768a20f54f484299d7396123d5.tar.xz
nova-4e6bae7a00a1a5768a20f54f484299d7396123d5.zip
Access DB values as dict not as attributes
We cannot assume nova.db.api will be returning sqlalchemy objects with attributes, instead treat return values as dicts Part of blueprint db-api-cleanup Change-Id: Icb955118aabff1d8f9ee7c3e95f8f2b3ffc671ee
-rw-r--r--nova/api/ec2/cloud.py25
-rw-r--r--nova/compute/api.py18
-rw-r--r--nova/tests/api/ec2/test_cloud.py6
-rw-r--r--nova/tests/compute/test_compute.py26
-rw-r--r--nova/tests/compute/test_compute_utils.py8
5 files changed, 42 insertions, 41 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py
index df6f17fb0..ab59205a9 100644
--- a/nova/api/ec2/cloud.py
+++ b/nova/api/ec2/cloud.py
@@ -242,7 +242,7 @@ class CloudController(object):
disabled_services = db.service_get_all(context, True)
available_zones = []
- for zone in [service.availability_zone for service
+ for zone in [service['availability_zone'] for service
in enabled_services]:
if not zone in available_zones:
available_zones.append(zone)
@@ -277,12 +277,13 @@ class CloudController(object):
zone_hosts = {}
host_services = {}
for service in enabled_services:
- zone_hosts.setdefault(service.availability_zone, [])
- if not service.host in zone_hosts[service.availability_zone]:
- zone_hosts[service.availability_zone].append(service.host)
+ zone_hosts.setdefault(service['availability_zone'], [])
+ if not service['host'] in zone_hosts[service['availability_zone']]:
+ zone_hosts[service['availability_zone']].append(
+ service['host'])
- host_services.setdefault(service.host, [])
- host_services[service.host].append(service)
+ host_services.setdefault(service['host'], [])
+ host_services[service['host']].append(service)
result = []
for zone in available_zones:
@@ -475,11 +476,11 @@ class CloudController(object):
def _format_security_group(self, context, group):
g = {}
- g['groupDescription'] = group.description
- g['groupName'] = group.name
- g['ownerId'] = group.project_id
+ g['groupDescription'] = group['description']
+ g['groupName'] = group['name']
+ g['ownerId'] = group['project_id']
g['ipPermissions'] = []
- for rule in group.rules:
+ for rule in group['rules']:
r = {}
r['groups'] = []
r['ipRanges'] = []
@@ -612,7 +613,7 @@ class CloudController(object):
rulesvalues = self._rule_args_to_dict(context, values)
self._validate_rulevalues(rulesvalues)
for values_for_rule in rulesvalues:
- values_for_rule['parent_group_id'] = security_group.id
+ values_for_rule['parent_group_id'] = security_group['id']
rule_ids.append(self.security_group_api.rule_exists(
security_group, values_for_rule))
@@ -645,7 +646,7 @@ class CloudController(object):
rulesvalues = self._rule_args_to_dict(context, values)
self._validate_rulevalues(rulesvalues)
for values_for_rule in rulesvalues:
- values_for_rule['parent_group_id'] = security_group.id
+ values_for_rule['parent_group_id'] = security_group['id']
if self.security_group_api.rule_exists(security_group,
values_for_rule):
err = _('%s - This rule already exists in group')
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 79db499bd..e377b0e32 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -2152,7 +2152,7 @@ class AggregateAPI(base.Base):
def create_aggregate(self, context, aggregate_name, availability_zone):
"""Creates the model for the aggregate."""
- zones = [s.availability_zone for s in
+ zones = [s['availability_zone'] for s in
self.db.service_get_all_by_topic(context,
CONF.compute_topic)]
if availability_zone in zones:
@@ -2214,7 +2214,7 @@ class AggregateAPI(base.Base):
# validates the host; ComputeHostNotFound is raised if invalid
service = self.db.service_get_all_compute_by_host(context, host)[0]
aggregate = self.db.aggregate_get(context, aggregate_id)
- if service.availability_zone != aggregate.availability_zone:
+ if service['availability_zone'] != aggregate['availability_zone']:
raise exception.InvalidAggregateAction(
action='add host',
aggregate_id=aggregate_id,
@@ -2237,8 +2237,8 @@ class AggregateAPI(base.Base):
def _get_aggregate_info(self, context, aggregate):
"""Builds a dictionary with aggregate props, metadata and hosts."""
- metadata = self.db.aggregate_metadata_get(context, aggregate.id)
- hosts = self.db.aggregate_host_get_all(context, aggregate.id)
+ metadata = self.db.aggregate_metadata_get(context, aggregate['id'])
+ hosts = self.db.aggregate_host_get_all(context, aggregate['id'])
result = dict(aggregate.iteritems())
# metadetails was not originally included here. We need to pull it
# back out to maintain API stability.
@@ -2473,7 +2473,7 @@ class SecurityGroupAPI(base.Base):
return groups
def destroy(self, context, security_group):
- if self.db.security_group_in_use(context, security_group.id):
+ if self.db.security_group_in_use(context, security_group['id']):
msg = _("Security group is still in use")
self.raise_invalid_group(msg)
@@ -2485,12 +2485,12 @@ class SecurityGroupAPI(base.Base):
LOG.exception(_("Failed to update usages deallocating "
"security group"))
- LOG.audit(_("Delete security group %s"), security_group.name,
+ LOG.audit(_("Delete security group %s"), security_group['name'],
context=context)
- self.db.security_group_destroy(context, security_group.id)
+ self.db.security_group_destroy(context, security_group['id'])
self.sgh.trigger_security_group_destroy_refresh(context,
- security_group.id)
+ security_group['id'])
# Commit the reservations
if reservations:
@@ -2726,7 +2726,7 @@ class SecurityGroupAPI(base.Base):
"""Indicates whether the specified rule values are already
defined in the given security group.
"""
- for rule in security_group.rules:
+ for rule in security_group['rules']:
is_duplicate = True
keys = ('group_id', 'cidr', 'from_port', 'to_port', 'protocol')
for key in keys:
diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py
index 6a3caa0e5..bed4ac25b 100644
--- a/nova/tests/api/ec2/test_cloud.py
+++ b/nova/tests/api/ec2/test_cloud.py
@@ -660,9 +660,9 @@ class CloudTestCase(test.TestCase):
self.project_id, 'testgrp1')
get_rules = db.security_group_rule_get_by_security_group
- self.assertTrue(get_rules(self.context, group1.id))
+ self.assertTrue(get_rules(self.context, group1['id']))
self.cloud.delete_security_group(self.context, 'testgrp2')
- self.assertFalse(get_rules(self.context, group1.id))
+ self.assertFalse(get_rules(self.context, group1['id']))
def test_delete_security_group_in_use_by_instance(self):
"""Ensure that a group can not be deleted if in use by an instance."""
@@ -680,7 +680,7 @@ class CloudTestCase(test.TestCase):
'description': 'Test group'}
group = db.security_group_create(self.context, args)
- db.instance_add_security_group(self.context, inst.uuid, group.id)
+ db.instance_add_security_group(self.context, inst['uuid'], group['id'])
self.assertRaises(exception.InvalidGroup,
self.cloud.delete_security_group,
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index 96d1f4250..c4be414da 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -297,7 +297,7 @@ class ComputeTestCase(BaseTestCase):
instances = db.instance_get_all(self.context)
instance = instances[0]
- self.assertTrue(instance.config_drive)
+ self.assertTrue(instance['config_drive'])
finally:
db.instance_destroy(self.context, instance['uuid'])
@@ -312,7 +312,7 @@ class ComputeTestCase(BaseTestCase):
instances = db.instance_get_all(self.context)
instance = instances[0]
- self.assertTrue(instance.config_drive)
+ self.assertTrue(instance['config_drive'])
finally:
db.instance_destroy(self.context, instance['uuid'])
@@ -532,8 +532,8 @@ class ComputeTestCase(BaseTestCase):
instances = db.instance_get_all(self.context)
instance = instances[0]
- self.assertEqual(instance.access_ip_v4, '192.168.1.100')
- self.assertEqual(instance.access_ip_v6, '2001:db8:0:1::1')
+ self.assertEqual(instance['access_ip_v4'], '192.168.1.100')
+ self.assertEqual(instance['access_ip_v6'], '2001:db8:0:1::1')
finally:
db.instance_destroy(self.context, instance['uuid'])
@@ -546,8 +546,8 @@ class ComputeTestCase(BaseTestCase):
instances = db.instance_get_all(self.context)
instance = instances[0]
- self.assertFalse(instance.access_ip_v4)
- self.assertFalse(instance.access_ip_v6)
+ self.assertFalse(instance['access_ip_v4'])
+ self.assertFalse(instance['access_ip_v6'])
finally:
db.instance_destroy(self.context, instance['uuid'])
@@ -1368,7 +1368,7 @@ class ComputeTestCase(BaseTestCase):
self.assertEquals(payload['tenant_id'], self.project_id)
self.assertEquals(payload['image_name'], 'fake_name')
self.assertEquals(payload['user_id'], self.user_id)
- self.assertEquals(payload['instance_id'], inst_ref.uuid)
+ self.assertEquals(payload['instance_id'], inst_ref['uuid'])
self.assertEquals(payload['instance_type'], 'm1.tiny')
type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
self.assertEquals(str(payload['instance_type_id']), str(type_id))
@@ -2462,7 +2462,7 @@ class ComputeTestCase(BaseTestCase):
LOG.info(_("Running instances: %s"), instances)
self.assertEqual(len(instances), 1)
- instance_name = instances[0].name
+ instance_name = instances[0]['name']
self.compute.driver.test_remove_vm(instance_name)
# Force the compute manager to do its periodic poll
@@ -3048,7 +3048,7 @@ class ComputeAPITestCase(BaseTestCase):
self.assertEqual(len(db.security_group_get_by_instance(
self.context, ref[0]['id'])), 1)
group = db.security_group_get(self.context, group['id'])
- self.assert_(len(group.instances) == 1)
+ self.assert_(len(group['instances']) == 1)
finally:
db.security_group_destroy(self.context, group['id'])
db.instance_destroy(self.context, ref[0]['uuid'])
@@ -3152,7 +3152,7 @@ class ComputeAPITestCase(BaseTestCase):
try:
db.instance_destroy(self.context, ref[0]['uuid'])
group = db.security_group_get(self.context, group['id'])
- self.assert_(len(group.instances) == 0)
+ self.assert_(len(group['instances']) == 0)
finally:
db.security_group_destroy(self.context, group['id'])
@@ -3171,7 +3171,7 @@ class ComputeAPITestCase(BaseTestCase):
admin_deleted_context = context.get_admin_context(
read_deleted="only")
group = db.security_group_get(admin_deleted_context, group['id'])
- self.assert_(len(group.instances) == 0)
+ self.assert_(len(group['instances']) == 0)
finally:
db.instance_destroy(self.context, ref[0]['uuid'])
@@ -5294,7 +5294,7 @@ class ComputeAggrTestCase(BaseTestCase):
def test_add_aggregate_host_passes_slave_info_to_driver(self):
def driver_add_to_aggregate(context, aggregate, host, **kwargs):
self.assertEquals(self.context, context)
- self.assertEquals(aggregate['id'], self.aggr.id)
+ self.assertEquals(aggregate['id'], self.aggr['id'])
self.assertEquals(host, "the_host")
self.assertEquals("SLAVE_INFO", kwargs.get("slave_info"))
@@ -5308,7 +5308,7 @@ class ComputeAggrTestCase(BaseTestCase):
def test_remove_from_aggregate_passes_slave_info_to_driver(self):
def driver_remove_from_aggregate(context, aggregate, host, **kwargs):
self.assertEquals(self.context, context)
- self.assertEquals(aggregate['id'], self.aggr.id)
+ self.assertEquals(aggregate['id'], self.aggr['id'])
self.assertEquals(host, "the_host")
self.assertEquals("SLAVE_INFO", kwargs.get("slave_info"))
diff --git a/nova/tests/compute/test_compute_utils.py b/nova/tests/compute/test_compute_utils.py
index 3c725e4d1..144ac9f00 100644
--- a/nova/tests/compute/test_compute_utils.py
+++ b/nova/tests/compute/test_compute_utils.py
@@ -270,7 +270,7 @@ class UsageInfoTestCase(test.TestCase):
payload = msg['payload']
self.assertEquals(payload['tenant_id'], self.project_id)
self.assertEquals(payload['user_id'], self.user_id)
- self.assertEquals(payload['instance_id'], instance.uuid)
+ self.assertEquals(payload['instance_id'], instance['uuid'])
self.assertEquals(payload['instance_type'], 'm1.tiny')
type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
self.assertEquals(str(payload['instance_type_id']), str(type_id))
@@ -306,7 +306,7 @@ class UsageInfoTestCase(test.TestCase):
payload = msg['payload']
self.assertEquals(payload['tenant_id'], self.project_id)
self.assertEquals(payload['user_id'], self.user_id)
- self.assertEquals(payload['instance_id'], instance.uuid)
+ self.assertEquals(payload['instance_id'], instance['uuid'])
self.assertEquals(payload['instance_type'], 'm1.tiny')
type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
self.assertEquals(str(payload['instance_type_id']), str(type_id))
@@ -333,7 +333,7 @@ class UsageInfoTestCase(test.TestCase):
payload = msg['payload']
self.assertEquals(payload['tenant_id'], self.project_id)
self.assertEquals(payload['user_id'], self.user_id)
- self.assertEquals(payload['instance_id'], instance.uuid)
+ self.assertEquals(payload['instance_id'], instance['uuid'])
self.assertEquals(payload['instance_type'], 'm1.tiny')
type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
self.assertEquals(str(payload['instance_type_id']), str(type_id))
@@ -366,7 +366,7 @@ class UsageInfoTestCase(test.TestCase):
payload = msg['payload']
self.assertEquals(payload['tenant_id'], self.project_id)
self.assertEquals(payload['user_id'], self.user_id)
- self.assertEquals(payload['instance_id'], instance.uuid)
+ self.assertEquals(payload['instance_id'], instance['uuid'])
self.assertEquals(payload['instance_type'], 'm1.tiny')
type_id = instance_types.get_instance_type_by_name('m1.tiny')['id']
self.assertEquals(str(payload['instance_type_id']), str(type_id))