From 7675fc21bef64cc06560e23cb61f33508e552eeb Mon Sep 17 00:00:00 2001 From: root Date: Mon, 9 Jan 2017 13:36:20 +0100 Subject: [PATCH] Properly handle to set id when interface already has a virtualport element --- driver/ovirt_provider_ovn_hook.py | 19 ++++++++++++++----- driver/test_ovirt_provider_ovn_hook.py | 22 ++++++++++++++++++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/driver/ovirt_provider_ovn_hook.py b/driver/ovirt_provider_ovn_hook.py index 57465c4..582252c 100755 --- a/driver/ovirt_provider_ovn_hook.py +++ b/driver/ovirt_provider_ovn_hook.py @@ -37,13 +37,22 @@ def ovs_device(domxml): return # skip if not an interface source = iface.getElementsByTagName('source')[0] - virtualport = domxml.createElement('virtualport') - virtualport.setAttribute('type', 'openvswitch') - iface.appendChild(virtualport) + try: + virtualport = iface.getElementsByTagName('virtualport')[0] + except IndexError: + virtualport = domxml.createElement('virtualport') + virtualport.setAttribute('type', 'openvswitch') + iface.appendChild(virtualport) - parameters = domxml.createElement('parameters') + parameters_interfaceid = None + for parameters in virtualport.getElementsByTagName('parameters'): + if parameters.getAttribute('interfaceid') != None: + parameters_interfaceid = parameters + + if parameters_interfaceid == None: + parameters = domxml.createElement('parameters') + virtualport.appendChild(parameters) parameters.setAttribute('interfaceid', ifc_name) - virtualport.appendChild(parameters) source.setAttribute('bridge', BRIDGE_NAME) diff --git a/driver/test_ovirt_provider_ovn_hook.py b/driver/test_ovirt_provider_ovn_hook.py index ea4e589..c663452 100755 --- a/driver/test_ovirt_provider_ovn_hook.py +++ b/driver/test_ovirt_provider_ovn_hook.py @@ -32,12 +32,12 @@ from ovirt_provider_ovn_hook import VNIC_ID_KEY import ovirt_provider_ovn_hook -INPUT_XML = """ +INPUT_XML_1 = """ """ -EXPECTED_XML = """ +EXPECTED_XML_1 = """ @@ -46,11 +46,29 @@ EXPECTED_XML = """ """ +INPUT_XML_2 = """ + + + + +""" +EXPECTED_XML_2 = """ + + + + + + +""" class TestOvirtProviderOvnHook(object): @mock.patch.object(os, 'environ', {VNIC_ID_KEY: '7'}) def test_ovs_device(self): + self._test_ovs_device(INPUT_XML_1, EXPECTED_XML_1) + self._test_ovs_device(INPUT_XML_2, EXPECTED_XML_2) + + def _test_ovs_device(self, INPUT_XML, EXPECTED_XML): domxml = minidom.parseString(INPUT_XML) ovirt_provider_ovn_hook.ovs_device(domxml) -- 1.8.3.1