Skip to content

Project Details

What is scrapli_netconf

scrapli_netconf is a library to help send or receive netconf messages to devices, specifically routers (though could be anything speaking netconf in theory).

Netconf is an IETF network management protocol that uses XML for message encoding, and SSH (or TLS, which is not supported by scrapli_netconf) for transport of messages. scrapli_netconf is simply an extension of the scrapli "screen scraping" library that adds proper message creation, framing, and validation to allow for scrapli to be used as a netconf client.

scrapli_netconf adds new drivers (NetconfScrape and AsyncNetconfScrape), new transports (NetconfTransport and AsyncNetconfTransport), and new channels (NetconfChannel and AsyncNetconfChannel) all of which inherit from , and build on, the core scrapli components. scrapli_netconf also includes an extension of the Response object -- aptly named NetconfResponse that adds netconf-specific data to the existing object.

A great question to ask right now is: "why"! The primary driver is to get ncclient like functionality without needing paramiko for the transport so that we can take full advantage of "normal" OpenSSH options, as well as have fewer dependencies (only absolute required dependency is lxml!). Additionally, as scrapli_netconf is just an extension of scrapli, this means that automation of devices over telnet, SSH, and netconf (over SSH) can be done all with an extremely consistent look and feel. Realistically this should cover most modes of present day network automation other than HTTP based APIs (which would likely have a pretty different look and feel anyway). Finally , but still quite important -- with the asyncssh transport plugin, scrapli_netconf provides asyncio support for netconf operations.

Supported Platforms

At this time scrapli_netconf is a base implementation of netconf 1.0 and netconf 1.1 (note that scrapli is not 100 % RFC compliant in that it currently does not support all methods/options). It should work on anything that runs those versions of netconf, but has only been tested against the following platforms/versions:

  • Cisco IOS-XE (tested on: 16.12.03) with Netconf 1.0 and 1.1
  • Cisco IOS-XR (tested on: 6.5.3) with Netconf 1.1
  • Juniper JunOS (tested on: 17.3R2.10) with Netconf 1.0

In addition to the above devices, there has been testing on various versions of Juniper SRX, QFX, and MX platforms on ~18ish+ code, as well as Cisco NCS devices on 6.6.2+ code, and finally there has been limited testing on Nokia devices.