Enterprise networking is evolving
and much of it is heading toward automation. One thing I have been coming
across regularly is the utilization of API and scripts to assist in building
networks. One of the vendors, HP, in Comware 7 allows
users to manage their platform utilizing NETCONF protocol.
There is a fair amount of
documentation on HP NETCONF; but here is a basic example of how to read a
hostname and then modify it utilizing Python and NETCONF
NETCONF servers needs to enable
on the HP switch and can be done with the following command:
netconf ssh server enable
port 830 is the default port it
will communicate through.
Once this is enabled (and a user
account), you can read and write to the device
The module used in Python 2.7 is
called ncclient and can be installed via PIP install.
Here is my output from the interactive shell:
from ncclient import manager
Define the XML path of the
information you need to obtain
filterget = '<top xmlns="http://www.hp.com/netconf/data:1.0"><Device><Base><HostName></HostName></Base></Device></top>'
Build the connection to the
device with the data
sodarocks = manager.connect(host='192.168.11.15',port=830,username='admin',password='admin',hostkey_verify=False,allow_agent=False,look_for_keys=False, device_params={'name':'hpcomware'})
>>> sodarocks.get(('subtree', filterget))
The return value will be string
in XML format
<?xml version="1.0" encoding="UTF-8"?><rpc-reply xmlns:config="http://www.hp.com/netconf/config:1.0" xmlns:data="http://www.hp.com/netconf/data:1.0" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:4486954e-2142-4896-a977-b66a294f4fec"><data><top xmlns="http://www.hp.com/netconf/data:1.0"><Device><Base><HostName>sodas5900</HostName></Base></Device></top></data></rpc-reply>
This return value can help you
determine the path you need to modify to correct the XML string, in my case, I
am looking to change the hostname
I will create a new filter with
the modifications I want to the hostname:
filterchange = '<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><top xmlns="http://www.hp.com/netconf/config:1.0"><Device><Base><HostName>notsodas5900</HostName></Base></Device></top></config>'
Then execute the modification
using the new filter and the type of operation performed:
sodarocks.edit_config(target='running', config=filterchange, default_operation='replace')
You should get an rpc ok
>>> sodarocks.edit_config(target='running',
config=filterchange, default_operation='replace')
<?xml version="1.0" encoding="UTF-8"?><rpc-reply xmlns:config="http://www.hp.com/netconf/config:1.0" xmlns:data="http://www.hp.com/netconf/data:1.0" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:03b4f996-d025-4aa7-be5e-782d0a4ffed3"><ok/></rpc-reply>
Some additional resources you can
look at the is the API documentation that comes with each release of Comware from HP support site and the ncclient
reference on github.