Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

xml error with vlan operations #19

Open
EvgeniyV opened this issue Dec 10, 2015 · 8 comments
Open

xml error with vlan operations #19

EvgeniyV opened this issue Dec 10, 2015 · 8 comments

Comments

@EvgeniyV
Copy link

Hi!
I get xml error when work with Nexus7K by nxos_vlan

 existing_vlans_list = nxapi_lib.get_list_of_vlans(device)
  File "/usr/lib/python2.6/site-packages/pycsco/nxos/utils/nxapi_lib.py", line 105, in get_list_of_vlans
    data = device.show(command)
  File "/usr/lib/python2.6/site-packages/pycsco/nxos/device.py", line 98, in show
    data_dict = xmltodict.parse(data[1])
  File "/usr/lib/python2.6/site-packages/xmltodict.py", line 248, in parse

I checked 'show vlan' by REST request to NX_API in response i get:

 <ROW_mtuinfo>
           <vlanshowinfo-vlanid>1002</vlanshowinfo-vlanid>
            <vlanshowinfo-media-type>unknown enum:
                 <2>
           </vlanshowinfo-media-type>
          <vlanshowinfo-vlanmode>ce-vlan</vlanshowinfo-vlanmode>
 </ROW_mtuinfo>

as i understand "unknown enum:<2>" make xml invalid
so any operation with vlan get exception....

@jedelman8
Copy link
Owner

Please always include the full error. I don't see unknown enum: <2> in your error.

Can you do these three things:

  1. Reproduce the same error so I can see it with all steps leading up to the error (as shown below)
  2. Try device.show('show vlan') on your device and send the output
  3. Use my test device and try it like this:
>>> from pycsco.nxos.device import Device
>>> 
>>> device = Device(ip='31.220.69.130', username='ntc', password='Networktocode123')
>>> 
>>> from pycsco.nxos.utils.nxapi_lib import get_list_of_vlans
>>> 
>>> get_list_of_vlans(device)
['1', '110', '120']

@EvgeniyV
Copy link
Author

i mean this xml element
<vlanshowinfo-media-type>unknown enum: <2></vlanshowinfo-media-type>
where nx-api returns <2> as xml tag the pythons xml2dict modules raise error on it

Also i reproduced that in rest client with this parameters

[{"params": {"cmd": "show vlan", "version": 1.2}, "jsonrpc": "2.0", "method": "cli", "id": 1}]

get this response:

{
    "jsonrpc":  "2.0",
    "result":   {
        "body": {
            "TABLE_vlanbrief":  {
                "ROW_vlanbrief":    [{
                        "vlanshowbr-vlanid":    "13775409",
                        "vlanshowbr-vlanid-utf":    "1",
                        "vlanshowbr-vlanname":  "default",
                        "vlanshowbr-vlanstate": "active",
                        "vlanshowbr-shutstate": "noshutdown",
                        "vlanshowplist-ifidx":  "port-channel1,port-channel3,Ethernet6/1"
                    }, {
                        "vlanshowbr-vlanid":    "1826045148",
                        "vlanshowbr-vlanid-utf":    "1002",
                        "vlanshowbr-vlanname":  "fddi-default",
                        "vlanshowbr-vlanstate": "suspend",
                        "vlanshowbr-shutstate": "shutdown",
                        "vlanshowplist-ifidx":  "port-channel1,port-channel3,Ethernet6/31"
                    }]
            },
            "TABLE_mtuinfo":    {
                "ROW_mtuinfo":  [{
                        "vlanshowinfo-vlanid":  "1",
                        "vlanshowinfo-media-type":  "enet",
                        "vlanshowinfo-vlanmode":    "ce-vlan"
                    }, {
                        "vlanshowinfo-vlanid":  "1002",
                        "vlanshowinfo-media-type":  "unknown enum:<2>",
                        "vlanshowinfo-vlanmode":    "ce-vlan"
                    }]
            }
        }
    },
    "id":   1
}

