--- /usr/libexec/vdsm/hooks/before_device_create/ovirt_provider_ovn_hook.orig 2016-12-29 23:12:00.040538156 +0100 +++ /usr/libexec/vdsm/hooks/before_device_create/ovirt_provider_ovn_hook 2016-12-30 00:42:11.435474643 +0100 @@ -20,7 +20,8 @@ import os import hooking - +import sys +import xml #BRIDGE_NAME = 'br-int' BRIDGE_NAME = 'ovirtbridge' @@ -36,17 +37,27 @@ iface = domxml.getElementsByTagName('interface')[0] except IndexError: return # skip if not an interface - source = iface.getElementsByTagName('source')[0] - - virtualport = domxml.createElement('virtualport') - virtualport.setAttribute('type', 'openvswitch') - iface.appendChild(virtualport) + + #source = iface.getElementsByTagName('source')[0] - parameters = domxml.createElement('parameters') + try: + virtualport = iface.getElementsByTagName('virtualport')[0] + except IndexError: + virtualport = domxml.createElement('virtualport') + virtualport.setAttribute('type', 'openvswitch') + iface.appendChild(virtualport) + + 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) + #source.setAttribute('bridge', BRIDGE_NAME) def get_lsp_name(): @@ -66,5 +77,81 @@ ovs_device(domxml) hooking.write_domxml(domxml) +def test(domxml): + os.environ[VNIC_ID_KEY] = '4981ee5f-6e15-4bd5-a1cf-7ead9bdd5873' + print("Domain xml before ovs_device: %s" % + domxml.toprettyxml(encoding='UTF-8')) + + ovs_device(domxml) + + print("Domain xml after ovs_device: %s" % + domxml.toprettyxml(encoding='UTF-8')) + +def test1(): + domxml = xml.dom.minidom.parseString(""" + + + +
+ + + + + + + + + + """.replace("\n","").replace(" ","")) + print("test1") + test(domxml) + +def test2(): + domxml = xml.dom.minidom.parseString(""" + + + +
+ + + + + + + + + + + """.replace("\n","").replace(" ","")) + print("test2") + test(domxml) + +def test3(): + domxml = xml.dom.minidom.parseString(""" + + + +
+ + + + + + + + + + + + + """.replace("\n","").replace(" ","")) + print("test3") + test(domxml) + if __name__ == '__main__': - main() + if '--test' in sys.argv: + test1() + test2() + test3() + else: + main()