diff options
-rw-r--r-- | nova/db/sqlalchemy/api.py | 2 | ||||
-rw-r--r-- | nova/network/linux_net.py | 3 | ||||
-rw-r--r-- | nova/network/security_group/quantum_driver.py | 22 | ||||
-rw-r--r-- | nova/openstack/common/version.py | 94 | ||||
-rw-r--r-- | nova/tests/api/openstack/compute/contrib/test_security_groups.py | 40 | ||||
-rw-r--r-- | nova/tests/db/fakes.py | 2 | ||||
-rw-r--r-- | nova/tests/network/test_manager.py | 8 | ||||
-rw-r--r-- | nova/tests/test_db_api.py | 225 | ||||
-rw-r--r-- | nova/version.py | 4 | ||||
-rw-r--r-- | openstack-common.conf | 1 |
10 files changed, 275 insertions, 126 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 5aa437a55..a35e8154d 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -1050,7 +1050,7 @@ def fixed_ip_create(context, values): fixed_ip_ref = models.FixedIp() fixed_ip_ref.update(values) fixed_ip_ref.save() - return fixed_ip_ref['address'] + return fixed_ip_ref @require_context diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py index cb86f7fa0..c47b50060 100644 --- a/nova/network/linux_net.py +++ b/nova/network/linux_net.py @@ -764,6 +764,9 @@ def floating_forward_rules(floating_ip, fixed_ip, device): ('PREROUTING', '-d %s -j DNAT --to %s' % (floating_ip, fixed_ip))) rules.append( ('OUTPUT', '-d %s -j DNAT --to %s' % (floating_ip, fixed_ip))) + rules.append(('POSTROUTING', '-s %s -m conntrack --ctstate DNAT -j SNAT ' + '--to-source %s' % + (fixed_ip, floating_ip))) return rules diff --git a/nova/network/security_group/quantum_driver.py b/nova/network/security_group/quantum_driver.py index 1c49da5e3..ea7dac825 100644 --- a/nova/network/security_group/quantum_driver.py +++ b/nova/network/security_group/quantum_driver.py @@ -79,15 +79,17 @@ class SecurityGroupAPI(security_group_base.SecurityGroupBase): nova_rule['id'] = rule['id'] nova_rule['parent_group_id'] = rule['security_group_id'] nova_rule['protocol'] = rule['protocol'] - if rule['port_range_min'] is None: - nova_rule['from_port'] = -1 + if (nova_rule['protocol'] and rule.get('port_range_min') is None and + rule.get('port_range_max') is None): + if nova_rule['protocol'].upper() == 'ICMP': + nova_rule['from_port'] = -1 + nova_rule['to_port'] = -1 + elif rule['protocol'].upper() in ['TCP', 'UDP']: + nova_rule['from_port'] = 1 + nova_rule['to_port'] = 65535 else: - nova_rule['from_port'] = rule['port_range_min'] - - if rule['port_range_max'] is None: - nova_rule['to_port'] = -1 - else: - nova_rule['to_port'] = rule['port_range_max'] + nova_rule['from_port'] = rule.get('port_range_min') + nova_rule['to_port'] = rule.get('port_range_max') nova_rule['group_id'] = rule['remote_group_id'] nova_rule['cidr'] = rule['remote_ip_prefix'] return nova_rule @@ -207,9 +209,9 @@ class SecurityGroupAPI(security_group_base.SecurityGroupBase): new_rule['remote_ip_prefix'] = rule.get('cidr') new_rule['security_group_id'] = rule.get('parent_group_id') new_rule['remote_group_id'] = rule.get('group_id') - if rule['from_port'] != -1: + if 'from_port' in rule and rule['from_port'] != -1: new_rule['port_range_min'] = rule['from_port'] - if rule['to_port'] != -1: + if 'to_port' in rule and rule['to_port'] != -1: new_rule['port_range_max'] = rule['to_port'] new_rules.append(new_rule) return {'security_group_rules': new_rules} diff --git a/nova/openstack/common/version.py b/nova/openstack/common/version.py deleted file mode 100644 index 6bf41a75c..000000000 --- a/nova/openstack/common/version.py +++ /dev/null @@ -1,94 +0,0 @@ - -# Copyright 2012 OpenStack Foundation -# Copyright 2012-2013 Hewlett-Packard Development Company, L.P. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -""" -Utilities for consuming the version from pkg_resources. -""" - -import pkg_resources - - -class VersionInfo(object): - - def __init__(self, package): - """Object that understands versioning for a package - :param package: name of the python package, such as glance, or - python-glanceclient - """ - self.package = package - self.release = None - self.version = None - self._cached_version = None - - def __str__(self): - """Make the VersionInfo object behave like a string.""" - return self.version_string() - - def __repr__(self): - """Include the name.""" - return "VersionInfo(%s:%s)" % (self.package, self.version_string()) - - def _get_version_from_pkg_resources(self): - """Get the version of the package from the pkg_resources record - associated with the package.""" - try: - requirement = pkg_resources.Requirement.parse(self.package) - provider = pkg_resources.get_provider(requirement) - return provider.version - except pkg_resources.DistributionNotFound: - # The most likely cause for this is running tests in a tree - # produced from a tarball where the package itself has not been - # installed into anything. Revert to setup-time logic. - from nova.openstack.common import setup - return setup.get_version(self.package) - - def release_string(self): - """Return the full version of the package including suffixes indicating - VCS status. - """ - if self.release is None: - self.release = self._get_version_from_pkg_resources() - - return self.release - - def version_string(self): - """Return the short version minus any alpha/beta tags.""" - if self.version is None: - parts = [] - for part in self.release_string().split('.'): - if part[0].isdigit(): - parts.append(part) - else: - break - self.version = ".".join(parts) - - return self.version - - # Compatibility functions - canonical_version_string = version_string - version_string_with_vcs = release_string - - def cached_version_string(self, prefix=""): - """Generate an object which will expand in a string context to - the results of version_string(). We do this so that don't - call into pkg_resources every time we start up a program when - passing version information into the CONF constructor, but - rather only do the calculation when and if a version is requested - """ - if not self._cached_version: - self._cached_version = "%s%s" % (prefix, - self.version_string()) - return self._cached_version diff --git a/nova/tests/api/openstack/compute/contrib/test_security_groups.py b/nova/tests/api/openstack/compute/contrib/test_security_groups.py index 480156b97..b1a5b3fdf 100644 --- a/nova/tests/api/openstack/compute/contrib/test_security_groups.py +++ b/nova/tests/api/openstack/compute/contrib/test_security_groups.py @@ -727,6 +727,46 @@ class TestSecurityGroupRules(test.TestCase): self.assertEquals(security_group_rule['from_port'], 81) self.assertEquals(security_group_rule['to_port'], 81) + def test_create_none_value_from_to_port(self): + rule = {'parent_group_id': self.sg1['id'], + 'group_id': self.sg1['id']} + req = fakes.HTTPRequest.blank('/v2/fake/os-security-group-rules') + res_dict = self.controller.create(req, {'security_group_rule': rule}) + security_group_rule = res_dict['security_group_rule'] + self.assertEquals(security_group_rule['from_port'], None) + self.assertEquals(security_group_rule['to_port'], None) + self.assertEquals(security_group_rule['group']['name'], 'test') + self.assertEquals(security_group_rule['parent_group_id'], + self.sg1['id']) + + def test_create_none_value_from_to_port_icmp(self): + rule = {'parent_group_id': self.sg1['id'], + 'group_id': self.sg1['id'], + 'ip_protocol': 'ICMP'} + req = fakes.HTTPRequest.blank('/v2/fake/os-security-group-rules') + res_dict = self.controller.create(req, {'security_group_rule': rule}) + security_group_rule = res_dict['security_group_rule'] + self.assertEquals(security_group_rule['ip_protocol'], 'ICMP') + self.assertEquals(security_group_rule['from_port'], -1) + self.assertEquals(security_group_rule['to_port'], -1) + self.assertEquals(security_group_rule['group']['name'], 'test') + self.assertEquals(security_group_rule['parent_group_id'], + self.sg1['id']) + + def test_create_none_value_from_to_port_tcp(self): + rule = {'parent_group_id': self.sg1['id'], + 'group_id': self.sg1['id'], + 'ip_protocol': 'TCP'} + req = fakes.HTTPRequest.blank('/v2/fake/os-security-group-rules') + res_dict = self.controller.create(req, {'security_group_rule': rule}) + security_group_rule = res_dict['security_group_rule'] + self.assertEquals(security_group_rule['ip_protocol'], 'TCP') + self.assertEquals(security_group_rule['from_port'], 1) + self.assertEquals(security_group_rule['to_port'], 65535) + self.assertEquals(security_group_rule['group']['name'], 'test') + self.assertEquals(security_group_rule['parent_group_id'], + self.sg1['id']) + def test_create_by_invalid_cidr_json(self): rule = security_group_rule_template( ip_protocol="tcp", diff --git a/nova/tests/db/fakes.py b/nova/tests/db/fakes.py index 5556b6eb5..e64498937 100644 --- a/nova/tests/db/fakes.py +++ b/nova/tests/db/fakes.py @@ -187,7 +187,7 @@ def stub_out_db_network_api(stubs): ip['id'] = max([i['id'] for i in fixed_ips] or [-1]) + 1 for key in values: ip[key] = values[key] - return ip['address'] + return ip def fake_fixed_ip_disassociate(context, address): ips = filter(lambda i: i['address'] == address, diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py index 3fe2d6c74..b8f75233a 100644 --- a/nova/tests/network/test_manager.py +++ b/nova/tests/network/test_manager.py @@ -2146,11 +2146,9 @@ class FloatingIPTestCase(test.TestCase): 'project_id': self.project_id, 'deleted': True}) network = db.api.network_create_safe(self.context.elevated(), { 'project_id': self.project_id}) - addr = db.fixed_ip_create(self.context, {'allocated': True, + fixed = db.fixed_ip_create(self.context, {'allocated': True, 'instance_uuid': instance['uuid'], 'address': '10.1.1.1', 'network_id': network['id']}) - fixed = db.fixed_ip_get_by_address( - self.context.elevated(read_deleted='yes'), addr) db.api.floating_ip_create(self.context, { 'address': '10.10.10.10', 'instance_uuid': instance['uuid'], 'fixed_ip_id': fixed['id'], @@ -2165,11 +2163,9 @@ class FloatingIPTestCase(test.TestCase): 'project_id': self.project_id}) network = db.api.network_create_safe(self.context.elevated(), { 'project_id': self.project_id}) - addr = db.fixed_ip_create(self.context, {'allocated': True, + fixed = db.fixed_ip_create(self.context, {'allocated': True, 'instance_uuid': instance['uuid'], 'address': '10.1.1.1', 'network_id': network['id']}) - fixed = db.fixed_ip_get_by_address( - self.context.elevated(read_deleted='yes'), addr) db.api.floating_ip_create(self.context, { 'address': '10.10.10.10', 'deleted': True}) diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py index e99f4d337..1239c4627 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -399,11 +399,11 @@ class DbApiTestCase(DbTestCase): network = db.network_create_safe(ctxt, values) db_network = db.network_get(ctxt, network['id']) values = {'network_id': network['id'], 'address': 'fake1'} - address1 = db.fixed_ip_create(ctxt, values) + address1 = db.fixed_ip_create(ctxt, values)['address'] values = {'network_id': network['id'], 'address': 'fake2', 'allocated': True} - address2 = db.fixed_ip_create(ctxt, values) + address2 = db.fixed_ip_create(ctxt, values)['address'] self.assertRaises(exception.NetworkInUse, db.network_delete_safe, ctxt, network['id']) db.fixed_ip_update(ctxt, address2, {'allocated': False}) @@ -1013,7 +1013,7 @@ class DbApiTestCase(DbTestCase): 'allocated': True, 'instance_uuid': instance['uuid'], 'virtual_interface_id': vif['id']} - fixed_address = db.fixed_ip_create(ctxt, values) + fixed_address = db.fixed_ip_create(ctxt, values)['address'] data = db.network_get_associated_fixed_ips(ctxt, 1) self.assertEqual(len(data), 1) record = data[0] @@ -1041,7 +1041,7 @@ class DbApiTestCase(DbTestCase): # network with fixed ip with host set net = db.network_create_safe(ctxt, {}) values = {'host': 'foo', 'network_id': net['id']} - fixed_address = db.fixed_ip_create(ctxt, values) + db.fixed_ip_create(ctxt, values) data = db.network_get_all_by_host(ctxt, 'foo') self.assertEqual(len(data), 2) # network with instance with host set @@ -1051,7 +1051,7 @@ class DbApiTestCase(DbTestCase): vif = db.virtual_interface_create(ctxt, values) values = {'network_id': net['id'], 'virtual_interface_id': vif['id']} - fixed_address = db.fixed_ip_create(ctxt, values) + db.fixed_ip_create(ctxt, values) data = db.network_get_all_by_host(ctxt, 'foo') self.assertEqual(len(data), 3) @@ -2383,13 +2383,12 @@ class FixedIPTestCase(BaseInstanceTypeTestCase): self.assertEqual(result, 0) def test_fixed_ip_get_by_floating_address(self): - fixed = db.fixed_ip_create(self.ctxt, {'address': 'fixed'}) - fixed_ip_ref = db.fixed_ip_get_by_address(self.ctxt, fixed) + fixed_ip = db.fixed_ip_create(self.ctxt, {'address': 'fixed'}) values = {'address': 'floating', - 'fixed_ip_id': fixed_ip_ref['id']} + 'fixed_ip_id': fixed_ip['id']} floating = db.floating_ip_create(self.ctxt, values)['address'] fixed_ip_ref = db.fixed_ip_get_by_floating_address(self.ctxt, floating) - self.assertEqual(fixed, fixed_ip_ref['address']) + self._assertEqualObjects(fixed_ip, fixed_ip_ref) def test_fixed_ip_get_by_host(self): host_ips = { @@ -2572,7 +2571,7 @@ class FixedIPTestCase(BaseInstanceTypeTestCase): def create_fixed_ip(self, **params): default_params = {'address': '192.168.0.1'} default_params.update(params) - return db.fixed_ip_create(self.ctxt, default_params) + return db.fixed_ip_create(self.ctxt, default_params)['address'] def test_fixed_ip_associate_fails_if_ip_not_in_network(self): instance_uuid = self._create_instance() @@ -2609,6 +2608,210 @@ class FixedIPTestCase(BaseInstanceTypeTestCase): self.assertEqual(fixed_ip['instance_uuid'], instance_uuid) self.assertEqual(fixed_ip['network_id'], network['id']) + def test_fixed_ip_associate_pool_invalid_uuid(self): + instance_uuid = '123' + self.assertRaises(exception.InvalidUUID, db.fixed_ip_associate_pool, + self.ctxt, None, instance_uuid) + + def test_fixed_ip_associate_pool_no_more_fixed_ips(self): + instance_uuid = self._create_instance() + self.assertRaises(exception.NoMoreFixedIps, db.fixed_ip_associate_pool, + self.ctxt, None, instance_uuid) + + def test_fixed_ip_associate_pool_succeeds(self): + instance_uuid = self._create_instance() + network = db.network_create_safe(self.ctxt, {}) + + address = self.create_fixed_ip(network_id=network['id']) + db.fixed_ip_associate_pool(self.ctxt, network['id'], instance_uuid) + fixed_ip = db.fixed_ip_get_by_address(self.ctxt, address) + self.assertEqual(fixed_ip['instance_uuid'], instance_uuid) + + def test_fixed_ip_create(self): + instance_uuid = self._create_instance() + network_id = db.network_create_safe(self.ctxt, {})['id'] + param = { + 'reserved': False, + 'deleted': 0, + 'leased': False, + 'host': '127.0.0.1', + 'address': 'localhost', + 'allocated': False, + 'instance_uuid': instance_uuid, + 'network_id': network_id, + 'virtual_interface_id': None + } + + ignored_keys = ['created_at', 'id', 'deleted_at', 'updated_at'] + fixed_ip_data = db.fixed_ip_create(self.ctxt, param) + self._assertEqualObjects(param, fixed_ip_data, ignored_keys) + + def test_fixed_ip_bulk_create(self): + adress = 'fixed_ip_adress' + instance_uuid = self._create_instance() + network_id_1 = db.network_create_safe(self.ctxt, {})['id'] + network_id_2 = db.network_create_safe(self.ctxt, {})['id'] + params = [ + {'reserved': False, 'deleted': 0, 'leased': False, + 'host': '127.0.0.1', 'address': adress, 'allocated': False, + 'instance_uuid': instance_uuid, 'network_id': network_id_1, + 'virtual_interface_id': None}, + {'reserved': False, 'deleted': 0, 'leased': False, + 'host': 'localhost', 'address': adress, 'allocated': True, + 'instance_uuid': instance_uuid, 'network_id': network_id_2, + 'virtual_interface_id': None} + ] + + db.fixed_ip_bulk_create(self.ctxt, params) + ignored_keys = ['created_at', 'id', 'deleted_at', 'updated_at'] + fixed_ip_data = db.fixed_ip_get_by_instance(self.ctxt, instance_uuid) + + # we have no `id` in incoming data so we can not use + # _assertEqualListsOfObjects to compare incoming data and received + # objects + fixed_ip_data = sorted(fixed_ip_data, key=lambda i: i['network_id']) + params = sorted(params, key=lambda i: i['network_id']) + for param, ip in zip(params, fixed_ip_data): + self._assertEqualObjects(param, ip, ignored_keys) + + def test_fixed_ip_disassociate(self): + adress = 'fixed_ip_adress' + instance_uuid = self._create_instance() + network_id = db.network_create_safe(self.ctxt, {})['id'] + param = { + 'reserved': False, + 'deleted': 0, + 'leased': False, + 'host': '127.0.0.1', + 'address': adress, + 'allocated': False, + 'instance_uuid': instance_uuid, + 'network_id': network_id, + 'virtual_interface_id': None + } + db.fixed_ip_create(self.ctxt, param) + + db.fixed_ip_disassociate(self.ctxt, adress) + fixed_ip_data = db.fixed_ip_get_by_address(self.ctxt, adress) + ignored_keys = ['created_at', 'id', 'deleted_at', + 'updated_at', 'instance_uuid'] + self._assertEqualObjects(param, fixed_ip_data, ignored_keys) + self.assertIsNone(fixed_ip_data['instance_uuid']) + + def test_fixed_ip_get_not_found_exception(self): + self.assertRaises(exception.FixedIpNotFound, + db.fixed_ip_get, self.ctxt, 0) + + def test_fixed_ip_get_sucsess2(self): + adress = 'fixed_ip_adress' + instance_uuid = self._create_instance() + network_id = db.network_create_safe(self.ctxt, {})['id'] + param = { + 'reserved': False, + 'deleted': 0, + 'leased': False, + 'host': '127.0.0.1', + 'address': adress, + 'allocated': False, + 'instance_uuid': instance_uuid, + 'network_id': network_id, + 'virtual_interface_id': None + } + fixed_ip_id = db.fixed_ip_create(self.ctxt, param) + + self.ctxt.is_admin = False + self.assertRaises(exception.NotAuthorized, db.fixed_ip_get, + self.ctxt, fixed_ip_id) + + def test_fixed_ip_get_sucsess(self): + adress = 'fixed_ip_adress' + instance_uuid = self._create_instance() + network_id = db.network_create_safe(self.ctxt, {})['id'] + param = { + 'reserved': False, + 'deleted': 0, + 'leased': False, + 'host': '127.0.0.1', + 'address': adress, + 'allocated': False, + 'instance_uuid': instance_uuid, + 'network_id': network_id, + 'virtual_interface_id': None + } + db.fixed_ip_create(self.ctxt, param) + + fixed_ip_id = db.fixed_ip_get_by_address(self.ctxt, adress)['id'] + fixed_ip_data = db.fixed_ip_get(self.ctxt, fixed_ip_id) + ignored_keys = ['created_at', 'id', 'deleted_at', 'updated_at'] + self._assertEqualObjects(param, fixed_ip_data, ignored_keys) + + def test_fixed_ip_get_by_address_detailed_not_found_exception(self): + self.assertRaises(exception.FixedIpNotFoundForAddress, + db.fixed_ip_get_by_address_detailed, self.ctxt, 'x') + + def test_fixed_ip_get_by_address_detailed_sucsess(self): + adress = 'fixed_ip_adress_123' + instance_uuid = self._create_instance() + network_id = db.network_create_safe(self.ctxt, {})['id'] + param = { + 'reserved': False, + 'deleted': 0, + 'leased': False, + 'host': '127.0.0.1', + 'address': adress, + 'allocated': False, + 'instance_uuid': instance_uuid, + 'network_id': network_id, + 'virtual_interface_id': None + } + db.fixed_ip_create(self.ctxt, param) + + fixed_ip_data = db.fixed_ip_get_by_address_detailed(self.ctxt, + adress) + # fixed ip check here + ignored_keys = ['created_at', 'id', 'deleted_at', 'updated_at'] + self._assertEqualObjects(param, fixed_ip_data[0], ignored_keys) + + # network model check here + network_data = db.network_get(self.ctxt, network_id) + self._assertEqualObjects(network_data, fixed_ip_data[1]) + + # Instance check here + instance_data = db.instance_get_by_uuid(self.ctxt, instance_uuid) + ignored_keys = ['info_cache', 'system_metadata', + 'security_groups', 'metadata'] # HOW ???? + self._assertEqualObjects(instance_data, fixed_ip_data[2], ignored_keys) + + def test_fixed_ip_update_not_found_for_adress(self): + self.assertRaises(exception.FixedIpNotFoundForAddress, + db.fixed_ip_update, self.ctxt, 'fixed_ip_adress', {}) + + def test_fixed_ip_update(self): + instance_uuid_1 = self._create_instance() + instance_uuid_2 = self._create_instance() + network_id_1 = db.network_create_safe(self.ctxt, {})['id'] + network_id_2 = db.network_create_safe(self.ctxt, {})['id'] + param_1 = { + 'reserved': True, 'deleted': 0, 'leased': True, + 'host': '192.168.133.1', 'address': 'localhost', + 'allocated': True, 'instance_uuid': instance_uuid_1, + 'network_id': network_id_1, 'virtual_interface_id': '123', + } + + param_2 = { + 'reserved': False, 'deleted': 0, 'leased': False, + 'host': '127.0.0.1', 'address': 'localhost', 'allocated': False, + 'instance_uuid': instance_uuid_2, 'network_id': network_id_2, + 'virtual_interface_id': None + } + + ignored_keys = ['created_at', 'id', 'deleted_at', 'updated_at'] + fixed_ip_addr = db.fixed_ip_create(self.ctxt, param_1)['address'] + db.fixed_ip_update(self.ctxt, fixed_ip_addr, param_2) + fixed_ip_after_update = db.fixed_ip_get_by_address(self.ctxt, + param_2['address']) + self._assertEqualObjects(param_2, fixed_ip_after_update, ignored_keys) + class FloatingIpTestCase(test.TestCase, ModelsObjectComparatorMixin): @@ -2773,7 +2976,7 @@ class FloatingIpTestCase(test.TestCase, ModelsObjectComparatorMixin): def _create_fixed_ip(self, params): default_params = {'address': '192.168.0.1'} default_params.update(params) - return db.fixed_ip_create(self.ctxt, default_params) + return db.fixed_ip_create(self.ctxt, default_params)['address'] def test_floating_ip_fixed_ip_associate(self): float_addresses = ['1.1.1.1', '1.1.1.2', '1.1.1.3'] diff --git a/nova/version.py b/nova/version.py index 2606fda37..f954ef33b 100644 --- a/nova/version.py +++ b/nova/version.py @@ -14,14 +14,14 @@ # License for the specific language governing permissions and limitations # under the License. -from nova.openstack.common import version as common_version +import pbr.version NOVA_VENDOR = "OpenStack Foundation" NOVA_PRODUCT = "OpenStack Nova" NOVA_PACKAGE = None # OS distro package version suffix loaded = False -version_info = common_version.VersionInfo('nova') +version_info = pbr.version.VersionInfo('nova') version_string = version_info.version_string diff --git a/openstack-common.conf b/openstack-common.conf index ad48a188a..fb6cd4d78 100644 --- a/openstack-common.conf +++ b/openstack-common.conf @@ -28,7 +28,6 @@ module=rpc module=strutils module=timeutils module=uuidutils -module=version # The base module to hold the copy of openstack.common base=nova |