diff options
| author | Joe Gordon <jogo@cloudscaling.com> | 2012-11-28 16:31:57 -0800 |
|---|---|---|
| committer | Joe Gordon <joe.gordon0@gmail.com> | 2012-11-28 20:48:40 -0800 |
| commit | 4e6bae7a00a1a5768a20f54f484299d7396123d5 (patch) | |
| tree | 1867837292d048ed15bf03198bc9e42f26239b4a | |
| parent | 0666348b033b1838eef37c0f7e9db0d9e7bcb03a (diff) | |
| download | nova-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.py | 25 | ||||
| -rw-r--r-- | nova/compute/api.py | 18 | ||||
| -rw-r--r-- | nova/tests/api/ec2/test_cloud.py | 6 | ||||
| -rw-r--r-- | nova/tests/compute/test_compute.py | 26 | ||||
| -rw-r--r-- | nova/tests/compute/test_compute_utils.py | 8 |
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)) |
