From f410fe157a36f39c9c6189e33c794a00d8c067c8 Mon Sep 17 00:00:00 2001 From: Boden R Date: Fri, 28 Aug 2015 14:25:08 -0600 Subject: [PATCH] Add support for dhcp extra opt to nsx v3 plugin In addition to dhcp extra opt support, this commit also enables the dhcp extra opts unit tests for the nsx v3 plugin. Change-Id: If9e51fe93bd62fa27abdf6349ddd053fc6e1d325 --- .../neutron/plugins/vmware/plugins/nsx_v3_plugin.py | 11 ++++++++++- .../neutron/tests/unit/vmware/test_nsx_v3_plugin.py | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/vmware_nsx/neutron/plugins/vmware/plugins/nsx_v3_plugin.py b/vmware_nsx/neutron/plugins/vmware/plugins/nsx_v3_plugin.py index 2f303fe74a..4959eb056d 100644 --- a/vmware_nsx/neutron/plugins/vmware/plugins/nsx_v3_plugin.py +++ b/vmware_nsx/neutron/plugins/vmware/plugins/nsx_v3_plugin.py @@ -27,6 +27,7 @@ from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import metadata_rpc from neutron.api.v2 import attributes +from neutron.extensions import extra_dhcp_opt as edo_ext from neutron.extensions import l3 from neutron.extensions import portbindings as pbin from neutron.extensions import providernet as pnet @@ -38,6 +39,7 @@ from neutron.common import topics from neutron.db import agents_db from neutron.db import agentschedulers_db from neutron.db import db_base_plugin_v2 +from neutron.db import extradhcpopt_db from neutron.db import l3_db from neutron.db import models_v2 from neutron.db import portbindings_db @@ -59,7 +61,8 @@ class NsxV3Plugin(db_base_plugin_v2.NeutronDbPluginV2, securitygroups_db.SecurityGroupDbMixin, l3_db.L3_NAT_dbonly_mixin, portbindings_db.PortBindingMixin, - agentschedulers_db.DhcpAgentSchedulerDbMixin): + agentschedulers_db.DhcpAgentSchedulerDbMixin, + extradhcpopt_db.ExtraDhcpOptMixin): # NOTE(salv-orlando): Security groups are not actually implemented by this # plugin at the moment @@ -69,6 +72,7 @@ class NsxV3Plugin(db_base_plugin_v2.NeutronDbPluginV2, supported_extension_aliases = ["quotas", "binding", + "extra_dhcp_opt", "security-group", "router", "provider"] @@ -318,6 +322,7 @@ class NsxV3Plugin(db_base_plugin_v2.NeutronDbPluginV2, return parent_name, tag def create_port(self, context, port): + dhcp_opts = port['port'].get(edo_ext.EXTRADHCPOPTS, []) port_id = uuidutils.generate_uuid() tags = utils.build_v3_tags_payload(port['port']) port['port']['id'] = port_id @@ -358,6 +363,8 @@ class NsxV3Plugin(db_base_plugin_v2.NeutronDbPluginV2, sgids = self._get_security_groups_on_port(context, port) self._process_port_create_security_group( context, neutron_db, sgids) + self._process_port_create_extra_dhcp_opts(context, neutron_db, + dhcp_opts) return neutron_db @@ -376,6 +383,8 @@ class NsxV3Plugin(db_base_plugin_v2.NeutronDbPluginV2, with context.session.begin(subtransactions=True): updated_port = super(NsxV3Plugin, self).update_port(context, id, port) + self._update_extra_dhcp_opts_on_port(context, id, port, + updated_port) sec_grp_updated = self.update_security_group_on_port( context, id, port, original_port, updated_port) diff --git a/vmware_nsx/neutron/tests/unit/vmware/test_nsx_v3_plugin.py b/vmware_nsx/neutron/tests/unit/vmware/test_nsx_v3_plugin.py index 49993579d1..8c20d1bfd6 100644 --- a/vmware_nsx/neutron/tests/unit/vmware/test_nsx_v3_plugin.py +++ b/vmware_nsx/neutron/tests/unit/vmware/test_nsx_v3_plugin.py @@ -17,6 +17,7 @@ import mock from oslo_config import cfg import neutron.tests.unit.db.test_db_base_plugin_v2 as test_plugin +from neutron.tests.unit.extensions import test_extra_dhcp_opt as test_dhcpopts import neutron.tests.unit.extensions.test_securitygroup as ext_sg from vmware_nsx.neutron.plugins.vmware.nsxlib import v3 as nsxlib from vmware_nsx.neutron.tests.unit.vmware import nsx_v3_mocks @@ -69,3 +70,10 @@ class SecurityGroupsTestCase(ext_sg.SecurityGroupDBTestCase): class TestSecurityGroups(ext_sg.TestSecurityGroups, SecurityGroupsTestCase): pass + + +class DHCPOptsTestCase(test_dhcpopts.TestExtraDhcpOpt, NsxPluginV3TestCase): + + def setUp(self, plugin=None): + super(test_dhcpopts.ExtraDhcpOptDBTestCase, self).setUp( + plugin=PLUGIN_NAME)