Merge "Adds network fields to object"

This commit is contained in:
Jenkins 2014-06-21 03:55:20 +00:00 committed by Gerrit Code Review
commit 4b10995a93
7 changed files with 71 additions and 14 deletions

View File

@ -53,8 +53,6 @@ linux_net_opts = [
cfg.StrOpt('public_interface',
default='eth0',
help='Interface for public IP addresses'),
cfg.IntOpt('network_device_mtu',
help='MTU setting for network interface'),
cfg.StrOpt('dhcpbridge',
default=paths.bindir_def('nova-dhcpbridge'),
help='Location of nova-dhcpbridge'),
@ -136,6 +134,7 @@ CONF.register_opts(linux_net_opts)
CONF.import_opt('host', 'nova.netconf')
CONF.import_opt('use_ipv6', 'nova.netconf')
CONF.import_opt('my_ip', 'nova.netconf')
CONF.import_opt('network_device_mtu', 'nova.objects.network')
# NOTE(vish): Iptables supports chain names of up to 28 characters, and we

View File

@ -140,12 +140,6 @@ network_opts = [
cfg.BoolOpt('force_dhcp_release',
default=True,
help='If True, send a dhcp release on instance termination'),
cfg.BoolOpt('share_dhcp_address',
default=False,
help='If True in multi_host mode, all compute hosts share '
'the same dhcp address. The same IP address used for '
'DHCP will be added on each nova-network node which '
'is only visible to the vms on the same host.'),
cfg.BoolOpt('update_dns_entries',
default=False,
help='If True, when a DNS entry must be updated, it sends a '
@ -169,6 +163,7 @@ CONF.import_opt('use_ipv6', 'nova.netconf')
CONF.import_opt('my_ip', 'nova.netconf')
CONF.import_opt('network_topic', 'nova.network.rpcapi')
CONF.import_opt('fake_network', 'nova.network.linux_net')
CONF.import_opt('share_dhcp_address', 'nova.objects.network')
class RPCAllocateFixedIP(object):

View File

@ -14,16 +14,33 @@
import netaddr
from oslo.config import cfg
from nova import db
from nova import exception
from nova.objects import base as obj_base
from nova.objects import fields
network_opts = [
cfg.BoolOpt('share_dhcp_address',
default=False,
help='If True in multi_host mode, all compute hosts share '
'the same dhcp address. The same IP address used for '
'DHCP will be added on each nova-network node which '
'is only visible to the vms on the same host.'),
cfg.IntOpt('network_device_mtu',
help='MTU setting for network interface'),
]
CONF = cfg.CONF
CONF.register_opts(network_opts)
class Network(obj_base.NovaPersistentObject, obj_base.NovaObject):
# Version 1.0: Initial version
# Version 1.1: Added in_use_on_host()
VERSION = '1.1'
# Version 1.2: Added mtu, dhcp_server, enable_dhcp, share_address
VERSION = '1.2'
fields = {
'id': fields.IntegerField(),
@ -51,6 +68,10 @@ class Network(obj_base.NovaPersistentObject, obj_base.NovaObject):
'priority': fields.IntegerField(nullable=True),
'host': fields.StringField(nullable=True),
'uuid': fields.UUIDField(),
'mtu': fields.IntegerField(nullable=True),
'dhcp_server': fields.IPAddressField(nullable=True),
'enable_dhcp': fields.BooleanField(),
'share_address': fields.BooleanField(),
}
@staticmethod
@ -73,12 +94,31 @@ class Network(obj_base.NovaPersistentObject, obj_base.NovaObject):
raise ValueError('IPv6 netmask "%s" must be a netmask '
'or integral prefix' % netmask)
def obj_make_compatible(self, primitive, target_version):
target_version = tuple(int(x) for x in target_version.split('.'))
if target_version < (1, 2):
if 'mtu' in primitive:
del primitive['mtu']
if 'enable_dhcp' in primitive:
del primitive['enable_dhcp']
if 'dhcp_server' in primitive:
del primitive['dhcp_server']
if 'share_address' in primitive:
del primitive['share_address']
@staticmethod
def _from_db_object(context, network, db_network):
for field in network.fields:
db_value = db_network[field]
if field is 'netmask_v6' and db_value is not None:
db_value = network._convert_legacy_ipv6_netmask(db_value)
if field is 'mtu' and db_value is None:
db_value = CONF.network_device_mtu
if field is 'dhcp_server' and db_value is None:
db_value = db_network['gateway']
if field is 'share_address' and CONF.share_dhcp_address:
db_value = CONF.share_dhcp_address
network[field] = db_value
network._context = context
network.obj_reset_changes()
@ -162,7 +202,8 @@ class Network(obj_base.NovaPersistentObject, obj_base.NovaObject):
class NetworkList(obj_base.ObjectListBase, obj_base.NovaObject):
# Version 1.0: Initial version
# Version 1.1: Added get_by_project()
VERSION = '1.1'
# Version 1.2: Network <= version 1.2
VERSION = '1.2'
fields = {
'objects': fields.ListOfObjectsField('Network'),
@ -170,6 +211,7 @@ class NetworkList(obj_base.ObjectListBase, obj_base.NovaObject):
child_versions = {
'1.0': '1.0',
'1.1': '1.1',
'1.2': '1.2',
}
@obj_base.remotable_classmethod

View File

@ -189,7 +189,8 @@ class FakeNetworkManager(network_manager.NetworkManager):
# TODO(matelakat) use the deallocate_fixed_ip_calls instead
self.deallocate_called = address
def _create_fixed_ips(self, context, network_id, fixed_cidr=None):
def _create_fixed_ips(self, context, network_id, fixed_cidr=None,
extra_reserved=None):
pass
def get_instance_nw_info(context, instance_id, rxtx_factor,
@ -229,7 +230,11 @@ def fake_network(network_id, ipv6=None):
'deleted': False,
'created_at': None,
'updated_at': None,
'deleted_at': None}
'deleted_at': None,
'mtu': None,
'dhcp_server': '192.168.%d.1' % network_id,
'enable_dhcp': True,
'share_address': False}
if ipv6:
fake_network['cidr_v6'] = '2001:db8:0:%x::/64' % network_id
fake_network['gateway_v6'] = '2001:db8:0:%x::1' % network_id

View File

@ -38,6 +38,8 @@ from nova import utils
LOG = logging.getLogger(__name__)
CONF = cfg.CONF
CONF.import_opt('share_dhcp_address', 'nova.objects.network')
CONF.import_opt('network_device_mtu', 'nova.objects.network')
HOST = "testhost"

View File

@ -49,6 +49,10 @@ fake_network = {
'priority': None,
'host': None,
'uuid': 'fake-uuid',
'mtu': None,
'dhcp_server': '192.168.1.1',
'enable_dhcp': True,
'share_address': False,
}
@ -207,6 +211,16 @@ class _TestNetworkObject(object):
get_nets.assert_called_once_with(self.context, 123, associate=True)
self._compare(networks[0], fake_network)
def test_compat_version_1_1(self):
network = network_obj.Network._from_db_object(self.context,
network_obj.Network(),
fake_network)
primitive = network.obj_to_primitive(target_version='1.1')
self.assertNotIn('mtu', primitive)
self.assertNotIn('enable_dhcp', primitive)
self.assertNotIn('dhcp_server', primitive)
self.assertNotIn('share_address', primitive)
class TestNetworkObject(test_objects._LocalTest,
_TestNetworkObject):

View File

@ -909,8 +909,8 @@ object_data = {
'Migration': '1.1-eeb2164ef6fd182ea0d5659b8ed71053',
'MigrationList': '1.1-d58aaa2a66678aec20d9f99c46447f4d',
'MyObj': '1.6-5e9f181288c104ae0d1aad6f8c0d40b9',
'Network': '1.1-a0912fc5edc85e388a22822fcdab0621',
'NetworkList': '1.1-e4fb6d4583852c039e97a61579a73261',
'Network': '1.2-a0912fc5edc85e388a22822fcdab0621',
'NetworkList': '1.2-e4fb6d4583852c039e97a61579a73261',
'PciDevice': '1.1-cbc31f0131195987e796d8fed792e173',
'PciDeviceList': '1.0-f406a5539bcead291eb7597ec4456451',
'Quotas': '1.0-801745b38394a6593c44655b72613910',