cisco_ios_show_interface_link template breaks when there are subinterfaces
brianatlarge opened this issue · 6 comments
ISSUE TYPE
- Template Issue with error and raw data
TEMPLATE USING
Value PORT ([a-zA-Z]{2,3}[0-9]{1,2}\/[0-9]{1,2}(\/[0-9]{1,2})?)
Value NAME (.+?)
Value DOWNTIME ((00:00:00)|(([0-9]{1,2} year[s]? , )?([0-9]{1,2} week[s]?, )?([0-9]{1,2} day[s]?, )?([0-9]{1,2} hour[s]?, )?([0-9]{1,2} minute[s]? )?([0-9]{1,2} secs))|((([0-9]{1,2}y)?([0-9]{1,2}w)?([0-9]{1,2}d)([0-9]{1,2}h)?|[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})))
Value SINCE (.+?)
Value UPTIME ((([0-9]{1,2}m)?([0-9]{1,2}w)?([0-9]{1,2}d)|[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}))
Start
^\s*\^\s* -> EOF
^.*Invalid input detected.* -> EOF
^Load\s+for\s+
# Capture time-stamp if vty line has command time-stamping turned on
^Time\s+source\s+is
^-+\s*$$
^\s*Port\s+Name\s+Down Time\s+Down Since\s*$$ -> DownSince
^\s*Port\s+Name\s+Down Time\s+Up Time\s*$$ -> UpTime
^\s*$$
^. -> Error
DownSince
^\s*${PORT}\s+${DOWNTIME}\s*$$ -> Record
^\s*${PORT}\s+${DOWNTIME}\s*${SINCE}\s*$$ -> Record
^\s*${PORT}\s+${NAME}\s*${DOWNTIME}\s*$$ -> Record
^\s*${PORT}\s+${NAME}\s*${DOWNTIME}\s+${SINCE}\s*$$ -> Record
^\s*$$
^. -> Error
UpTime
^\s*${PORT}\s+${NAME}\s+00:00:00\s+${UPTIME}?\s*$$ -> Record
^\s*${PORT}\s+${DOWNTIME}\s+${UPTIME}?\s*$$ -> Record
^\s*${PORT}\s+${NAME}\s+${DOWNTIME}\s*$$ -> Record
^\s*$$
^. -> Error
SAMPLE COMMAND OUTPUT
Te5/0/1 43w5d
Te5/0/2 43w5d
Te5/0/3 43w5d
Te5/0/4 43w5d
Te5/0/5 43w5d
Te5/0/6 43w5d
Te5/0/7 43w5d
Te5/0/8 43w5d
Fo5/0/9 43w5d
Fo5/0/10 43w5d
Twe5/0/1 L3 Link 00:00:00 9w4d
Twe5/0/1.602 L3 Link VR 00:00:00 9w4d
Twe5/0/1.603 L3 Link VRF 00:00:00 9w4d
Twe5/0/5 43w5d
Ap5/0/1 43w5d
Te6/0/1 43w5d
Te6/0/2 43w5d
Te6/0/3 43w5d
Te6/0/4 43w5d
Te6/0/5 43w5d
Te6/0/6 43w5d
Te6/0/7 43w5d
Te6/0/8 43w5d
Fo6/0/9 43w5d
Fo6/0/10 43w5d
Twe6/0/1 L3 Link 00:00:00 9w4d
Twe6/0/1.602 L3 Link VR 00:00:00 9w4d
Twe6/0/1.603 L3 Link VRF 00:00:00 9w4d
Twe6/0/5 43w5d
SUMMARY
When subinterfaces are present, the subinterface is not included in the second group for the regex match for port information
STEPS TO REPRODUCE
EXPECTED RESULTS
results =
{'downtime': '',
'name': 'L3 Link',
'port': 'Te6/0/1',
'since': '',
'uptime': '9w4d'},
{'downtime': '',
'name': 'L3 Link VR',
'port': 'Te6/0/1.602',
'since': '',
'uptime': '9w4d'}
ACTUAL RESULTS
textfsm.parser.TextFSMError: State Error raised. Rule Line: 32. Input Line: Twe6/0/1.602 L3 Link VR 00:00:00 9w4d
would maybe using the below work better?
Value PORT (\S+)
would maybe using the below work better?
Value PORT (\S+)
\S+
would probably work out better in the long run
It is simpler than adding (\.[0-9]+)?
to the end of that already long and complex regex. 😬
The below works, but I don't see a reason why \S+
couldn't be used instead.
Value PORT ([a-zA-Z]{2,3}[0-9]{1,2}\/[0-9]{1,2}(\/[0-9]{1,2})?(\.[0-9]+)?)
The line formatting looks a little odd. I'd expect the "columns" to generally line up.
Example:
Twe5/0/1.602 L3 Link VR 00:00:00 9w4d
The sample output from above with the header line
Port Name Down Time Up Time
Te5/0/1 43w5d
Te5/0/2 43w5d
Te5/0/3 43w5d
Te5/0/4 43w5d
Te5/0/5 43w5d
Te5/0/6 43w5d
Te5/0/7 43w5d
Te5/0/8 43w5d
Fo5/0/9 43w5d
Fo5/0/10 43w5d
Twe5/0/1 L3 Link 00:00:00 9w4d
Twe5/0/1.602 L3 Link VR 00:00:00 9w4d
Twe5/0/1.603 L3 Link VRF 00:00:00 9w4d
Twe5/0/5 43w5d
Ap5/0/1 43w5d
Te6/0/1 43w5d
Te6/0/2 43w5d
Te6/0/3 43w5d
Te6/0/4 43w5d
Te6/0/5 43w5d
Te6/0/6 43w5d
Te6/0/7 43w5d
Te6/0/8 43w5d
Fo6/0/9 43w5d
Fo6/0/10 43w5d
Twe6/0/1 L3 Link 00:00:00 9w4d
Twe6/0/1.602 L3 Link VR 00:00:00 9w4d
Twe6/0/1.603 L3 Link VRF 00:00:00 9w4d
Twe6/0/5 43w5d