示例:使用操作脚本显示 DNS 主机名信息
此示例使用 op 脚本 显示网络中某个设备的 域名系统 (DNS) 信息。
要求
此示例使用运行 Junos OS 的设备。
概述和操作脚本
此脚本显示网络中设备的 DNS 信息。该脚本对 show host hostname
命令稍有改进,因为您无需输入主机名或 IP 地址即可查看当前使用设备的 DNS 信息。
命令没有 Junos 可扩展标记语言 (XML) 等效项 show host hostname
。因此,此脚本直接使用 show host hostname
命令,而不是使用 远程过程调用 (RPC)。
该脚本有两个不同的版本,一个版本使用 <xsl:choose>
元素,另一个版本使用 jcs:first-of()
函数。两个版本接受相同的参数并生成相同的输出。每个版本都以 XSLT 和 SLAX 语法显示。
使用 <xsl 的 XSLT 语法:选择>元素
<?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>
使用 jcs 的 XSLT 语法:first-of() 函数
<?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>
使用 <xsl 的 SLAX 语法:选择>元素
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; } }
使用 jcs 的 SLAX 语法:first-of() 函数
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; } }
配置
程序
逐步过程
要下载、启用和测试脚本:
将 XSLT 或 SLAX 脚本复制到文本文件中,根据需要将文件命名为 主机名.xsl 或 hostname.slax ,并将其复制到设备上的 /var/db/script/op/ 目录中。
在配置模式下,在层次结构级别包括语句
[edit system scripts op]
,并根据需要将主机名.xsl 或 hostname.slax 包含在file
内。[edit system scripts op] user@host# set file hostname.(slax | xsl)
commit and-quit
发出命令以提交配置并返回到操作模式。[edit] user@host# commit and-quit
通过发出
op hostname <dns (hostname | address)>
操作模式命令来执行操作脚本。
验证
验证提交脚本执行
目的
验证脚本是否按预期运行。
行动
在未使用选项的情况下dns
发出op hostname
操作模式命令时,将显示本地设备的 DNS 信息:
user@host1> op hostname Name: host1 has address 10.168.71.246
发出 op hostname dns hostname
命令时,将显示指定设备的 DNS 信息:
user@host1> op hostname dns router1 Name: router1 has address 10.168.71.249
发出 op hostname dns address
命令时,将显示指定地址的 DNS 信息:
user@host1> op hostname dns 10.168.71.249 Name: 249.71.168.10.IN-ADDR.ARPA domain name pointer router1