diff --git a/inventory_provider/juniper.py b/inventory_provider/juniper.py index ef0b5ee02248d3320419c5ad0bbde85d110eae6f..3e4405e4fc82f3df6d06e899bc6421e74a33c95d 100644 --- a/inventory_provider/juniper.py +++ b/inventory_provider/juniper.py @@ -56,6 +56,7 @@ CONFIG_SCHEMA = """<?xml version="1.1" encoding="UTF-8" ?> <xs:sequence> <xs:choice minOccurs="1" maxOccurs="unbounded"> <xs:element name="apply-groups" minOccurs="0" type="xs:string" /> + <xs:element name="interface-range" minOccurs="0" type="generic-sequence" /> <xs:element name="interface" minOccurs="1" maxOccurs="unbounded" type="juniper-interface" /> </xs:choice> </xs:sequence> @@ -70,6 +71,9 @@ CONFIG_SCHEMA = """<?xml version="1.1" encoding="UTF-8" ?> <xs:element name="firewall" minOccurs="0" type="generic-sequence" /> <xs:element name="routing-instances" minOccurs="0" type="generic-sequence" /> <xs:element name="bridge-domains" minOccurs="0" type="generic-sequence" /> + <xs:element name="virtual-chassis" minOccurs="0" type="generic-sequence" /> + <xs:element name="vlans" minOccurs="0" type="generic-sequence" /> + <xs:element name="comment" minOccurs="0" type="xs:string" /> </xs:choice> </xs:sequence> <xs:attribute name="changed-seconds" type="xs:string" /> diff --git a/test/test_netconf_validation.py b/test/test_netconf_validation.py new file mode 100644 index 0000000000000000000000000000000000000000..3eca33cf7840f6e524bc6e8b76a4a7fd91fab007 --- /dev/null +++ b/test/test_netconf_validation.py @@ -0,0 +1,50 @@ +import os +import pytest +from lxml import etree +from inventory_provider.juniper import validate_netconf_config + + +@pytest.mark.parametrize('hostname', [ + 'mx1.ams.nl.geant.net', + 'mx1.ath2.gr.geant.net', + 'mx1.buc.ro.geant.net', + 'mx1.bud.hu.geant.net', + 'mx1.dub.ie.geant.net', + 'mx1.dub2.ie.geant.net', + 'mx1.fra.de.geant.net', + 'mx1.gen.ch.geant.net', + 'mx1.ham.de.geant.net', + 'mx1.kau.lt.geant.net', + 'mx1.lis.pt.geant.net', + 'mx1.lon.uk.geant.net', + 'mx1.lon2.uk.geant.net', + 'mx1.mad.es.geant.net', + 'mx1.mar.fr.geant.net', + 'mx1.mil2.it.geant.net', + 'mx1.par.fr.geant.net', + 'mx1.poz.pl.geant.net', + 'mx1.pra.cz.geant.net', + 'mx1.sof.bg.geant.net', + 'mx1.tal.ee.geant.net', + 'mx1.vie.at.geant.net', + 'mx2.ath.gr.geant.net', + 'mx2.bra.sk.geant.net', + 'mx2.bru.be.geant.net', + 'mx2.kau.lt.geant.net', + 'mx2.lis.pt.geant.net', + 'mx2.lju.si.geant.net', + 'mx2.rig.lv.geant.net', + 'mx2.tal.ee.geant.net', + 'mx2.zag.hr.geant.net', + 'qfx.fra.de.geant.net', + 'qfx.lon2.uk.geant.net', + 'qfx.par.fr.geant.net' +]) +def test_netconf_docs(hostname): + filename = os.path.join( + os.path.dirname(__file__), + 'data', + hostname + '-netconf.xml') + + doc = etree.parse(filename) + validate_netconf_config(doc)