lamoni / netconf
无厂商依赖的PHP NETCONF实现
v1.0.1
2017-10-20 21:19 UTC
Requires
- php: >= 5.4.16
- phpseclib/phpseclib: 1.0.*
This package is not auto-updated.
Last update: 2024-09-20 03:13:05 UTC
README
这是一个无厂商依赖的PHP实现NETCONF。我开发这个是为了能在此基础上扩展Junos(Juniper)特定的NETCONF API,并决定公开分享。
目标RFC
- RFC6241 - 网络配置协议(NETCONF) - https://tools.ietf.org/html/rfc6241
- RFC6242 - 在SSH上使用NETCONF协议 - https://tools.ietf.org/html/rfc6242
依赖关系
- PHP >= 5.4
- phpseclib (https://github.com/phpseclib/phpseclib)
待办事项
- 需要正确清理sendRaw的属性(https://tools.ietf.org/html/rfc6241)
- 需要实现具有子树过滤属性命名的元素("6.4.8. 具有属性命名的元素")
- 根据IANA列表解析功能:http://www.iana.org/assignments/netconf-capability-urns/netconf-capability-urns.xhtml
示例
使用密码身份验证初始化NETCONF,然后发送自定义RPC调用
$netConf = new NetConf( "192.168.0.100", new NetConfAuthPassword( [ "username" => "lamoni", "password" => "phpsux" ] ) ); echo $netConf->sendRPC( "<get-config>". "<source>". "<running/>". "</source>". "</get-config>" );
编辑Junos设备的配置并提交更改
$netConf->editConfig( "<configuration> <interfaces> <interface> <name>fe-0/0/0</name> <description>Testing netconf</description> </interface> </interfaces> </configuration>", 'candidate', ['custom-param' => 'custom-value'] ); if ($netConf->commit()->isRPCReplyOK()) { echo "Successfully committed, dude!"; } else { echo "Something's wrong, man."; }
使用NETCONF的子树过滤器获取特定配置
$getUsersNames = $netConf->getConfig( [ "configuration/system/login/user" => [ [ "name"=>"user" ] ] ] );
注意事项
- 命名空间?
- 更频繁地使用异常?
- test-option: 元素仅在设备声明了:validate:1.1功能时才可指定(第8.6节)。
- 我应该隐式锁定/解锁editConfig() ()和commit() ()调用中的配置吗?
- 我应该删除方法中大量参数的长列表,并用单个数组替换它们吗?
- 优点
- 看起来更美观
- 允许未来进行扩展而无需进行大量重构
- 缺点
- 方法将需要一些extract()类型的代码在顶部,以及通过(抽象类)验证传递的键
- IDE的参数建议可能不起作用(?)
- 优点
- 过滤器中的XPath功能?