ncclient:NETCONF 客户端的 Python 库
ncclient 是一个 Python 库,它促进了围绕 NETCONF 协议的客户端脚本编制和应用程序开发。ncclient 是 由 Shikar Bhushan 开发。现在由Leonidas Poulopoulos (@leopoul)和Einar Nilsen-Nygaard(@einarnn)维护。
文档: http://ncclient.readthedocs.org
PyPI : https://pypi.python.org/pypi/ncclient
要求:
- Python 2.7 或 Python 3.5+
- setuptools 0.6+
- Paramiko 1.7+
- lxml 3.3.0+
- libxml2
- libxslt
如果您使用的是 Debian/Ubuntu,请安装以下库(通过 aptitude 或 apt-get):
- libxml2-dev
- libxslt1-dev
安装:
[ncclient] $ sudo python setup.py install
或通过 pip:
pip install ncclient
也可以通过本地克隆中的 pip 在本地进行:
pip install -U .
示例:
[ncclient] $ python examples/juniper/*.py
用法
获取设备运行配置
使用交互式Python控制台(ipython)或将以下代码集成到您的代码中:
from ncclient import manager with manager.connect(host=host, port=830, username=user, hostkey_verify=False) as m: c = m.get_config(source='running').data_xml with open("%s.xml" % host, 'w') as f: f.write(c)
从0.4.1版开始,ncclient 集成了 Juniper 和 Cisco 的分支,引入了许多新概念,分别简化了 Juniper 和 Cisco 设备的管理。 最大的变化是在连接参数中引入了设备处理程序。 例如,要调用瞻博网络的函数和参数,必须使用 device_params={'name':'junos'} 重写以上代码:
from ncclient import manager with manager.connect(host=host, port=830, username=user, hostkey_verify=False, device_params={'name':'junos'}) as m: c = m.get_config(source='running').data_xml with open("%s.xml" % host, 'w') as f: f.write(c)
设备处理程序易于实现,并且可以证明是面向未来的。
支持的设备处理程序
实例化与已知类型的 NETCONF 服务器的连接时:
- Juniper:device_params = {'name':'junos'}
- Cisco CSR:device_params = {'name':'csr'}
- Cisco Nexus:device_params = {'name':'nexus'}
- Cisco IOS XR:device_params = {'name':'iosxr'}
- Cisco IOS XE:device_params = {'name':'iosxe'}
- Huawei:device_params = {'name':'huawei'}
- 阿尔卡特朗讯:device_params = {'name':'alu'}
- H3C:device_params = {'name':'h3c'}
- HP Comware:device_params = {'name':'hpcomware'}
- 服务器或其他不在上面的内容:device_params = {'name':'default'}
对于开发人员
本地运行单元测试
要在本地运行与通过 GitHub 的 CI/CD 与 Travis 集成进行的相同测试,可以遵循以下说明:
-
创建一个虚拟环境,在这种情况下,使用
virtualenvwrapper
:mkvirtualenv ncclient-testing
-
安装本地 ncclient 软件包(确保您位于虚拟环境中):
pip install -U .
-
安装测试依赖项:
pip install nose rednose coverage coveralls mock
-
最后,运行测试:
nosetests test --rednose --verbosity=3
发布
从0.6.1开始,versioneer 已集成到 ncclient 代码库中。 通过确保从用于发布的 git 标签自动生成版本号来简化新版本的创建,该 git 标签的格式必须为 v0.1.2。 Versioneer 还允许使用 pip 在本地全新安装开发版本。 例如:
$ pip install -U . Processing /opt/git-repos/versioneer-ncclient [...intermediate ouput elided...] Building wheels for collected packages: ncclient Running setup.py bdist_wheel for ncclient ... done Stored in directory: /Users/einarnn/Library/Caches/pip/wheels/fb/48/a8/5c781ebcfff7f091e18950e125c0ff638a5a2dc006610aa1e5 Successfully built ncclient Installing collected packages: ncclient Found existing installation: ncclient 0.6.1 Uninstalling ncclient-0.6.1: Successfully uninstalled ncclient-0.6.1 Successfully installed ncclient-0.6.0+23.g0d9ccd6.dirty
因此,发布成为一个简单的过程:
- 确保所有测试运行正常(最好在本地和通过 Travis 运行),并且已正确更新 README.md(是的,此文件!)。
- 应用适当的版本标签,例如 git 标签v0.6.1
-
构建包:
python setup.py bdist sdist
-
确保安装了 twine 后,测试 twine upload 上传:
twine upload \ --repository-url https://test.pypi.org/legacy/ \ -u ******* -p ******* \ dist/ncclient-0.6.1.tar.gz
-
将 git 标签推回 origin,
git push --tags
-
进行实际的 twine 上传:
<code>twine upload \ -u ******* -p ******* \ dist/ncclient-0.6.1.tar.gz </code>