Merge "Adds network fields to object"
This commit is contained in:
commit
4b10995a93
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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):
|
||||
|
@ -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',
|
||||
|
Loading…
Reference in New Issue
Block a user