NETCONF Java Toolkit Classes
SUMMARY NETCONF Java Toolkit classes supported in Releases 1.0.1 and earlier.
NETCONF Java Toolkit Class: Device
A net.juniper.netconf.Device
object
represents an SSHv2 connection and a default NETCONF session between
the configuration management server and the device on which the NETCONF
server resides.
When creating a Device
object, you
must provide the IP address or hostname and the authentication details
to create the SSHv2 connection. Authentication can be user-password
based or RSA/DSA key-based. You also have the option of specifying
the port number for the SSHv2 connection and the client capabilities
to send to the NETCONF server.
The constructor syntax is:
Device (String hostname, String login, String password, String pemKeyFile) Device (String hostname, String login, String password, String pemKeyFile, int port) Device (String hostname, String login, String password, String pemKeyFile, ArrayList capabilities) Device (String hostname, String login, String password, String pemKeyFile, int port, ArrayList capabilities)
The constructor parameters are:
hostname
—(Required) IP address or hostname of the device on which the NETCONF server is running and to which to connect via SSHv2.login
—(Required) Username for the login account on the device on which the NETCONF server is running.password
—(Required) Password for either user password-based authentication or key-based authentication. If no password is required for key-based authentication, pass this argument as null.pemKeyFile
—(Required) Path of the file containing the DSA/RSA private key in PEM format for key-based authentication. For user password-based authentication, pass this argument as null.port
—(Optional) Port number on which to establish the SSHv2 connection. The default port is 830. If you are connecting to a device that is configured for NETCONF over SSH on a port other than the default port, you must specify that port number in the arguments.capabilities
—(Optional) Client capabilities to be communicated to the NETCONF server, if the capabilities are other than the default capabilities.The default capabilities sent to the NETCONF server are:
urn:ietf:params:xml:ns:netconf:base:1.0 urn:ietf:params:xml:ns:netconf:base:1.0#candidate urn:ietf:params:xml:ns:netconf:base:1.0#confirmed-commit urn:ietf:params:xml:ns:netconf:base:1.0#validate urn:ietf:params:xml:ns:netconf:base:1.0#url?protocol=http,ftp,file
The general syntax for creating a Device
object is:
Device device_name = new Device (String hostname, String login, String password, String pemKeyFile, <int port>, <ArrayList capabilities>)
By default, a NetconfSession
object
is created when you create a new instance of Device
and connect to a NETCONF server. Once you have created a Device
object, you can perform NETCONF operations.
Examples
The following example creates a Device
object with an authenticated SSHv2 connection to IP address 10.10.1.1.
The connection uses user password-based authentication with the login
name “admin” and the password “PaSsWoRd”.
When the connect()
method is called, it
connects to the device and automatically establishes a default NETCONF
session.
Device my_device = new Device("10.10.1.1", "admin", "PaSsWoRd", null); my_device.connect();
To create a Device
object
with a NETCONF-over-SSH connection on port 49000 instead of the default
port 830, add the port number to the constructor arguments.
Device my_device = new Device("10.10.1.1", "admin", "PaSsWoRd", null, 49000);
The default timeout value for connecting to the device is 5000
milliseconds. To set the timeout value to a different interval, call
the setTimeOut()
method on the device object.
NETCONF Java Toolkit Class: NetconfSession
A net.juniper.netconf.NetconfSession
object represents the NETCONF session between the configuration
management server and the device on which the NETCONF server resides.
By default, a NETCONF session is created when you create a new
instance of Device
and connect to a NETCONF
server, so you do not need to explicitly create a NetconfSession
object. You can perform the NETCONF operations directly from the Device
object by calling the associated methods.
However, there might be times when you need multiple
NETCONF sessions on the same SSHv2 connection. To create multiple
sessions, call the createNetconfSession()
method on the Device
object as shown
in the following example:
Device device = new Device("10.10.1.1", "admin", "PaSsWoRd", null); device.connect(); NetconfSession second_session = device.createNetconfSession();
Once you create an additional NETCONF session, you call the
NETCONF operation methods for the new NetconfSession
object in the same way as you call them for the Device
object.
The Device
and NetconfSession
classes contain many identical methods, which perform NETCONF operations
such as executing remote procedure calls (RPCs) and performing configuration
changes. When you call a method on the Device
object, it acts on the default NETCONF session. When you call a
method on any additional NetconfSession
object, it acts on that NETCONF session.
Example: Creating Multiple NETCONF Sessions
In the following example, the code snippet creates a
new Device
object. When the connect()
method is called, the program connects to
the remote device and establishes a default NETCONF session. The program
creates a second NetconfSession
object, second_session
. Calling device.getSessionID()
returns the session ID of the default NETCONF session, and calling second_session.getSessionID()
returns the session ID
of the second NETCONF session.
// Create a device object and a default NETCONF session Device device = new Device("10.10.1.34", "admin", "PaSsWoRd", null); device.connect(); // Create an additional NETCONF session NetconfSession second_session = device.createNetconfSession(); // There are two independent NETCONF sessions String default_session_id = device.getSessionID(); String second_session_id = second_session.getSessionID();
NETCONF Java Toolkit Class: XML
A net.juniper.netconf.XML
object
represents XML-encoded data and provides methods to modify and parse
the XML. The XML object internally maintains an org.w3c.dom.Document
object, corresponding to the XML data it represents.
It is recommended that you work with the XML object to create new configurations, remote procedure calls (RPCs), or any XML-based data. Using an XML object, you can easily add, delete, or modify elements and attributes. To facilitate modification of XML content, the XML object maintains an ‘active’ element, which represents the hierarchy level exposed for modification.
To create an XML object, you first create an XMLBuilder
object and construct the initial XML hierarchy. The XMLBuilder
methods return an XML object on which you
can then build. This makes it convenient to create XML-based configurations
and RPCs and also parse the XML-based replies received from the NETCONF
server.
Example: Creating a Configuration Hierarchy
This example creates the following sample XML configuration hierarchy. The steps used to create the configuration hierarchy are outlined in Table 1.
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <source-address>any</source-address> <destination-address>any</destinationaddress> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> </match> <then> <permit> </permit> </then> </policy> </policy> </policies> </security> </configuration>
Java Code |
Resulting Hierarchy |
---|---|
// Create an XMLBuilder object and a 3-level hierarchy XMLBuilder builder = new XMLBuilder();XML policy = builder.createNewConfig("security","policies","policy"); |
<configuration> <security> <policies> <policy> </policy> </policies> </security> </configuration> |
// Append nodes at the 'policy' level policy.append("from-zone-name","trust"); policy.append("to-zone-name","untrust"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> </policy> </policies> </security> </configuration> |
// Create a new hierarchy level for the first policy XML policyOne = policy.append("policy");policyOne.append("name","my-sec-policy"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> </policy> </policy> </policies> </security> </configuration> |
// Create the ’match’ hierarchy XML match = policyOne.append("match"); // Create and append an applications array // to make three nodes with the same node name String[] applications = {"junos-ftp","junos-ntp","junos-ssh"}; match.append("application", applications); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> </match> </policy> </policy> </policies> </security> </configuration> |
// Add elements under 'match' match.append("source-address","any");match.append("destination-address","any"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> <source-address>any</source-address> <destination-address> any </destination-address> </match> </policy> </policy> </policies> </security> </configuration> |
// Add the 'then' hierarchy with a child 'permit' element policyOne.append("then").append("permit"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> <source-address>any</source-address> <destination-address> any </destination-address> </match> <then> <permit/> </then> </policy> </policy> </policies> </security> </configuration> |
// Complete code and final configuration XMLBuilder builder = new XMLBuilder(); XML policy = builder.createNewConfig("security","policies","policy"); policy.append("from-zone-name","trust"); policy.append("to-zone-name","untrust"); XML policyOne = policy.append("policy"); policyOne.append("name","my-sec-policy"); XML match = policyOne.append("match"); String[] applications = {"junos-ftp","junos-ntp","junos-ssh"}; match.append("application", applications); match.append("source-address","any"); match.append("destination-address","any"); policyOne.append("then").append("permit"); |
<configuration> <security> <policies> <policy> <from-zone-name>trust</from-zone-name> <to-zone-name>untrust</to-zone-name> <policy> <name>my-sec-policy</name> <match> <application>junos-ftp</application> <application>junos-ntp</application> <application>junos-ssh</application> <source-address>any</source-address> <destination-address>any </destination-address> </match> <then> <permit/> </then> </policy> </policy> </policies> </security> </configuration> |
NETCONF Java Toolkit Class: XMLBuilder
In a NETCONF session, communication between the configuration
management server and the NETCONF server is through XML-encoded data.
The configuration management server sends remote procedure calls (RPCs)
to the NETCONF server, and the NETCONF server processes the RPC and
returns an RPC reply. The net.juniper.netconf.XMLBuilder
and net.juniper.netconf.XML
objects help
create and parse XML-encoded data.
You use the XMLBuilder object to create a new XML object. The constructor syntax is:
XMLBuilder ()
The XMLBuilder class includes methods to create a configuration hierarchy, an RPC, or an XML object as XML-encoded data. Each method is overloaded to accept multiple hierarchy levels. The methods return an XML object. For example, the methods to construct a configuration, RPC, or XML object with a single-tier hierarchy are:
createNewConfig(String elementLevelOne)
createNewRPC(String elementLevelOne)
createNewXML(String elementLevelOne)
The following sample code creates a new XMLBuilder
object, builder
. The XMLBuilder
object calls the createNewConfig()
method to construct a three-tier
configuration hierarchy consisting of a “security” element,
a “policies” element child tag, and a “policy”
element that is a child of “policies”.
XMLBuilder builder = new XMLBuilder(); XML policy = builder.createNewConfig("security","policies","policy");
The resulting XML hierarchy is as follows.
<configuration> <security> <policies> <policy> </policy> </policies> </security> </configuration>
Notice that the createNewConfig()
method always encloses the hierarchy within a top-level root element <configuration>
. Similarly, the createNewRPC()
method encloses the hierarchy within an <rpc>
tag element.
Once you generate an XML object, you can call methods from the XML
class to manipulate that object.