示例:在提交脚本中检索预继承候选配置
此示例说明如何构造提交脚本来检索正常或专用配置会话的预继承候选配置。
要求
运行 Junos OS 12.2 或更高版本的路由、交换或安全设备。
概述
在 Junos OS 中,提交 候选配置 时,每个活动提交脚本都会对其进行检查。提交脚本的正常输入是继承后候选配置,其中所有配置组值都已由其目标继承,并且配置的非活动部分已被移除。
有时,提交脚本需要访问继承前候选配置,而不是默认情况下接收的继承后配置。由于正常配置会话使用常规候选数据库,而专用配置会话使用专用专用候选数据库,因此候选数据库位置取决于会话类型。
在提交脚本中,使用该属性调用<get-configuration>
database="candidate"
远程过程调用 (RPC) 将检索正常的预继承候选配置。<get-configuration>
RPC 还有一个database-path
属性,用于为普通或专用配置会话指定预继承配置数据库的位置。此属性是该database
属性的替代属性,指示要加载的数据库文件。提交脚本可以使用该属性调用 <get-configuration>
RPC,以检索特定于该database-path
会话的预继承候选配置。
全局变量 $junos-context
包含存储 commit-context/database-path
会话的预继承候选配置位置的元素。在正常配置会话中,该 <database-path>
元素包含普通候选数据库的位置:
<junos-context> <commit-context> <database-path>/var/run/db/juniper.db</database-path> </commit-context> </junos-context>
在专用配置会话中,该 <database-path>
元素包含特定于会话的专用候选数据库的位置。例如:
<junos-context> <commit-context> <commit-private/> <database-path>/var/run/db/private/juniper-1396.db</database-path> </commit-context> </junos-context>
若要构造可检索特定于该会话的预继承候选配置的提交脚本,请在提交脚本中包含 RPC,<get-configuration>
并将属性$junos-context/commit-context/database-path
设置为 <database-path>
。对于正常配置会话,提交脚本检索正常的预继承候选配置,对于专用配置会话,提交脚本检索专用的预继承候选配置。
如果提交脚本在标记中<get-configuration>
同时包含 和 database-path
属性database
,database
则该属性优先。
配置
配置提交脚本
分步过程
要构造一个提交脚本来检索特定于该会话的预继承候选配置,请执行以下操作:
在文本编辑器中,将提交脚本样板添加到文件中。
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"; match configuration { }
创建一个变量,用于存储
<get-configuration>
属性设置为$junos-context/commit-context/database-path
的 RPC。database-path
var $rpc = <get-configuration database-path=$junos-context/commit-context/database-path>;
添加一个调用 RPC 并将生成的配置存储在变量中的语句
<get-configuration>
。var $config = jcs:invoke( $rpc );
-
使用常规 XPath 构造在预继承候选配置中引用所需的层次结构级别和语句,例如:
var $hostname = $config/system/host-name;
包括在提交过程中强制实施自定义配置规则所需的任何语句。
将脚本复制到设备上的 / var/run/scripts/commit 目录。
在配置模式下,配置
file
语句以启用提交脚本。[edit system scripts commit] user@R1# set file script-name.slax
commit
发出命令以提交配置。[edit] user@R1# commit
提交脚本在提交操作期间执行。
结果
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"; match configuration { var $rpc = <get-configuration database-path=$junos-context/commit-context/database-path>; var $config = jcs:invoke( $rpc ); ... <!-- commit script rules --> }