跳转到主要内容

验证基于OpenConfig的设备配置。

项目描述

oc_config_validate

这个工具允许网络运营商和管理员使用gNMI测试其基于OpenConfig的设备配置。

用例

作为网络运营商或管理员,我需要确保使用OpenConfig模型和gNMI协议的设备配置按预期工作,即

  • 设备对gNMI Get请求进行响应,不同xpath无错误且有效。
  • 设备对gNMI Set请求进行响应,不同模型元素无错误。
  • 设备对gNMI Set请求进行响应,不同模型元素返回预期且有效的OpenConfig更新模型。

除了测试gNMI连接和事务之外,我还需要测试配置中使用的OpenConfig模型的完整性和正确性,寻找

  • OpenConfig模型中发出的响应中的语法或语义错误。

如何使用

安装

  1. 安装Python3.9或更高版本。

  2. 最好使用虚拟环境

    virtualenv --clear venv
    source venv/bin/activate
    
  3. 从PyPI安装

    pip3 install oc-config-validate
    
  4. 检查是否一切按预期工作

    python3 -m oc_config_validate --version
    python3 -m oc_config_validate -models
    

准备

  1. 为您的设备编写初始OpenConfig配置(s),格式为JSON。

    此配置(s)将在任何其他操作之前应用于设备,将其带到已知初始状态。

  2. 编写您的OpenConfig配置测试,格式为YAML。

    请参阅此处以创建您的OpenConfig测试。

    YAML文件组织如下

    !TestContext
    
    # Informative text about this test run.
    description: [:string]
    
    # Optional list of text labels, passed to the Results. Can be used for tagging and filtering.
    labels:
    - [:string]
    
    # Target to connect to. Overridden by command arguments.
    target:
      !Target
      [:object]
    
    # Optional list of initial configurations and xpaths to apply before the tests.
    init_configs:
    - !InitConfig
      [:object]
    
    # List of Tests to run.
    tests:
    - !TestCase
      # Short description of what is being tested.
      name: [:string]
      # A valid class in the oc_config_validate.testcases module
      class_name: [:string]
      # Optional list of arguments required by the class.
      args:
        [:string]: [:any]
    
    

    gNMI目标定义可以在YAML测试文件或通过命令参数提供。命令行选项会覆盖测试文件中的值。

    所有初始配置都按顺序应用,在运行任何测试之前。请参考之前准备的JSON文件。

    测试按顺序执行,为带有JSON有效负载的xpath发送gNMI Set和Get消息。

    测试可以验证数据与OpenConfig模型的符合性,以及比较值。选定的class_name定义了测试行为,以及所需的args值。请参阅此处了解可用的测试列表。

    此处有一些示例测试文件

运行

  1. 使用以下方法验证您的配置与gNMI目标

        python3 -m oc_config_validate -tests TESTS_FILE -results RESULTS_FILE \
           [--target HOSTNAME:PORT] \
           [--username USERNAME] [--password PASSWORD] \
           [--tls_host_override TLS_HOSTNAME | --no_tls] \
           [--target_cert_as_root_ca | --root_ca_cert FILE ] \
           [--cert_chain FILE --private_key FILE]
           [-init INIT_CONFIG_FILE -xpath INIT_CONFIG_XPATH] \
           [--verbose] [--log_gnmi] [--stop_on_error]
    

    例如

        python3 -m oc_config_validate --target localhost:9339 \
           --username gnmi --password gnmi \
           --tls_host_override target.com \
           -tests tests/example.yaml -results results/example.json \
           -init init_configs/example.json -xpath "/system/" \
           --log_gnmi
    

选项

gNMI TLS连接选项

默认情况下,oc_config_validate将使用TLS进行gNMI连接,并将验证目标在其证书中提供的主机名。

可选地,可以信任目标提供的自签名证书。

  • 使用tls_host_override选项提供目标证书中存在的主机名值,如果与目标主机名不同。
  • 使用target_cert_as_root_ca选项从目标获取TLS证书并将其用作客户端根CA。这实质上信任来自目标的自签名证书。
  • 使用root_ca_cert选项提供要使用的根CA证书文件。
  • 使用private_keycert_chain选项提供客户端将向目标提供的TLS密钥和证书文件。

如果出现错误,使用--debug标志来帮助理解潜在的TLS问题(如果有的话)。

谨慎使用no_tls选项,以便在gNMI连接中不使用TLS。

警告:所有通信都将以明文形式进行。

OpenConfig模型

oc_config_validate包括大多数OpenConfig模型的Python绑定,在包oc_config_validate.models中。

运行python3 -m oc_config_validate -models以获取使用的OC模型版本(修订)列表。

gNMI Set和Get中的时间

目标可能需要一些时间来处理通过gNMI Set消息完成的配置。默认情况下,oc_config_validate在成功的gNMI Set消息后等待10秒。此时间可以通过目标配置中的gnmi_set_cooldown_secs选项或命令行参数自定义。

同样,目标可能需要一些时间才能在gNMI Get消息中显示预期的值。某些测试用例具有重试机制,将重复gNMI Get消息和比较(与OC模型、与预期的JSON文本或两者)直到成功或超时。

请参阅此处了解更多详情。

版权

版权所有 2022

根据Apache许可证第2版(“许可证”);除非遵守许可证规定,否则不得使用此文件。您可以在https://apache.ac.cn/licenses/LICENSE-2.0获取许可证副本

除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。请参阅许可证了解许可证管理下的具体语言、权限和限制。

项目详情


下载文件

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

源分布

oc_config_validate-2.7.0.tar.gz (4.6 MB 查看哈希值)

上传时间

构建分布

oc_config_validate-2.7.0-py3-none-any.whl (4.8 MB 查看哈希值)

上传时间 Python 3