Git Product home page Git Product logo

sysrepo's Introduction

Build Status Coverity Scan Build Status codecov.io GitHub license

Sysrepo

Sysrepo is an YANG-based configuration and operational state data store for Unix/Linux applications.

Applications can use sysrepo to store their configuration modeled by 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 YANG model. Applications can currently use C language API of sysrepo Client Library to access the configuration in the datastore, but the support for other programming languages is planed for later too (since sysrepo uses Google Protocol Buffers as the interface between the datastore and client library, writing of a native client library for any programing language that supports GPB is possible).

Sysrepo can be easily integrated with management agents such as NETCONF or RESTCONF servers, using the same client library API that applications use to access their configuration. As of now, sysrepo is integrated with the Netopeer 2 NETCONF server. This means that applications that use sysrepo to store their configuration can automatically benefit from the ability to being controlled via NETCONF.

Sysrepo Architecture

Features

  • ability to store / retrieve YANG-modeled data elements adressed by XPath
  • startup, running and candidate datastore support
  • data consistency and constraints enforecment according to YANG models
  • no single point of failure design (does not require any daemon to be running)
  • full transaction and concurrency support
  • notifications of subscribed applications about the changes made in the datastore
  • commit verifiers (change verification by subscribed applications)
  • operational data support (publishing of application's state data to sysrepo)
  • plugins infrastructure for loosely-coupled integration with sysrepo
  • YANG 1.1 support
  • custom RPC, Event Notifications, YANG 1.1 Actions support
  • Python 2 & 3, Lua 5.1 & 5.2, Java bindigs
  • notification store & notification replay
  • NACM (NETCONF Access Control Model) - disabled by default
  • (TODO) confirmed commit support
  • (TODO) native client libraries / plugins for other programming languages (Python, Java, ...)

Status

  • September 2017: sysrepo version 0.7.1 released with many bugfixes and optimizations
  • August 2017: sysrepo version 0.7.0 released with several important improvements and changes: full NACM support, (X)Paths for subscriptions unified, candidate datastore changes, sr_commit functionality change and many bugfixes and enhancements
  • May 2017: sysrepo version 0.6.0 realeased with many bugfixes and improvements including event notification replay.
  • November 2016: sysrepo version 0.5.0 realeased with many bugfixes and some minor improvements.
  • October 2016: sysrepo version 0.4.0 realeased with lots of new features such as: operational data support, commit verifiers, YANG 1.1 support, subtree-based data retrieval or RPC / event notifications support.
  • July 2016: new features added into the devel branch: experimental operational data support and event notifications support
  • June 2016: new subscription API & changeset retrieval functionality ready, sysrepocfg tool, released as sysrepo version 0.3.0
  • May 2016: RPC support and sysrepo plugins infrastructure ready, working on new subscription API & changeset retrieval functionality
  • April 2016: full concurrency and locking support ready, generated Python bindings, integrated with Netopeer 2 NETCONF server, released as sysrepo version 0.2.0
  • March 2016: syrepo daemon and data manipulation (edit-config) functionality ready, working on full concurrency and locking support
  • February 2016: working on sysrepo daemon, data manipulation (edit-config) functionality
  • January 2016: data retrieval (get-config) functionality ready, released as sysrepo version 0.1.0
  • December 2015: implementation started - building internal infrastructure, data retrieval (get-config) functionality

Performance

According to our measurements using the performance unit-test and concurrency unit-test, sysrepo is able to handle more than 100 000 of requests per second (100 requests per millisecond) by concurrent access and about a half of it by sequential access on a conventional laptop hardware. According to the API performance testing, an application is able to retrieve more that 1 000 000 data nodes per second from sysrepo, and set / update up to 50 000 data nodes per second in sysrepo.

Build & Installation Steps

See INSTALL.md file, which contains detailed build and installation steps.

Usage Examples

See examples directory, which contains an example per each data-acess API function.

Also see our fork of dnsmasq that uses sysrepo to store its configuration for short demonstration of how sysrepo can be integrated into an existing application (see the diff).

Documentation

Client Library API, as well as all internal modules of sysrepo are documented with Doxygen comments. To read the documentation, you can navigate to the nigthly build of documentation on sysrepo.org, or build your own copy of the documentation.

Contact

For bug reports, please open an issue on GitHub. For general questions and feedback, please post to our mailing lists. You are also welcome to subscribe to our mailing lists if you have interest in sysrepo:

Other Resources

sysrepo's People

Contributors

rastislavs avatar lukasmacko avatar michalvasko avatar rkrejci avatar jktjkt avatar mislavn avatar frimpler avatar fabioantonini avatar aweast avatar fanchanghu avatar alangefe avatar pfeige avatar fxdupont avatar winterzheng avatar samuel-gauthier avatar pavolvican avatar 9606 avatar trinitycoder avatar rjarry avatar qmm161 avatar qin-nz avatar ustcpxy avatar lperkov avatar mandar12 avatar charach avatar ykoehler avatar bhart3 avatar morganzhh avatar

Watchers

Kevin Barrett avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.