/pygnmi

The pure Python implementation of the gNMI client.

Primary LanguagePythonBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

pyGNMI: Python gNMI client

project_ version_ coverage_ tag_ license_

This repository contains pure Python implementation of the gNMI client to interact with the network functions.

Usage

Sample code example:

# Modules
from pygnmi.client import gNMIclient

# Variables
host = ('169.254.255.64', '57400')

# Body
if __name__ == '__main__':
    with gNMIclient(target=host, username='admin', password='admin', insecure=True) as gc:
         result = gc.get(path=['openconfig-interfaces:interfaces', 'openconfig-acl:acl'])

    print(result)

Also integration with Nornir is supported (refer to examples).

Video tutorial

Watch the detailed explanation how to use pyGNMI in our YouTube channel.

All gNMI RPCs supported

  • Capabilities
  • Get
  • Set
  • Subscribe

Supported operation modes

  • insecure gRPC channel (without encryption)
  • secure gRPC channel (with encryption and authentication based on certificate)

Tested Network Operating Systems (NOS)

  • Arista EOS
  • Nokia SR OS
  • Cisco IOS XR
  • Juniper JUNOS

Network Operating Systems (NOS) in test

  • Nokia SRLinux
  • Cisco Nexus

License

By using the pyGNMI tool you agree with the license.

Contributors

Dev Log

Release 0.6.0:

  • Significant improvements in telemetry capabilities of the pygnmi. Now you can use subscribe2 method by simply providing the a corredponding dictionary at input and all modes (STREA, ONCE, POLL) are working correctly.
  • Function telemetryParser is now automatically used inside subscribe2.
  • Telemetry is now implemeted using threading.
  • Added new unit tests with pytest and added code coverage with coverage.py.

Release 0.5.3:

  • Minor improvements and bug fixing.
  • Full coverage of unit tests for all operations (Capabilities, Get, Set(Update, Replace, Delete), Subscribe) and all notations of GNMI Path.

Release 0.5.2:

  • Minor bug fixing.
  • First release with unit tests.

Release 0.5.1:

  • Added example for non-blocking iterator for telemetry.
  • Added the extra support for Juniper TLS certificates.
  • Fixed regexp warnings.
  • Changed the logging functionality.
  • Enabled Unix domain socket.
  • Added close()
  • Many thanks for all contributors to make this release happen.

Release 0.5.0:

  • Added possibility to extract certificate from the destination network function.

Release 0.4.8:

  • Added documentation in module regading supported the different paths naming conventions. Supported options: yang-module:container/container[key=value], /yang-module:container/container[key=value], /yang-module:/container/container[key=value], /container/container[key=value]

Release 0.4.6:

Release 0.4.6:

  • Replaced the sys.exit with raising exceptions.
  • Minor bug fix.
  • Brought the gNMI path to the canonical format: /origin:element1/element2....
  • Added possibility to omit the YANG module name, as some vendors doesn't include that in the request per their gNMI implementation: /element1/element2....

Release 0.4.5:

  • Minor bug fix.

Release 0.4.4:

  • Minor bug fix.

Release 0.4.3:

  • Added possibility to modify the timeout (default value is 5 seconds) for the session using gnmi_timeout key for gNMIclient class.

Release 0.4.2:

  • Modified the path generation to comply with gNMI Path encoding conventions.
  • Fixed the problem debug output, where the requests where not printed in case of response failing.

Release 0.4.1:

  • Minor bug fix.

Release 0.4.0:

  • Added support for Juniper JUNOS
  • Fixed the issue with override for PKI-based certificates

Release 0.3.12:

  • Minor bug fix.

Release 0.3.11:

  • Minor bug fix.

Release 0.3.10:

  • Renamed the debug mode. Add argument debug=True upon object creation to see the Protobuf messages.

Release 0.3.9:

  • Added functionality to list the full the device configuration in case the path is empty: get(path[]).

Release 0.3.8:

  • Merged the proposal how to implement TLS with override for Cisco IOS XR (tested for Cisco IOS XR, to be tested for other vendors yet)
  • Merged examples with TLS

Release 0.3.7:

  • Added the argument encoding as an extra key to Set operation

Release 0.3.6:

  • Added the argument encoding to Get operation

Release 0.3.5:

  • Added the example for Nornir Integration
  • Added the topology diagram
  • Added links to the video tutorial

Release 0.3.4:

  • Added the close method to gNMIClient class for those, who doesn't use with ... as ... context manager.

Release 0.3.3:

  • Added the functionality to pass gRPC messages to the code execution

Release 0.3.2:

  • Minor bugs fixed.

Release 0.3.1:

  • Minor bugs fixed.
  • Added examples of gNMI operations.

Release 0.3.0:

  • Added new function telemetryParser, which converts Protobuf messages in Python dictionary.
  • Fixed the errors with the telemetry parsing.

Release 0.2.7:

  • Modified core so that telemetry is working in once and stream mode.

Release 0.2.6:

  • Added alpha version of the Subscribe operation.

Release 0.2.5:

  • Added typing hints.

Release 0.2.4:

  • Minor bugfixing.

Release 0.2.3:

  • Added support for IPv6 transport (now you can connect to the network function over IPv6).

Release 0.2.2:

  • Added conversion of the collected information over the gNMI into a Python dictionary for Set operation.

Release 0.2.1:

  • Fixing the bugs with improper Protobuf paths generation.
  • Now all Set operations (delete, replace, and update) are working properly.

Releast 0.2.0:

  • Added the Set operation from gNMI specification.

Releast 0.1.9:

  • Added the property datatype='all' to the get() request. The values are per the gNMI specification: all, config, state, operatonal.

Release 0.1.8:

  • Added conversion of the collected information over the gNMI into a Python dictionary for Get operation.

Release 0.1.7:

  • Changing packages modules.

Release 0.1.6:

  • Restructuring internal context.

Release 0.1.5:

  • Minor bugfixing.

Release 0.1.4:

  • Minor bugfixing.

Release 0.1.3:

  • Minor bugfixing.

Release 0.1.2:

  • The gNMIClient is recreated as context manger.
  • Tests with Nokia SR OS done, the module is working nice for insecure channel.

Release 0.1.1:

  • Added the Get operation out of gNMI specification.

Release 0.1.0:

  • The first release.

(c)2020-2021, karneliuk.com