Reference path:
ttp://yang/ietf-interfaces_cisco_ios.txt
This templates produces structured data compatible with ietf-interfaces YANG module
out of Cisco IOS show run
configuration output.
YANG ietf-interfaces module tree:
+--rw ietf-interfaces:interfaces
| +--rw interface* [name]
| +--ro admin-status {enumeration}
| +--rw description? {string}
| +--rw enabled? {boolean}
| +--ro higher-layer-if* {interface-ref(leafref)}
| +--ro if-index {int32}
| +--rw ietf-ip:ipv4!
| | +--rw address* [ip]
| | | +--rw ip {ipv4-address-no-zone(string)}
| | | +--ro origin? {ip-address-origin(enumeration)}
| | | +--rw (subnet)
| | | +--:(netmask)
| | | | +--rw netmask? {dotted-quad(string)}
| | | +--:(prefix-length)
| | | +--rw prefix-length? {uint8}
| | +--rw enabled? {boolean}
| | +--rw forwarding? {boolean}
| | +--rw mtu? {uint16}
| | +--rw neighbor* [ip]
| | +--rw ip {ipv4-address-no-zone(string)}
| | +--rw link-layer-address {phys-address(string)}
| | +--ro origin? {neighbor-origin(enumeration)}
| +--rw ietf-ip:ipv6!
| | +--rw address* [ip]
| | | +--rw ip {ipv6-address-no-zone(string)}
| | | +--ro origin? {ip-address-origin(enumeration)}
| | | +--rw prefix-length {uint8}
| | | +--ro status? {enumeration}
| | +--rw autoconf
| | | +--rw create-global-addresses? {boolean}
| | | +--rw create-temporary-addresses? {boolean}
| | | +--rw temporary-preferred-lifetime? {uint32}
| | | +--rw temporary-valid-lifetime? {uint32}
| | +--rw dup-addr-detect-transmits? {uint32}
| | +--rw enabled? {boolean}
| | +--rw forwarding? {boolean}
| | +--rw mtu? {uint32}
| | +--rw neighbor* [ip]
| | +--rw ip {ipv6-address-no-zone(string)}
| | +--ro is-router? {empty}
| | +--rw link-layer-address {phys-address(string)}
| | +--ro origin? {neighbor-origin(enumeration)}
| | +--ro state? {enumeration}
| +--ro last-change? {date-and-time(string)}
| +--rw link-up-down-trap-enable? {enumeration}
| +--ro lower-layer-if* {interface-ref(leafref)}
| +--rw name {string}
| +--ro oper-status {enumeration}
| +--ro phys-address? {phys-address(string)}
| +--ro speed? {gauge64(uint64)}
| +--ro statistics
| | +--ro discontinuity-time {date-and-time(string)}
| | +--ro in-broadcast-pkts? {counter64(uint64)}
| | +--ro in-discards? {counter32(uint32)}
| | +--ro in-errors? {counter32(uint32)}
| | +--ro in-multicast-pkts? {counter64(uint64)}
| | +--ro in-octets? {counter64(uint64)}
| | +--ro in-unicast-pkts? {counter64(uint64)}
| | +--ro in-unknown-protos? {counter32(uint32)}
| | +--ro out-broadcast-pkts? {counter64(uint64)}
| | +--ro out-discards? {counter32(uint32)}
| | +--ro out-errors? {counter32(uint32)}
| | +--ro out-multicast-pkts? {counter64(uint64)}
| | +--ro out-octets? {counter64(uint64)}
| | +--ro out-unicast-pkts? {counter64(uint64)}
| +--rw type {identityref}
+--ro ietf-interfaces:interfaces-state
+--ro interface* [name]
+--ro admin-status {enumeration}
+--ro higher-layer-if* {interface-state-ref(leafref)}
+--ro if-index {int32}
+--ro ietf-ip:ipv4!
| +--ro address* [ip]
| | +--ro ip {ipv4-address-no-zone(string)}
| | +--ro origin? {ip-address-origin(enumeration)}
| | +--ro (subnet)?
| | +--:(netmask)
| | | +--ro netmask? {dotted-quad(string)}
| | +--:(prefix-length)
| | +--ro prefix-length? {uint8}
| +--ro forwarding? {boolean}
| +--ro mtu? {uint16}
| +--ro neighbor* [ip]
| +--ro ip {ipv4-address-no-zone(string)}
| +--ro link-layer-address? {phys-address(string)}
| +--ro origin? {neighbor-origin(enumeration)}
+--ro ietf-ip:ipv6!
| +--ro address* [ip]
| | +--ro ip {ipv6-address-no-zone(string)}
| | +--ro origin? {ip-address-origin(enumeration)}
| | +--ro prefix-length {uint8}
| | +--ro status? {enumeration}
| +--ro forwarding? {boolean}
| +--ro mtu? {uint32}
| +--ro neighbor* [ip]
| +--ro ip {ipv6-address-no-zone(string)}
| +--ro is-router? {empty}
| +--ro link-layer-address? {phys-address(string)}
| +--ro origin? {neighbor-origin(enumeration)}
| +--ro state? {enumeration}
+--ro last-change? {date-and-time(string)}
+--ro lower-layer-if* {interface-state-ref(leafref)}
+--ro name {string}
+--ro oper-status {enumeration}
+--ro phys-address? {phys-address(string)}
+--ro speed? {gauge64(uint64)}
+--ro statistics
| +--ro discontinuity-time {date-and-time(string)}
| +--ro in-broadcast-pkts? {counter64(uint64)}
| +--ro in-discards? {counter32(uint32)}
| +--ro in-errors? {counter32(uint32)}
| +--ro in-multicast-pkts? {counter64(uint64)}
| +--ro in-octets? {counter64(uint64)}
| +--ro in-unicast-pkts? {counter64(uint64)}
| +--ro in-unknown-protos? {counter32(uint32)}
| +--ro out-broadcast-pkts? {counter64(uint64)}
| +--ro out-discards? {counter32(uint32)}
| +--ro out-errors? {counter32(uint32)}
| +--ro out-multicast-pkts? {counter64(uint64)}
| +--ro out-octets? {counter64(uint64)}
| +--ro out-unicast-pkts? {counter64(uint64)}
+--ro type {identityref}
Sample data:
interface GigabitEthernet1/3.251
description Customer #32148
encapsulation dot1q 251
ip address 172.16.33.10 255.255.255.128
shutdown
!
interface GigabitEthernet1/4
description vCPEs access control
ip address 172.16.33.10 255.255.255.128
!
Sample results:
{
"ietf-interfaces:interfaces": {
"interface": [
{
"admin-status": "down",
"description": "Customer " "#32148",
"enabled": False,
"ietf-ip:ipv4": {
"address": [
{
"ip": "172.16.33.10",
"netmask": "255.255.255.128",
"origin": "static",
}
]
},
"if-index": 1,
"link-up-down-trap-enable": "enabled",
"name": "GigabitEthernet1/3.251",
"oper-status": "unknown",
"statistics": {
"discontinuity-time": "1970-01-01T00:00:00+00:00"
},
"type": "iana-if-type:ethernetCsmacd",
},
{
"admin-status": "up",
"description": "vCPEs " "access " "control",
"enabled": True,
"ietf-ip:ipv4": {
"address": [
{
"ip": "172.16.33.10",
"netmask": "255.255.255.128",
"origin": "static",
}
]
},
"if-index": 1,
"link-up-down-trap-enable": "enabled",
"name": "GigabitEthernet1/4",
"oper-status": "unknown",
"statistics": {
"discontinuity-time": "1970-01-01T00:00:00+00:00"
},
"type": "iana-if-type:ethernetCsmacd",
},
]
}
}
----------------------------------------------------------------------------
Cisco IOS interfaces groups and inputs
----------------------------------------------------------------------------
Template Content
<doc>
This templates produces structured data compatible with ietf-interfaces YANG module
out of Cisco IOS 'show run' configuration output.
YANG ietf-interfaces module tree:
'''
+--rw ietf-interfaces:interfaces
| +--rw interface* [name]
| +--ro admin-status {enumeration}
| +--rw description? {string}
| +--rw enabled? {boolean}
| +--ro higher-layer-if* {interface-ref(leafref)}
| +--ro if-index {int32}
| +--rw ietf-ip:ipv4!
| | +--rw address* [ip]
| | | +--rw ip {ipv4-address-no-zone(string)}
| | | +--ro origin? {ip-address-origin(enumeration)}
| | | +--rw (subnet)
| | | +--:(netmask)
| | | | +--rw netmask? {dotted-quad(string)}
| | | +--:(prefix-length)
| | | +--rw prefix-length? {uint8}
| | +--rw enabled? {boolean}
| | +--rw forwarding? {boolean}
| | +--rw mtu? {uint16}
| | +--rw neighbor* [ip]
| | +--rw ip {ipv4-address-no-zone(string)}
| | +--rw link-layer-address {phys-address(string)}
| | +--ro origin? {neighbor-origin(enumeration)}
| +--rw ietf-ip:ipv6!
| | +--rw address* [ip]
| | | +--rw ip {ipv6-address-no-zone(string)}
| | | +--ro origin? {ip-address-origin(enumeration)}
| | | +--rw prefix-length {uint8}
| | | +--ro status? {enumeration}
| | +--rw autoconf
| | | +--rw create-global-addresses? {boolean}
| | | +--rw create-temporary-addresses? {boolean}
| | | +--rw temporary-preferred-lifetime? {uint32}
| | | +--rw temporary-valid-lifetime? {uint32}
| | +--rw dup-addr-detect-transmits? {uint32}
| | +--rw enabled? {boolean}
| | +--rw forwarding? {boolean}
| | +--rw mtu? {uint32}
| | +--rw neighbor* [ip]
| | +--rw ip {ipv6-address-no-zone(string)}
| | +--ro is-router? {empty}
| | +--rw link-layer-address {phys-address(string)}
| | +--ro origin? {neighbor-origin(enumeration)}
| | +--ro state? {enumeration}
| +--ro last-change? {date-and-time(string)}
| +--rw link-up-down-trap-enable? {enumeration}
| +--ro lower-layer-if* {interface-ref(leafref)}
| +--rw name {string}
| +--ro oper-status {enumeration}
| +--ro phys-address? {phys-address(string)}
| +--ro speed? {gauge64(uint64)}
| +--ro statistics
| | +--ro discontinuity-time {date-and-time(string)}
| | +--ro in-broadcast-pkts? {counter64(uint64)}
| | +--ro in-discards? {counter32(uint32)}
| | +--ro in-errors? {counter32(uint32)}
| | +--ro in-multicast-pkts? {counter64(uint64)}
| | +--ro in-octets? {counter64(uint64)}
| | +--ro in-unicast-pkts? {counter64(uint64)}
| | +--ro in-unknown-protos? {counter32(uint32)}
| | +--ro out-broadcast-pkts? {counter64(uint64)}
| | +--ro out-discards? {counter32(uint32)}
| | +--ro out-errors? {counter32(uint32)}
| | +--ro out-multicast-pkts? {counter64(uint64)}
| | +--ro out-octets? {counter64(uint64)}
| | +--ro out-unicast-pkts? {counter64(uint64)}
| +--rw type {identityref}
+--ro ietf-interfaces:interfaces-state
+--ro interface* [name]
+--ro admin-status {enumeration}
+--ro higher-layer-if* {interface-state-ref(leafref)}
+--ro if-index {int32}
+--ro ietf-ip:ipv4!
| +--ro address* [ip]
| | +--ro ip {ipv4-address-no-zone(string)}
| | +--ro origin? {ip-address-origin(enumeration)}
| | +--ro (subnet)?
| | +--:(netmask)
| | | +--ro netmask? {dotted-quad(string)}
| | +--:(prefix-length)
| | +--ro prefix-length? {uint8}
| +--ro forwarding? {boolean}
| +--ro mtu? {uint16}
| +--ro neighbor* [ip]
| +--ro ip {ipv4-address-no-zone(string)}
| +--ro link-layer-address? {phys-address(string)}
| +--ro origin? {neighbor-origin(enumeration)}
+--ro ietf-ip:ipv6!
| +--ro address* [ip]
| | +--ro ip {ipv6-address-no-zone(string)}
| | +--ro origin? {ip-address-origin(enumeration)}
| | +--ro prefix-length {uint8}
| | +--ro status? {enumeration}
| +--ro forwarding? {boolean}
| +--ro mtu? {uint32}
| +--ro neighbor* [ip]
| +--ro ip {ipv6-address-no-zone(string)}
| +--ro is-router? {empty}
| +--ro link-layer-address? {phys-address(string)}
| +--ro origin? {neighbor-origin(enumeration)}
| +--ro state? {enumeration}
+--ro last-change? {date-and-time(string)}
+--ro lower-layer-if* {interface-state-ref(leafref)}
+--ro name {string}
+--ro oper-status {enumeration}
+--ro phys-address? {phys-address(string)}
+--ro speed? {gauge64(uint64)}
+--ro statistics
| +--ro discontinuity-time {date-and-time(string)}
| +--ro in-broadcast-pkts? {counter64(uint64)}
| +--ro in-discards? {counter32(uint32)}
| +--ro in-errors? {counter32(uint32)}
| +--ro in-multicast-pkts? {counter64(uint64)}
| +--ro in-octets? {counter64(uint64)}
| +--ro in-unicast-pkts? {counter64(uint64)}
| +--ro in-unknown-protos? {counter32(uint32)}
| +--ro out-broadcast-pkts? {counter64(uint64)}
| +--ro out-discards? {counter32(uint32)}
| +--ro out-errors? {counter32(uint32)}
| +--ro out-multicast-pkts? {counter64(uint64)}
| +--ro out-octets? {counter64(uint64)}
| +--ro out-unicast-pkts? {counter64(uint64)}
+--ro type {identityref}
'''
Sample data:
'''
interface GigabitEthernet1/3.251
description Customer #32148
encapsulation dot1q 251
ip address 172.16.33.10 255.255.255.128
shutdown
!
interface GigabitEthernet1/4
description vCPEs access control
ip address 172.16.33.10 255.255.255.128
!
'''
Sample results:
'''
{
"ietf-interfaces:interfaces": {
"interface": [
{
"admin-status": "down",
"description": "Customer " "#32148",
"enabled": False,
"ietf-ip:ipv4": {
"address": [
{
"ip": "172.16.33.10",
"netmask": "255.255.255.128",
"origin": "static",
}
]
},
"if-index": 1,
"link-up-down-trap-enable": "enabled",
"name": "GigabitEthernet1/3.251",
"oper-status": "unknown",
"statistics": {
"discontinuity-time": "1970-01-01T00:00:00+00:00"
},
"type": "iana-if-type:ethernetCsmacd",
},
{
"admin-status": "up",
"description": "vCPEs " "access " "control",
"enabled": True,
"ietf-ip:ipv4": {
"address": [
{
"ip": "172.16.33.10",
"netmask": "255.255.255.128",
"origin": "static",
}
]
},
"if-index": 1,
"link-up-down-trap-enable": "enabled",
"name": "GigabitEthernet1/4",
"oper-status": "unknown",
"statistics": {
"discontinuity-time": "1970-01-01T00:00:00+00:00"
},
"type": "iana-if-type:ethernetCsmacd",
},
]
}
}
'''
</doc>
<macro>
def add_iftype(data):
if "eth" in data.lower():
return data, {"type": "iana-if-type:ethernetCsmacd"}
return data, {"type": None}
</macro>
<doc>
# ----------------------------------------------------------------------------
# Cisco IOS interfaces groups and inputs
# ----------------------------------------------------------------------------
</doc>
<input>
commands = [
"show running-config | section interface",
"show interface"
]
</input>
<group name="ietf-interfaces:interfaces.interface*">
## ----------------------------------------------------------------------------
## ietf-interface section
## ----------------------------------------------------------------------------
interface {{ name | macro(add_iftype) }}
description {{ description | re(".+") }}
shutdown {{ enabled | set(False) | let("admin-status", "down") }}
{{ link-up-down-trap-enable | set(enabled) }}
{{ admin-status | set(up) }}
{{ enabled | set(True) }}
{{ if-index | set(1) }}
{{ statistics | set({"discontinuity-time": "1970-01-01T00:00:00+00:00"}) }}
{{ oper-status | set(unknown) }}
## ----------------------------------------------------------------------------
## ietf-ip section
## ----------------------------------------------------------------------------
<group name="ietf-ip:ipv4">
ip mtu {{ mtu | to_int }}
</group>
<group name="ietf-ip:ipv4.address*">
ip address {{ ip | _start_ }} {{ netmask }}
ip address {{ ip | _start_ }} {{ netmask }} secondary
{{ origin | set(static) }}
</group>
<group name="ietf-ip:ipv6.address*">
ipv6 address {{ ip | _start_ }}/{{ prefix-length | to_int }}
{{ origin | set(static) }}
</group>
</group>
<output condition="validate_with_yangson, True">
validate_yangson="'./yang-modules/ietf/'"
</output>