Software applications and daemons almost always provide some sort of configuration mechanism. This is usually done via flat files which are often located somewhere in the /etc/ directory structure on Unix machines. There have been no successful approaches in the past to improve the current situation in which every application uses a different configuration style. A similar situation can be found with Inter-process communication (IPC) mechanisms which are often used for fetching the operational data and triggering arbitrary remote procedure call (RPC). The Sysrepo project aims to improve the current diverse situation and finally resolve the open questions on configuration and operational data management such as addressing various configuration file formats and glue code. Sysrepo enables developers to write code and focus on the important functionality while Sysrepo takes care of configuration and operational data.
The main components in Sysrepo are the Sysrepo Datastore and the Netopeer 2 NETCONF Server, both described below. Possible ways of application integration are shown on the integration page.
Sysrepo team members participated in the IETF96 Hackathon. Find out more.
Sysrepo is aYANG-based configuration and operational datastore for Unix/Linux applications. Applications can use Sysrepo to store their configuration modeled by the provided YANG model instead of using e.g. flat configuration files. Sysrepo will ensure data consistency of the data stored in the datastore and enforce data constraints defined by the YANG model. With the help of Netopeer 2 NETCONF server, the applications also automatically become remotely manageable via NETCONF.
A high-level overview of Sysrepo is shown in the image below
Netopeer 2 NETCONF Server
Netopeer 2 is the 2nd generation of the well-known open-source NETCONF server that uses Sysrepo as the datastore implementation. Together they provide a complete NETCONF management framework for Linux.
Find out more about Netopeer 2 on the github.
For an existing Lua Linux application see snabb demo.
Other utilities used by the Sysrepo project
The Sysrepo project uses or is used by other projects in the ecosystem. At the moment we are keeping these tools available here with more information available on their respective pages.
The aim of this project is to provide a NETCONF testing suite.
testconf is implemented in Node.js and supports fast prototyping through testing of both NETCONF clients and NETCONF servers. That way developers can easily:
- Test new features
- Find out if there are any regressions
- Experiment with NETCONF in general
testconf can be used to run interoperability tests as well which testifies to Sysrepo's cross-use functionality. Additionally, it can be used to generate template code from YANG models.
Extending testconf with your custom defined tests shortens the time spent on repetitive tasks and helps to pinpoint bugs. This way developers can focus more on implementing new features.
More info on the NETCONF testing suite can be found here.
testconf can automatically run tests for data leafs of existing configuration data on the server. Check out more about autotesting feature here.
The configuration management feature uses an ncurses-like interface for getting existing nodes from the device and editing them to your liking. Find out more about it here.
Similarly to snmp, testconf uses get, set and walk commands. All of these commands use XPATH to manipulate data nodes in NETCONF. Read more about it here.
Sysrepo supports Python 2, Python 3, Lua 5.1, Lua 5.2 and Java.
If you want to find out how to build and use the Python 3 bindings take a look at here.
If you want to find out how to build and use the Lua 5.2 bindings take a look at here.
If you want to find out how to build and use the Java bindings take a look at here.
If you want to find out how to use the Go bindings take a look at here.
Network performance tests via testconf are available here.
It's easy to get in touch with the team. You can reach us via public [email protected] or [email protected] mailing list. For non-public communication feel free to reach us at [email protected] . You can also subscribe to the mailing lists here or reach us on GitHub.