Merge "Move default network_interface logic in node object"

This commit is contained in:
Jenkins 2016-08-03 13:02:18 +00:00 committed by Gerrit Code Review
commit 4bd6e9793d
5 changed files with 46 additions and 7 deletions

View File

@ -59,10 +59,6 @@ def _attach_interfaces_to_driver(driver, node, driver_name=None):
setattr(driver, iface, impl)
network_iface = node.network_interface
if network_iface is None:
network_iface = (CONF.default_network_interface or
('flat' if CONF.dhcp.dhcp_provider == 'neutron'
else 'noop'))
network_factory = NetworkInterfaceFactory()
try:
net_driver = network_factory.get_driver(network_iface)

View File

@ -19,6 +19,7 @@ from oslo_versionedobjects import base as object_base
from ironic.common import exception
from ironic.common.i18n import _
from ironic.conf import CONF
from ironic.db import api as db_api
from ironic.objects import base
from ironic.objects import fields as object_fields
@ -26,6 +27,13 @@ from ironic.objects import fields as object_fields
REQUIRED_INT_PROPERTIES = ['local_gb', 'cpus', 'memory_mb']
def _default_network_interface():
network_iface = (CONF.default_network_interface or
('flat' if CONF.dhcp.dhcp_provider == 'neutron'
else 'noop'))
return network_iface
@base.IronicObjectRegistry.register
class Node(base.IronicObject, object_base.VersionedObjectDictCompat):
# Version 1.0: Initial version
@ -48,7 +56,8 @@ class Node(base.IronicObject, object_base.VersionedObjectDictCompat):
# Version 1.15: Add get_by_port_addresses
# Version 1.16: Add network_interface field
# Version 1.17: Add resource_class field
VERSION = '1.17'
# Version 1.18: Add default setting for network_interface
VERSION = '1.18'
dbapi = db_api.get_instance()
@ -108,9 +117,15 @@ class Node(base.IronicObject, object_base.VersionedObjectDictCompat):
'extra': object_fields.FlexibleDictField(nullable=True),
'network_interface': object_fields.StringField(nullable=True),
'network_interface': object_fields.StringField(
nullable=False, default=_default_network_interface()),
}
def __init__(self, context=None, **kwargs):
self.fields['network_interface']._default = (
_default_network_interface())
super(Node, self).__init__(context, **kwargs)
def _validate_property_values(self, properties):
"""Check if the input of local_gb, cpus and memory_mb are valid.

View File

@ -1799,6 +1799,8 @@ class AgentMethodsTestCase(db_base.DbTestCase):
def test_prepare_inband_cleaning_ports_provider_does_not_create(
self, dhcp_factory_mock, add_clean_net_mock):
self.config(group='dhcp', dhcp_provider='my_shiny_dhcp_provider')
self.node.network_interface = 'noop'
self.node.save()
dhcp_provider = dhcp_factory_mock.return_value.provider
del dhcp_provider.delete_cleaning_ports
del dhcp_provider.create_cleaning_ports
@ -1846,6 +1848,8 @@ class AgentMethodsTestCase(db_base.DbTestCase):
def test_tear_down_inband_cleaning_ports_provider_does_not_delete(
self, dhcp_factory_mock, rm_clean_net_mock):
self.config(group='dhcp', dhcp_provider='my_shiny_dhcp_provider')
self.node.network_interface = 'noop'
self.node.save()
dhcp_provider = dhcp_factory_mock.return_value.provider
del dhcp_provider.delete_cleaning_ports
with task_manager.acquire(

View File

@ -16,17 +16,22 @@
import mock
from testtools.matchers import HasLength
from ironic.common import context
from ironic.common import exception
from ironic.conf import CONF
from ironic import objects
from ironic.tests.unit.db import base
from ironic.tests.unit.db import utils
from ironic.tests.unit.objects import utils as obj_utils
class TestNodeObject(base.DbTestCase):
def setUp(self):
super(TestNodeObject, self).setUp()
self.ctxt = context.get_admin_context()
self.fake_node = utils.get_test_node()
self.node = obj_utils.get_test_node(self.ctxt, **self.fake_node)
def test_get_by_id(self):
node_id = self.fake_node['id']
@ -191,3 +196,22 @@ class TestNodeObject(base.DbTestCase):
}
node._validate_property_values(values['properties'])
self.assertEqual(expect, values['properties'])
def test_get_network_interface_use_field(self):
CONF.set_override('default_network_interface', None)
for nif in ('neutron', 'flat', 'noop'):
self.node.network_interface = nif
self.assertEqual(nif, self.node.network_interface)
def test_get_network_interface_use_conf(self):
for nif in ('neutron', 'flat', 'noop'):
CONF.set_override('default_network_interface', nif)
self.node = obj_utils.get_test_node(self.ctxt, **self.fake_node)
self.assertEqual(nif, self.node.network_interface)
def test_get_network_interface_use_dhcp_provider(self):
CONF.set_override('default_network_interface', None)
for dhcp, nif in (('neutron', 'flat'), ('none', 'noop')):
CONF.set_override('dhcp_provider', dhcp, 'dhcp')
self.node = obj_utils.get_test_node(self.ctxt, **self.fake_node)
self.assertEqual(nif, self.node.network_interface)

View File

@ -404,7 +404,7 @@ class TestObject(_LocalTest, _TestObject):
# version bump. It is md5 hash of object fields and remotable methods.
# The fingerprint values should only be changed if there is a version bump.
expected_object_fingerprints = {
'Node': '1.17-ed09e704576dc1b5a74abcbb727bf722',
'Node': '1.18-8cdb6010014b29f17ca636bef72b7800',
'MyObj': '1.5-4f5efe8f0fcaf182bbe1c7fe3ba858db',
'Chassis': '1.3-d656e039fd8ae9f34efc232ab3980905',
'Port': '1.6-609504503d68982a10f495659990084b',