这时就可以通过 Pyang 工具,来浏览内容:
root@a8af90280cf1:/src/633# pyang -f tree ietf-interfaces.yang module: ietf-interfaces +--rw interfaces | +--rw interface* [name] | +--rw name string | +--rw description? string | +--rw type identityref | +--rw enabled? boolean | +--rw link-up-down-trap-enable? enumeration {if-mib}? +--ro interfaces-state +--ro interface* [name] +--ro name string +--ro type identityref +--ro admin-status enumeration {if-mib}? +--ro oper-status enumeration +--ro last-change? yang:date-and-time +--ro if-index int32 {if-mib}? +--ro phys-address? yang:phys-address +--ro higher-layer-if* interface-state-ref +--ro lower-layer-if* interface-state-ref +--ro speed? yang:gauge64 +--ro statistics +--ro discontinuity-time yang:date-and-time +--ro in-octets? yang:counter64 +--ro in-unicast-pkts? yang:counter64 +--ro in-broadcast-pkts? yang:counter64 +--ro in-multicast-pkts? yang:counter64 +--ro in-discards? yang:counter32 +--ro in-errors? yang:counter32 +--ro in-unknown-protos? yang:counter32 +--ro out-octets? yang:counter64 +--ro out-unicast-pkts? yang:counter64 +--ro out-broadcast-pkts? yang:counter64 +--ro out-multicast-pkts? yang:counter64 +--ro out-discards? yang:counter32 +--ro out-errors? yang:counter32还可以转换成 js 浏览:
pyang -f jstree ietf-interfaces.yang >> ietf-interfaces.html更多命令可以查看帮助文档。
这时,对于网络工程师来说,可以将其从学习各厂商不同的配置命令转化到学习 Yang Module 中,更加聚焦功能,而不用在花费时间去学习相同的功能不同的命令。
YANG-Suite 介绍YANG-Explorer 是一个用于浏览 YANG Model 的 WEB 服务,并提供生成 NETCONF RPC payload 等实用的功能。但由于其使用 Flash 编写,但在 2020 12 月后,Flash 已经被禁用,导致该工具无法使用。有兴趣的同学,可以安装老版本带 flash 的浏览器测试学习。
安装可以采用 docker:
YANG
docker pull robertcsapo/yang-explorer docker run -it --rm -p 8088:8088 robertcsapo/yang-explorer最新 CISCO 很开源了一个产品为 YANG-Suite,基于 YANG-Explorer 拓展了许多功能,并可以使用 docker-compose 启动,兼容性更好,预计未来会主流接受。
比如下面使用其生成 NETCONF RPC Payload
YANG 与 NETCONFYANG 在早期是专为 NETCONF 而开发的一种语言,后来才被普及到各个语言中,关于 NETCONF 的介绍,可以参考这篇。
下面主要涉及具体的操作,使用的设备是 ASR9000(IOS-XR 6.3.3)版本。
由于 NETCONF 本身采用 C/S 架构,需要在设备端打开:
netconf agent ssh在客户端方面,可以使用 ssh 进行测试:
NETCONF 会首先使用 Hello 建立链接,报告所拥有的能力。
[root@localhost ~]# ssh cisco@ip -p 830 -s netconf Password: <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <capabilities> <capability>urn:ietf:params:netconf:base:1.1</capability> <capability>urn:ietf:params:netconf:capability:candidate:1.0</capability> <capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability> <capability>urn:ietf:params:netconf:capability:validate:1.1</capability> <capability>urn:ietf:params:netconf:capability:confirmed-commit:1.1</capability> <capability>urn:ietf:params:netconf:capability:notification:1.0</capability> <capability>urn:ietf:params:netconf:capability:interleave:1.0</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04&deviations=cisco-xr-ietf-netconf-monitoring-deviations</capability> <capability>?module=cisco-xr-ietf-netconf-monitoring-deviations&revision=2016-02-16</capability> <capability>?module=Cisco-IOS-XR-Ethernet-SPAN-cfg&revision=2015-11-09</capability> <capability>?module=Cisco-IOS-XR-Ethernet-SPAN-datatypes&revision=2015-11-09</capability> <capability>每个 capability 都可包含四部分内容:
Model URI
Module Name ,Revision Date
Protocol Features