验证基于OpenConfig的设备配置。
项目描述
oc_config_validate
这个工具允许网络运营商和管理员使用gNMI测试其基于OpenConfig的设备配置。
用例
作为网络运营商或管理员,我需要确保使用OpenConfig模型和gNMI协议的设备配置按预期工作,即
- 设备对gNMI Get请求进行响应,不同xpath无错误且有效。
- 设备对gNMI Set请求进行响应,不同模型元素无错误。
- 设备对gNMI Set请求进行响应,不同模型元素返回预期且有效的OpenConfig更新模型。
除了测试gNMI连接和事务之外,我还需要测试配置中使用的OpenConfig模型的完整性和正确性,寻找
- OpenConfig模型中发出的响应中的语法或语义错误。
如何使用
安装
-
安装Python3.9或更高版本。
-
最好使用虚拟环境
virtualenv --clear venv source venv/bin/activate
-
从PyPI安装
pip3 install oc-config-validate
-
检查是否一切按预期工作
python3 -m oc_config_validate --version python3 -m oc_config_validate -models
准备
-
为您的设备编写初始OpenConfig配置(s),格式为JSON。
此配置(s)将在任何其他操作之前应用于设备,将其带到已知初始状态。
-
编写您的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
值。请参阅此处了解可用的测试列表。此处有一些示例测试文件。
运行
-
使用以下方法验证您的配置与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_key
和cert_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获取许可证副本
除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。请参阅许可证了解许可证管理下的具体语言、权限和限制。