From 03ae11664d6d42b02ea2996d0125bcdee87db754 Mon Sep 17 00:00:00 2001 From: Joe Gordon Date: Thu, 29 Nov 2012 17:10:30 -0800 Subject: Access DB values as dict not as attributes. Part 2 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: I39ccd2f110c258d69bb2d4d7078c672c6a6ef36e --- .../openstack/compute/contrib/security_groups.py | 26 ++-- nova/network/manager.py | 6 +- nova/tests/console/test_console.py | 2 +- nova/tests/scheduler/test_host_filters.py | 4 +- nova/tests/test_db_api.py | 146 ++++++++++----------- nova/virt/firewall.py | 14 +- 6 files changed, 99 insertions(+), 99 deletions(-) diff --git a/nova/api/openstack/compute/contrib/security_groups.py b/nova/api/openstack/compute/contrib/security_groups.py index c382ce1d5..73f025c4d 100644 --- a/nova/api/openstack/compute/contrib/security_groups.py +++ b/nova/api/openstack/compute/contrib/security_groups.py @@ -181,30 +181,30 @@ class SecurityGroupControllerBase(object): def _format_security_group_rule(self, context, rule): sg_rule = {} - sg_rule['id'] = rule.id - sg_rule['parent_group_id'] = rule.parent_group_id - sg_rule['ip_protocol'] = rule.protocol - sg_rule['from_port'] = rule.from_port - sg_rule['to_port'] = rule.to_port + sg_rule['id'] = rule['id'] + sg_rule['parent_group_id'] = rule['parent_group_id'] + sg_rule['ip_protocol'] = rule['protocol'] + sg_rule['from_port'] = rule['from_port'] + sg_rule['to_port'] = rule['to_port'] sg_rule['group'] = {} sg_rule['ip_range'] = {} - if rule.group_id: + if rule['group_id']: source_group = self.security_group_api.get(context, - id=rule.group_id) + id=rule['group_id']) sg_rule['group'] = {'name': source_group.name, 'tenant_id': source_group.project_id} else: - sg_rule['ip_range'] = {'cidr': rule.cidr} + sg_rule['ip_range'] = {'cidr': rule['cidr']} return sg_rule def _format_security_group(self, context, group): security_group = {} - security_group['id'] = group.id - security_group['description'] = group.description - security_group['name'] = group.name - security_group['tenant_id'] = group.project_id + security_group['id'] = group['id'] + security_group['description'] = group['description'] + security_group['name'] = group['name'] + security_group['tenant_id'] = group['project_id'] security_group['rules'] = [] - for rule in group.rules: + for rule in group['rules']: security_group['rules'] += [self._format_security_group_rule( context, rule)] return security_group diff --git a/nova/network/manager.py b/nova/network/manager.py index a7934159b..7583eaef9 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -765,14 +765,14 @@ class FloatingIP(object): def _prepare_domain_entry(self, context, domain): domainref = self.db.dnsdomain_get(context, domain) - scope = domainref.scope + scope = domainref['scope'] if scope == 'private': - av_zone = domainref.availability_zone + av_zone = domainref['availability_zone'] this_domain = {'domain': domain, 'scope': scope, 'availability_zone': av_zone} else: - project = domainref.project_id + project = domainref['project_id'] this_domain = {'domain': domain, 'scope': scope, 'project': project} diff --git a/nova/tests/console/test_console.py b/nova/tests/console/test_console.py index 9094b8154..65db24844 100644 --- a/nova/tests/console/test_console.py +++ b/nova/tests/console/test_console.py @@ -99,7 +99,7 @@ class ConsoleTestCase(test.TestCase): instance['host'], self.console.host, self.console.driver.console_type) - console_instances = [con['instance_uuid'] for con in pool.consoles] + console_instances = [con['instance_uuid'] for con in pool['consoles']] self.assert_(instance['uuid'] in console_instances) db.instance_destroy(self.context, instance['uuid']) diff --git a/nova/tests/scheduler/test_host_filters.py b/nova/tests/scheduler/test_host_filters.py index 1da29a7a7..c4cb485d4 100644 --- a/nova/tests/scheduler/test_host_filters.py +++ b/nova/tests/scheduler/test_host_filters.py @@ -771,7 +771,7 @@ class HostFiltersTestCase(test.TestCase): 'availability_zone': 'fake_avail_zone', } result = db.aggregate_create(self.context.elevated(), values, metadata) for host in hosts: - db.aggregate_host_add(self.context.elevated(), result.id, host) + db.aggregate_host_add(self.context.elevated(), result['id'], host) return result def _do_test_aggregate_filter_extra_specs(self, emeta, especs, passes): @@ -797,7 +797,7 @@ class HostFiltersTestCase(test.TestCase): {'memory_mb': 1024, 'extra_specs': extra_specs}} host = fakes.FakeHostState('host1', 'node1', {'free_ram_mb': 1024}) - db.aggregate_host_delete(self.context.elevated(), agg2.id, 'host1') + db.aggregate_host_delete(self.context.elevated(), agg2['id'], 'host1') self.assertFalse(filt_cls.host_passes(host, filter_properties)) def test_aggregate_filter_passes_extra_specs_simple(self): diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py index 713118f18..546aeaa97 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -145,12 +145,12 @@ class DbApiTestCase(test.TestCase): db.instance_destroy(self.context, inst1['uuid']) result = db.instance_get_all_by_filters(self.context, {}) self.assertEqual(2, len(result)) - self.assertIn(inst1.id, [result[0].id, result[1].id]) - self.assertIn(inst2.id, [result[0].id, result[1].id]) - if inst1.id == result[0].id: - self.assertTrue(result[0].deleted) + self.assertIn(inst1['id'], [result[0]['id'], result[1]['id']]) + self.assertIn(inst2['id'], [result[0]['id'], result[1]['id']]) + if inst1['id'] == result[0]['id']: + self.assertTrue(result[0]['deleted']) else: - self.assertTrue(result[1].deleted) + self.assertTrue(result[1]['deleted']) def test_instance_get_all_by_filters_paginate(self): self.flags(sql_connection="notdb://") @@ -210,7 +210,7 @@ class DbApiTestCase(test.TestCase): results = db.migration_get_unconfirmed_by_dest_compute(ctxt, 10, 'fake_host2') self.assertEqual(1, len(results)) - db.migration_update(ctxt, migration.id, {"status": "CONFIRMED"}) + db.migration_update(ctxt, migration['id'], {"status": "CONFIRMED"}) # Ensure the new migration is not returned. updated_at = timeutils.utcnow() @@ -220,7 +220,7 @@ class DbApiTestCase(test.TestCase): results = db.migration_get_unconfirmed_by_dest_compute(ctxt, 10, "fake_host2") self.assertEqual(0, len(results)) - db.migration_update(ctxt, migration.id, {"status": "CONFIRMED"}) + db.migration_update(ctxt, migration['id'], {"status": "CONFIRMED"}) def test_instance_get_all_hung_in_rebooting(self): ctxt = context.get_admin_context() @@ -250,16 +250,16 @@ class DbApiTestCase(test.TestCase): ctxt = context.get_admin_context() values = {'host': 'localhost', 'project_id': 'project1'} network = db.network_create_safe(ctxt, values) - self.assertNotEqual(None, network.uuid) - self.assertEqual(36, len(network.uuid)) - db_network = db.network_get(ctxt, network.id) - self.assertEqual(network.uuid, db_network.uuid) + self.assertNotEqual(None, network['uuid']) + self.assertEqual(36, len(network['uuid'])) + db_network = db.network_get(ctxt, network['id']) + self.assertEqual(network['uuid'], db_network['uuid']) def test_network_delete_safe(self): ctxt = context.get_admin_context() values = {'host': 'localhost', 'project_id': 'project1'} network = db.network_create_safe(ctxt, values) - db_network = db.network_get(ctxt, network.id) + db_network = db.network_get(ctxt, network['id']) values = {'network_id': network['id'], 'address': 'fake1'} address1 = db.fixed_ip_create(ctxt, values) values = {'network_id': network['id'], @@ -300,11 +300,11 @@ class DbApiTestCase(test.TestCase): # Retrieve the user-provided metadata to ensure it was successfully # updated - instance_meta = db.instance_metadata_get(ctxt, instance.uuid) + instance_meta = db.instance_metadata_get(ctxt, instance['uuid']) self.assertEqual('bar', instance_meta['host']) # Retrieve the system metadata to ensure it was successfully updated - system_meta = db.instance_system_metadata_get(ctxt, instance.uuid) + system_meta = db.instance_system_metadata_get(ctxt, instance['uuid']) self.assertEqual('baz', system_meta['original_image_ref']) def test_instance_update_of_instance_type_id(self): @@ -509,16 +509,16 @@ class DbApiTestCase(test.TestCase): db.dnsdomain_register_for_zone(ctxt, domain1, testzone) domain_ref = db.dnsdomain_get(ctxt, domain1) - zone = domain_ref.availability_zone - scope = domain_ref.scope + zone = domain_ref['availability_zone'] + scope = domain_ref['scope'] self.assertEqual(scope, 'private') self.assertEqual(zone, testzone) db.dnsdomain_register_for_project(ctxt, domain2, self.project_id) domain_ref = db.dnsdomain_get(ctxt, domain2) - project = domain_ref.project_id - scope = domain_ref.scope + project = domain_ref['project_id'] + scope = domain_ref['scope'] self.assertEqual(project, self.project_id) self.assertEqual(scope, 'public') @@ -736,7 +736,7 @@ def _create_aggregate_with_hosts(context=context.get_admin_context(), result = _create_aggregate(context=context, values=values, metadata=metadata) for host in hosts: - db.aggregate_host_add(context, result.id, host) + db.aggregate_host_add(context, result['id'], host) return result @@ -750,16 +750,16 @@ class AggregateDBApiTestCase(test.TestCase): def test_aggregate_create(self): """Ensure aggregate can be created with no metadata.""" result = _create_aggregate(metadata=None) - self.assertEquals(result.name, 'fake_aggregate') + self.assertEquals(result['name'], 'fake_aggregate') def test_aggregate_create_avoid_name_conflict(self): """Test we can avoid conflict on deleted aggregates.""" r1 = _create_aggregate(metadata=None) - db.aggregate_delete(context.get_admin_context(), r1.id) - values = {'name': r1.name, 'availability_zone': 'new_zone'} + db.aggregate_delete(context.get_admin_context(), r1['id']) + values = {'name': r1['name'], 'availability_zone': 'new_zone'} r2 = _create_aggregate(values=values) - self.assertEqual(r2.name, values['name']) - self.assertEqual(r2.availability_zone, values['availability_zone']) + self.assertEqual(r2['name'], values['name']) + self.assertEqual(r2['availability_zone'], values['availability_zone']) def test_aggregate_create_raise_exist_exc(self): """Ensure aggregate names are distinct.""" @@ -815,9 +815,9 @@ class AggregateDBApiTestCase(test.TestCase): """Ensure we can get aggregate with all its relations.""" ctxt = context.get_admin_context() result = _create_aggregate_with_hosts(context=ctxt) - expected = db.aggregate_get(ctxt, result.id) - self.assertEqual(_get_fake_aggr_hosts(), expected.hosts) - self.assertEqual(_get_fake_aggr_metadata(), expected.metadetails) + expected = db.aggregate_get(ctxt, result['id']) + self.assertEqual(_get_fake_aggr_hosts(), expected['hosts']) + self.assertEqual(_get_fake_aggr_metadata(), expected['metadetails']) def test_aggregate_get_by_host(self): """Ensure we can get aggregates by host.""" @@ -827,7 +827,7 @@ class AggregateDBApiTestCase(test.TestCase): a1 = _create_aggregate_with_hosts(context=ctxt) a2 = _create_aggregate_with_hosts(context=ctxt, values=values) r1 = db.aggregate_get_by_host(ctxt, 'foo.openstack.org') - self.assertEqual([a1.id, a2.id], [x.id for x in r1]) + self.assertEqual([a1['id'], a2['id']], [x['id'] for x in r1]) def test_aggregate_get_by_host_with_key(self): """Ensure we can get aggregates by host.""" @@ -839,7 +839,7 @@ class AggregateDBApiTestCase(test.TestCase): a2 = _create_aggregate_with_hosts(context=ctxt, values=values) # filter result by key r1 = db.aggregate_get_by_host(ctxt, 'foo.openstack.org', key='goodkey') - self.assertEqual([a1.id], [x.id for x in r1]) + self.assertEqual([a1['id']], [x['id'] for x in r1]) def test_aggregate_metdata_get_by_host(self): """Ensure we can get aggregates by host.""" @@ -872,7 +872,7 @@ class AggregateDBApiTestCase(test.TestCase): self.assertEqual(r1['good'], set(['value'])) self.assertFalse('fake_key1' in r1) # Delete metadata - db.aggregate_metadata_delete(ctxt, a3.id, 'good') + db.aggregate_metadata_delete(ctxt, a3['id'], 'good') r2 = db.aggregate_metadata_get_by_host(ctxt, 'foo.openstack.org', key='good') self.assertFalse('good' in r2) @@ -901,7 +901,7 @@ class AggregateDBApiTestCase(test.TestCase): self.assertEqual(0, len(expected)) aggregate = db.aggregate_get(ctxt.elevated(read_deleted='yes'), result['id']) - self.assertEqual(aggregate.deleted, True) + self.assertEqual(aggregate['deleted'], True) def test_aggregate_update(self): """Ensure an aggregate can be updated.""" @@ -910,8 +910,8 @@ class AggregateDBApiTestCase(test.TestCase): new_values = _get_fake_aggr_values() new_values['availability_zone'] = 'different_avail_zone' updated = db.aggregate_update(ctxt, 1, new_values) - self.assertNotEqual(result.availability_zone, - updated.availability_zone) + self.assertNotEqual(result['availability_zone'], + updated['availability_zone']) def test_aggregate_update_with_metadata(self): """Ensure an aggregate can be updated with metadata.""" @@ -920,7 +920,7 @@ class AggregateDBApiTestCase(test.TestCase): values = _get_fake_aggr_values() values['metadata'] = _get_fake_aggr_metadata() db.aggregate_update(ctxt, 1, values) - expected = db.aggregate_metadata_get(ctxt, result.id) + expected = db.aggregate_metadata_get(ctxt, result['id']) self.assertThat(_get_fake_aggr_metadata(), matchers.DictMatches(expected)) @@ -932,7 +932,7 @@ class AggregateDBApiTestCase(test.TestCase): values['metadata'] = _get_fake_aggr_metadata() values['metadata']['fake_key1'] = 'foo' db.aggregate_update(ctxt, 1, values) - expected = db.aggregate_metadata_get(ctxt, result.id) + expected = db.aggregate_metadata_get(ctxt, result['id']) self.assertThat(values['metadata'], matchers.DictMatches(expected)) def test_aggregate_update_raise_not_found(self): @@ -968,7 +968,7 @@ class AggregateDBApiTestCase(test.TestCase): aggregates.append(_create_aggregate(context=ctxt, values=values, metadata=None)) for c in xrange(1, remove_counter): - db.aggregate_delete(ctxt, aggregates[c - 1].id) + db.aggregate_delete(ctxt, aggregates[c - 1]['id']) results = db.aggregate_get_all(ctxt) self.assertEqual(len(results), add_counter - remove_counter) @@ -977,8 +977,8 @@ class AggregateDBApiTestCase(test.TestCase): ctxt = context.get_admin_context() result = _create_aggregate(context=ctxt, metadata=None) metadata = _get_fake_aggr_metadata() - db.aggregate_metadata_add(ctxt, result.id, metadata) - expected = db.aggregate_metadata_get(ctxt, result.id) + db.aggregate_metadata_add(ctxt, result['id'], metadata) + expected = db.aggregate_metadata_get(ctxt, result['id']) self.assertThat(metadata, matchers.DictMatches(expected)) def test_aggregate_metadata_update(self): @@ -987,10 +987,10 @@ class AggregateDBApiTestCase(test.TestCase): result = _create_aggregate(context=ctxt) metadata = _get_fake_aggr_metadata() key = metadata.keys()[0] - db.aggregate_metadata_delete(ctxt, result.id, key) + db.aggregate_metadata_delete(ctxt, result['id'], key) new_metadata = {key: 'foo'} - db.aggregate_metadata_add(ctxt, result.id, new_metadata) - expected = db.aggregate_metadata_get(ctxt, result.id) + db.aggregate_metadata_add(ctxt, result['id'], new_metadata) + expected = db.aggregate_metadata_get(ctxt, result['id']) metadata[key] = 'foo' self.assertThat(metadata, matchers.DictMatches(expected)) @@ -999,9 +999,9 @@ class AggregateDBApiTestCase(test.TestCase): ctxt = context.get_admin_context() result = _create_aggregate(context=ctxt, metadata=None) metadata = _get_fake_aggr_metadata() - db.aggregate_metadata_add(ctxt, result.id, metadata) - db.aggregate_metadata_delete(ctxt, result.id, metadata.keys()[0]) - expected = db.aggregate_metadata_get(ctxt, result.id) + db.aggregate_metadata_add(ctxt, result['id'], metadata) + db.aggregate_metadata_delete(ctxt, result['id'], metadata.keys()[0]) + expected = db.aggregate_metadata_get(ctxt, result['id']) del metadata[metadata.keys()[0]] self.assertThat(metadata, matchers.DictMatches(expected)) @@ -1011,13 +1011,13 @@ class AggregateDBApiTestCase(test.TestCase): result = _create_aggregate(context=ctxt) self.assertRaises(exception.AggregateMetadataNotFound, db.aggregate_metadata_delete, - ctxt, result.id, 'foo_key') + ctxt, result['id'], 'foo_key') def test_aggregate_host_add(self): """Ensure we can add host to the aggregate.""" ctxt = context.get_admin_context() result = _create_aggregate_with_hosts(context=ctxt, metadata=None) - expected = db.aggregate_host_get_all(ctxt, result.id) + expected = db.aggregate_host_get_all(ctxt, result['id']) self.assertEqual(_get_fake_aggr_hosts(), expected) def test_aggregate_host_add_deleted(self): @@ -1025,9 +1025,9 @@ class AggregateDBApiTestCase(test.TestCase): ctxt = context.get_admin_context() result = _create_aggregate_with_hosts(context=ctxt, metadata=None) host = _get_fake_aggr_hosts()[0] - db.aggregate_host_delete(ctxt, result.id, host) - db.aggregate_host_add(ctxt, result.id, host) - expected = db.aggregate_host_get_all(ctxt, result.id) + db.aggregate_host_delete(ctxt, result['id'], host) + db.aggregate_host_add(ctxt, result['id'], host) + expected = db.aggregate_host_get_all(ctxt, result['id']) self.assertEqual(len(expected), 1) def test_aggregate_host_add_duplicate_works(self): @@ -1038,8 +1038,8 @@ class AggregateDBApiTestCase(test.TestCase): values={'name': 'fake_aggregate2', 'availability_zone': 'fake_avail_zone2', }, metadata=None) - h1 = db.aggregate_host_get_all(ctxt, r1.id) - h2 = db.aggregate_host_get_all(ctxt, r2.id) + h1 = db.aggregate_host_get_all(ctxt, r1['id']) + h2 = db.aggregate_host_get_all(ctxt, r2['id']) self.assertEqual(h1, h2) def test_aggregate_host_add_duplicate_raise_exist_exc(self): @@ -1048,7 +1048,7 @@ class AggregateDBApiTestCase(test.TestCase): result = _create_aggregate_with_hosts(context=ctxt, metadata=None) self.assertRaises(exception.AggregateHostExists, db.aggregate_host_add, - ctxt, result.id, _get_fake_aggr_hosts()[0]) + ctxt, result['id'], _get_fake_aggr_hosts()[0]) def test_aggregate_host_add_raise_not_found(self): """Ensure AggregateFound when adding a host.""" @@ -1064,9 +1064,9 @@ class AggregateDBApiTestCase(test.TestCase): """Ensure we can add host to the aggregate.""" ctxt = context.get_admin_context() result = _create_aggregate_with_hosts(context=ctxt, metadata=None) - db.aggregate_host_delete(ctxt, result.id, + db.aggregate_host_delete(ctxt, result['id'], _get_fake_aggr_hosts()[0]) - expected = db.aggregate_host_get_all(ctxt, result.id) + expected = db.aggregate_host_get_all(ctxt, result['id']) self.assertEqual(0, len(expected)) def test_aggregate_host_delete_raise_not_found(self): @@ -1075,7 +1075,7 @@ class AggregateDBApiTestCase(test.TestCase): result = _create_aggregate(context=ctxt) self.assertRaises(exception.AggregateHostNotFound, db.aggregate_host_delete, - ctxt, result.id, _get_fake_aggr_hosts()[0]) + ctxt, result['id'], _get_fake_aggr_hosts()[0]) class CapacityTestCase(test.TestCase): @@ -1095,7 +1095,7 @@ class CapacityTestCase(test.TestCase): free_disk_gb=2048, hypervisor_type="xen", hypervisor_version=1, cpu_info="", running_vms=0, current_workload=0, - service_id=self.service.id) + service_id=self.service['id']) # add some random stats stats = dict(num_instances=3, num_proj_12345=2, num_proj_23456=2, num_vm_building=3) @@ -1117,10 +1117,10 @@ class CapacityTestCase(test.TestCase): def test_compute_node_create(self): item = self._create_helper('host1') - self.assertEquals(item.free_ram_mb, 1024) - self.assertEquals(item.free_disk_gb, 2048) - self.assertEquals(item.running_vms, 0) - self.assertEquals(item.current_workload, 0) + self.assertEquals(item['free_ram_mb'], 1024) + self.assertEquals(item['free_disk_gb'], 2048) + self.assertEquals(item['running_vms'], 0) + self.assertEquals(item['current_workload'], 0) stats = self._stats_as_dict(item['stats']) self.assertEqual(3, stats['num_instances']) @@ -1209,8 +1209,8 @@ class MigrationTestCase(test.TestCase): def _assert_in_progress(self, migrations): for migration in migrations: - self.assertNotEqual('confirmed', migration.status) - self.assertNotEqual('reverted', migration.status) + self.assertNotEqual('confirmed', migration['status']) + self.assertNotEqual('reverted', migration['status']) def test_in_progress_host1_nodea(self): migrations = db.migration_get_in_progress_by_host_and_node(self.ctxt, @@ -1256,28 +1256,28 @@ class TestIpAllocation(test.TestCase): def test_fixed_ip_associate_fails_if_ip_not_in_network(self): self.assertRaises(exception.FixedIpNotFoundForNetwork, db.fixed_ip_associate, - self.ctxt, None, self.instance.uuid) + self.ctxt, None, self.instance['uuid']) def test_fixed_ip_associate_fails_if_ip_in_use(self): - address = self.create_fixed_ip(instance_uuid=self.instance.uuid) + address = self.create_fixed_ip(instance_uuid=self.instance['uuid']) self.assertRaises(exception.FixedIpAlreadyInUse, db.fixed_ip_associate, - self.ctxt, address, self.instance.uuid) + self.ctxt, address, self.instance['uuid']) def test_fixed_ip_associate_succeeds(self): - address = self.create_fixed_ip(network_id=self.network.id) - db.fixed_ip_associate(self.ctxt, address, self.instance.uuid, - network_id=self.network.id) + address = self.create_fixed_ip(network_id=self.network['id']) + db.fixed_ip_associate(self.ctxt, address, self.instance['uuid'], + network_id=self.network['id']) fixed_ip = db.fixed_ip_get_by_address(self.ctxt, address) - self.assertEqual(fixed_ip.instance_uuid, self.instance.uuid) + self.assertEqual(fixed_ip['instance_uuid'], self.instance['uuid']) def test_fixed_ip_associate_succeeds_and_sets_network(self): address = self.create_fixed_ip() - db.fixed_ip_associate(self.ctxt, address, self.instance.uuid, - network_id=self.network.id) + db.fixed_ip_associate(self.ctxt, address, self.instance['uuid'], + network_id=self.network['id']) fixed_ip = db.fixed_ip_get_by_address(self.ctxt, address) - self.assertEqual(fixed_ip.instance_uuid, self.instance.uuid) - self.assertEqual(fixed_ip.network_id, self.network.id) + self.assertEqual(fixed_ip['instance_uuid'], self.instance['uuid']) + self.assertEqual(fixed_ip['network_id'], self.network['id']) class InstanceDestroyConstraints(test.TestCase): diff --git a/nova/virt/firewall.py b/nova/virt/firewall.py index 11a8ea2bf..ee39b0b8c 100644 --- a/nova/virt/firewall.py +++ b/nova/virt/firewall.py @@ -360,20 +360,20 @@ class IptablesFirewallDriver(FirewallDriver): LOG.debug(_('Adding security group rule: %r'), rule, instance=instance) - if not rule.cidr: + if not rule['cidr']: version = 4 else: - version = netutils.get_ip_version(rule.cidr) + version = netutils.get_ip_version(rule['cidr']) if version == 4: fw_rules = ipv4_rules else: fw_rules = ipv6_rules - protocol = rule.protocol + protocol = rule['protocol'] if protocol: - protocol = rule.protocol.lower() + protocol = rule['protocol'].lower() if version == 6 and protocol == 'icmp': protocol = 'icmpv6' @@ -386,9 +386,9 @@ class IptablesFirewallDriver(FirewallDriver): args += self._build_tcp_udp_rule(rule, version) elif protocol == 'icmp': args += self._build_icmp_rule(rule, version) - if rule.cidr: - LOG.debug('Using cidr %r', rule.cidr, instance=instance) - args += ['-s', rule.cidr] + if rule['cidr']: + LOG.debug('Using cidr %r', rule['cidr'], instance=instance) + args += ['-s', rule['cidr']] fw_rules += [' '.join(args)] else: if rule['grantee_group']: -- cgit