This repository contains pure Python implementation of the gNMI client to interact with the network functions.
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).
Watch the detailed explanation how to use pyGNMI in our YouTube channel.
- Capabilities
- Get
- Set
- Subscribe
- insecure gRPC channel (without encryption)
- secure gRPC channel (with encryption and authentication based on certificate)
- Arista EOS
- Nokia SR OS
- Cisco IOS XR
- Juniper JUNOS
- Nokia SRLinux
- Cisco Nexus
By using the pyGNMI tool you agree with the license.
- Anton Karneliuk
- Stefan Lieberth
- Prem Anand Haridoss
- Andrew Southard
- Jeroen van Bemme
- Frédéric Perrin
- Malanovo
Release 0.6.9:
- Adding new documentation for mutual TLS feature.
Release 0.6.8:
- Minor bug-fixing.
Release 0.6.7:
- Added new
show_diff
key togNMIclient
object (supported valuesprint
andget
). When applied, it shows the changes happened to all keys following XPath from all arguments toSet()
RPC at the network devices. It is so fair tailored to OpenConfig YANG modules as it uses some architectural principles of OpenConfig YANG module to re-construct XPath. - Added an optional timeout to
connect()
method. - Minor bug-fixing.
Release 0.6.6:
- Minor bug-fixing.
Release 0.6.5:
- Implemented
prefix
andtimestamp
inSetResponse
message. - Implemented
alias
andatomic
inNotification
message. - Minor bug-fixing.
Release 0.6.4:
- Minor bug-fixing.
Release 0.6.3:
- Implemented
prefix
key in theUpdate
message. - Added possibility to provide password in STDIN rather than key.
- Minor bug-fixing.
Release 0.6.2:
- Added support of keepalive timer for gRPC session to prevent automatic closure each 2 hours.
- Fixed issue with
Subscribe
RPC not sending delete notification in case of a path is removed from the node. - Added the CLI based tool.
- Minor bug-fixing.
Release 0.6.1:
- Added support of origin per RFC7951.
- Added timeout to the initial setup useful for long-living connections.
- Minor bug-fixing.
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 insidesubscribe2
. - Telemetry is now implemeted using
threading
. - Added new unit tests with
pytest
and added code coverage withcoverage.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:
- Fixed gNMI Path issue.
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 forgNMIclient
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 toSet
operation
Release 0.3.6:
- Added the argument
encoding
toGet
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 togNMIClient
class for those, who doesn't usewith ... 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
andstream
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
, andupdate
) 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-2022, karneliuk.com