Skip to main content

该库封装了 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

问题

打开一个问题:)

相关项目

  1. 杨模特/杨
  2. cisco-ie/cisco-proto
  3. CiscoDevNet/nx-telemetry-proto
  4. ios-xr/模型驱动遥测
  5. Telegraf Cisco MDT 插件
  6. 管道

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

cisco_mdt-0.0.1.tar.gz (13.4 kB 查看哈希

已上传 source

内置分布

cisco_mdt-0.0.1-py3-none-any.whl (18.3 kB 查看哈希

已上传 py3