Supported Platforms
Example: Displaying DNS Hostname Information Using an Op Script
This example uses an op script to display Domain Name System (DNS) information for a device in your network.
Requirements
This example uses a device running Junos OS.
Overview and Op Script
This script displays DNS information for a device in your network. The script offers a slight improvement over the show host hostname command because you do not need to enter a hostname or IP address to view DNS information for the device you are currently using.
There is no Junos Extensible Markup Language (XML) equivalent for the show host hostname command. Therefore, this script uses the show host hostname command directly rather than using a remote procedure call (RPC).
The script is provided in two distinct versions, one using the <xsl:choose> element and the other using the jcs:first-of() function. Both versions accept the same argument and produce the same output. Each version is shown in both XSLT and SLAX syntax.
XSLT Syntax Using the <xsl:choose> Element
<?xml version="1.0" standalone="yes"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:junos="http://xml.juniper.net/junos/*/junos"
xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm"
xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0">
<xsl:import href="../import/junos.xsl"/>
<xsl:variable name="arguments">
<argument>
<name>dns</name>
<description>Name or IP address of a host</description>
</argument>
</xsl:variable>
<xsl:param name="dns"/>
<xsl:template match="/">
<op-script-results>
<xsl:variable name="query">
<xsl:choose>
<xsl:when test="$dns">
<command>
<xsl:value-of select="concat('show host ', $dns)"/>
</command>
</xsl:when>
<xsl:when test="$hostname">
<command>
<xsl:value-of select="concat('show host ', $hostname)"/>
</command>
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:variable name="result" select="jcs:invoke($query)"/>
<xsl:variable name="host" select="$result"/>
<output>
<xsl:value-of select="concat('Name: ', $host)"/>
</output>
</op-script-results>
</xsl:template>
</xsl:stylesheet>
XSLT Syntax Using the jcs:first-of() Function
<?xml version="1.0" standalone="yes"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:junos="http://xml.juniper.net/junos/*/junos"
xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm"
xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0">
<xsl:import href="../import/junos.xsl"/>
<xsl:variable name="arguments">
<argument>
<name>dns</name>
<description>Name or IP address of a host</description>
</argument>
</xsl:variable>
<xsl:param name="dns"/>
<xsl:template match="/">
<op-script-results>
<xsl:variable name="target" select="jcs:first-of($dns, $hostname)"/>
<xsl:variable name="query">
<command>
<xsl:value-of select="concat('show host ', $target)"/>
</command>
</xsl:variable>
<xsl:variable name="result" select="jcs:invoke($query)"/>
<xsl:variable name="host" select="$result"/>
<output>
<xsl:value-of select="concat('Name: ', $host)"/>
</output>
</op-script-results>
</xsl:template>
</xsl:stylesheet>
SLAX Syntax Using the <xsl:choose> Element
version 1.0;
ns junos = "http://xml.juniper.net/junos/*/junos";
ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
import "../import/junos.xsl";
var $arguments = {
<argument> {
<name> "dns";
<description> "Name or IP address of a host";
}
}
param $dns;
match / {
<op-script-results> {
var $query = {
if ($dns) {
<command> 'show host ' _ $dns;
} else if ($hostname) {
<command> 'show host ' _ $hostname;
}
}
var $result = jcs:invoke($query);
var $host = $result;
<output> 'Name: ' _ $host;
}
}
SLAX Syntax Using the jcs:first-of() Function
version 1.0;
ns junos = "http://xml.juniper.net/junos/*/junos";
ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";
import "../import/junos.xsl";
var $arguments = {
<argument> {
<name> "dns";
<description> "Name or IP address of a host";
}
}
param $dns;
match / {
<op-script-results> {
var $target = jcs:first-of($dns, $hostname);
var $query = {
<command> 'show host ' _ $target;
}
var $result = jcs:invoke($query);
var $host = $result;
<output> 'Name: ' _ $host;
}
}
Configuration
Step-by-Step Procedure
To download, enable, and test the script:
- Copy the XSLT or SLAX script into a text file, name the
file
hostname.xsl
orhostname.slax
as appropriate, and copy it to the/var/db/scripts/op/
directory on the device. In configuration mode, include the file statement at the [edit system scripts op] hierarchy level and
hostname.xsl
orhostname.slax
as appropriate.[edit system scripts op]user@host# set file hostname.(slax | xsl)Issue the commit and-quit command to commit the configuration and to return to operational mode.
[edit]user@host# commit and-quit- Execute the op script by issuing the op hostname <dns (hostname | address)> operational mode command.
Verification
Verifying the Commit Script Execution
Purpose
Verify that the script behaves as expected.
Action
When you issue the op hostname operational mode command without the dns option, DNS information is displayed for the local device:
user@host1> op hostname
Name: host1 has address 10.168.71.246
When you issue the op hostname dns hostname command, DNS information is displayed for the specified device:
user@host1> op hostname dns router1
Name: router1 has address 10.168.71.249
When you issue the op hostname dns address command, DNS information is displayed for the specified address:
user@host1> op hostname dns 10.168.71.249
Name: 249.71.168.10.IN-ADDR.ARPA domain name pointer router1