该库封装了 MDT 功能,以简化与 Cisco 实施的使用。
项目描述
cisco-mdt-python
该库提供了一个基本的模型驱动遥测 (MDT) 服务器实现以简化开发,以及一个可能对调试有用的示例 CLI。
用法
pip install cisco-mdt
python -c "import cisco_mdt; print(cisco_mdt)"
cisco-mdt --help
这个库目前只实现了 MDT gRPC 服务器。
cisco-mdt CLI
提供的 CLI callable ascisco-mdt可用于简单地与支持 MDT 的 Cisco 设备交互,也可作为如何使用此cisco_mdt库的参考。CLI 用法记录在CLI 用法中本自述文件的底部。
MDTgRPC服务器
提供了 Cisco MDT 服务器/接收器的简单实现,它允许库用户在每个消息的基础上指定回调函数。这允许实现的灵活性。此类也可以是子类,并且可以MdtDialout重写该方法以完全自定义控制传入的请求和上下文。
例子
MDTgRPCServer像任何 gRPC 服务实现一样使用,但带有回调的概念。
"""Effectively ripped from cli.py"""
from concurrent import futures
import grpc
from google.protobuf import json_format, text_format
from cisco_mdt import proto, MDTgRPCServer
def callback(request):
telemetry_pb = proto.telemetry_bis_pb2.Telemetry()
telemetry_pb.ParseFromString(request.data)
logging.debug(text_format.MessageToString(request))
logging.info(text_format.MessageToString(telemetry_pb))
mdt_grpc_server = MDTgRPCServer()
mdt_grpc_server.add_mdt_callback(callback)
grpc_server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
proto.mdt_dialout_pb2_grpc.add_gRPCMdtDialoutServicer_to_server(
mdt_grpc_server, grpc_server
)
grpc_server.add_insecure_port("[::]:50051")
grpc_server.start()
try:
grpc_server.wait_for_termination()
except KeyboardInterrupt:
logging.warning("Stopping on interrupt.")
grpc_server.stop(None)
except Exception:
logging.exception("Stopping due to exception!")
模型驱动遥测
模型驱动遥测 (MDT) 是跨 IOS XE、IOS XR 和 NX-OS 的一项功能,可用于导出各种操作数据源,通常比其他类似协议(如 SNMP)效率更高。MDT 具有因操作系统而异的选项(例如传输、编码等),但至少所有平台都提供“拨出”、“推送”操作模型、具有自描述协议缓冲区的 gRPC 客户端实现,这可能连接到正在实施的 gRPC 服务器并导出所需的数据。通常,此数据通过 YANG 模块描述,所需数据由 YANG XPaths 指定。
发展
需要 Python 并pipenv用于环境管理。不包括手动使用pip/ 。virtualenv用于black代码格式化和pylint代码检查。black没有显式安装,因为它需要 Python 3.6+。
获取源
git clone https://github.com/cisco-ie/cisco-mdt-python.git
cd cisco-mdt-python
# If pipenv not installed, install!
pip install --user pipenv
# Now use Makefile...
make setup
# Or pipenv manually if make not present
pipenv --three install --dev
# Enter virtual environment
pipenv shell
# Work work
exit
代码卫生
我们black用于代码格式化和pylint代码检查。hygiene.sh将针对除已编译的 protobufsblack下的所有代码运行,并针对直接在. 他们并不完全同意,所以我们不在这里寻求完美。由于需要 Python 3.6+,因此不会自动安装。将检查常规路径可用性和 via ,否则直接落入. 如果需要使用,请在使用 Python 3.6+ 或单独的方法(例如.src/cisco_mdt/protocpylintgnmi/blackhygiene.shpipenvpylintblackpipenvbrew install black
# If using Python 3.6+
pipenv install --dev black
# Otherwise...
./hygiene.sh
重新编译 Protobuf
如果发布了新的协议缓冲区定义 ( proto/),请使用update_protos.sh重新编译。如果引入了重大更改,则必须更新库。
./update_protos.sh
命令行使用
下面详细介绍了当前的cisco-mdt使用选项。
cisco-mdt --help
usage:
cisco-mdt <protocol> [<args>]
Version 0.0.1
Supported Protocols:
grpc
cisco-mdt grpc
See <protocol> --help for RPC options.
MDT CLI demonstrating cisco_mdt library usage.
positional arguments:
protocol MDT protocol to utilize.
optional arguments:
-h, --help show this help message and exit
gRPC
该协议将通过 gRPC 传输处理 MDT,并将遥测数据以 JSON 或文本协议缓冲区格式转储到stdout.
cisco-gnmi grpc -netloc 0.0.0.0:50051 -debug
用法
cisco-mdt grpc --help
usage: cisco-mdt [-h] [-dump_json] [-netloc NETLOC] [-debug]
Start gRPC protocol server.
optional arguments:
-h, --help show this help message and exit
-dump_json Dump as JSON instead of textual protos.
-netloc NETLOC <host>:<port>
-debug Print debug messages.
输出
[cisco-mdt-python] cisco-mdt grpc -debug
DEBUG:root:Starting gRPC server on [::]:50051.
DEBUG:root:ReqId: 10
data: "\n\003ios\032\006testme29openconfig-interfaces:interfaces/..."
INFO:root:node_id_str: "ios"
subscription_id_str: "testme"
encoding_path: "openconfig-interfaces:interfaces/interface/state/counters"
collection_id: 914301
...
许可
cisco-mdt-python被许可为Apache 许可证,版本 2.0。
问题
打开一个问题:)
相关项目
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。