i have reproduced your script - with your device i haven't any problems
but with my device i see this for get_list_of_vlans:

 File "tst2.py", line 11, in <module>
    print get_list_of_vlans(device)
  File "/usr/lib/python2.6/site-packages/pycsco/nxos/utils/nxapi_lib.py", line 105, in get_list_of_vlans
    data = device.show(command)
  File "/usr/lib/python2.6/site-packages/pycsco/nxos/device.py", line 98, in show
    data_dict = xmltodict.parse(data[1])
  File "/usr/lib/python2.6/site-packages/xmltodict.py", line 248, in parse
    parser.Parse(xml_input, True)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 306, column 47

and this for device.show('show vlan'):

Traceback (most recent call last):
  File "tst2.py", line 12, in <module>
    print device.show('show vlan')
  File "/usr/lib/python2.6/site-packages/pycsco/nxos/device.py", line 98, in show
    data_dict = xmltodict.parse(data[1])
  File "/usr/lib/python2.6/site-packages/xmltodict.py", line 248, in parse
    parser.Parse(xml_input, True)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 306, column 47

@jedelman8
Copy link
Owner

It looks like it's an issue with how your 7K is returning data...could be a bug in that version of OS I suppose.

Try removing VLAN 1002 - does that work? Then try adding other VLANs and see if they work.

@jedelman8
Copy link
Owner

Please Include a show run too

@EvgeniyV
Copy link
Author

I am working on version 7.2(1)D1(1)
Jason, i think the problem is in NX API
on this device when i run in terminal show vlan command and see list of vlans :

VLAN Type         Vlan-mode
---- -----        ----------
1    enet         CE
25   enet         CE
26   enet         CE
485  enet         CE
1002 fddi         CE
1003 token-ring   CE
1004 fddinet      CE
1005 trnet        CE

and as i understand the problem s in Type of vlan if type is enet - response is good and in my case vlans 1002-1005 have different types and i think this maybe a reason why they have bad mapping like unknown enum:<2>

@jedelman8
Copy link
Owner

Correct. I can add an exception into the code for this, that way it still works.

Letting @abhinavmodi know too since he works for the 7K team at Cisco :)

@abhinavmodi
Copy link

Thank you @jedelman8 , @EvgeniyV - Will check this out.

@EvgeniyV
Copy link
Author

also i get same problem on Nexus5K when try to call nxos_get_facts
in

TASK: [get facts] ************************************************************* 
failed: [10.80.3.6] => {"failed": true, "parsed": false}
Traceback (most recent call last):
  File "/home/yvarfolo/.ansible/tmp/ansible-tmp-1450091820.6-96091117715363/nxos_get_facts", line 1739, in <module>
    main()
  File "/home/yvarfolo/.ansible/tmp/ansible-tmp-1450091820.6-96091117715363/nxos_get_facts", line 119, in main
    facts = nxapi_lib.get_facts(device)
  File "/usr/lib/python2.6/site-packages/pycsco/nxos/utils/nxapi_lib.py", line 2382, in get_facts
    xml = device.show(command)
  File "/usr/lib/python2.6/site-packages/pycsco/nxos/device.py", line 98, in show
    data_dict = xmltodict.parse(data[1])
  File "/usr/lib/python2.6/site-packages/xmltodict.py", line 248, in parse
    parser.Parse(xml_input, True)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 297, column 31


FATAL: all hosts have already failed -- aborting

in nxapi_lib error raising on the block:

 command = 'show interface status'
    try:
        xml = device.show(command)
        result = xmltodict.parse(xml[1])
        ....
    except:
        ...

So when i run show interface status as rest request (with json format) to nx_api
i get some interfaces with the same mapping problem

   {
            "interface": "Ethernet2/7",
            "name": "VPC Peer Link",
            "state": "unknown enum:<272>",
            "vlan": "trunk",
            "duplex": "full",
            "speed": "10G",
            "type": "10Gbase-SR"
          },
          {
            "interface": "Ethernet2/8",
            "name": "VPC Peer Link",
            "state": "unknown enum:<272>",
            "vlan": "trunk",
            "duplex": "full",
            "speed": "10G",
            "type": "10Gbase-SR"
          },

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants