ON THIS PAGE
Example: Change the Configuration Using SLAX and XSLT Op Scripts
This example explains how to make structured changes to the Junos OS configuration using a SLAX op script.
Device Configuration
Step-by-Step Procedure
To download, enable, and test the script:
Copy the script into a text file, name the file config-change.slax, and copy it to the /var/db/scripts/op/ directory on the device.
In configuration mode, configure the script’s filename at the
[edit system scripts op file]
hierarchy level.[edit system scripts op] user@host# set file config-change.slax
Issue the
commit and-quit
command to commit the configuration and to return to operational mode.[edit] user@host# commit and-quit
Before running the script, issue the
show interfaces interface-name
operational mode command and record the current state of the interface that will be disabled by the script.Execute the op script.
user@host> op config-change This script disables the interface specified by the user. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. Enter interface to disable: so-0/0/0
Requirements
This example uses a device running Junos OS.
Overview and Op Script
SLAX and XSLT op scripts can use the jcs:load-configuration
template, which is located in the junos.xsl import file, to make structured changes to the Junos OS configuration.
This example creates a SLAX op script that uses the jcs:load-configuration
template to disable an interface on a device running Junos OS. All
of the values required for the jcs:load-configuration
template are defined as variables, which are then passed into the
template.
In this example, the usage
variable
is initialized with a general description of the function of the script.
When you run the script, it calls the jcs:output()
function to output the usage description to the CLI. This enables
you to verify that you are using the script for the correct purpose.
The script calls the jcs:get-input()
function, which prompts for the name of the interface to disable,
and stores the interface name in the interface
variable. The config-changes
variable
stores the Junos XML configuration data to load on the device and
references the interface
variable. The jcs:load-configuration
template call sets the value
of the configuration
parameter to the data
stored in the config-changes
variable.
The load-action
variable is set to merge
, which merges the new configuration data with
the candidate configuration. This is the equivalent of the CLI configuration
mode command load merge
.
The options
variable defines the
options for the commit operation. It uses the :=
operator to create a node-set, which is passed to the template as
the value of the commit-options
parameter.
This example includes the log
tag to add
the description of the commit to the commit log for future reference.
The call to the jcs:open()
function
opens a connection with the Junos OS management process (mgd) on the
local device and returns a connection handle that is stored in the conn
variable. The script then calls the jcs:load-configuration
template.
The :=
operator copies the results
of the jcs:load-configuration
template
call to a temporary variable and runs the node-set
function on that variable. The resulting node-set is then stored
in the results
variable. The :=
operator ensures that the results
variable is a node-set rather than a result tree fragment so that
the script can access the contents.
The jcs:close()
function closes the
connection to the device. By default, the jcs:load-configuration
template does not output messages to the CLI. This example searches
for and prints xmn:warning
and xnm:error
messages in the response to quickly identify
any issues with the commit.
SLAX Syntax
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"; ns ext = "http://xmlsoft.org/XSLT/namespace"; import "../import/junos.xsl"; match / { <op-script-results> { var $usage = "This script disables the specified interface." _ "The script modifies the candidate configuration to disable " _ "the interface and commits the configuration to activate it."; var $temp = jcs:output($usage); var $interface = jcs:get-input("Enter interface to disable: "); var $config-changes = { <configuration> { <interfaces> { <interface> { <name> $interface; <disable>; } } } } var $load-action = "merge"; var $options := { <commit-options> { <log> "disabling interface " _ $interface; } } var $conn = jcs:open(); var $results := { call jcs:load-configuration( $action=$load-action, $commit-options=$options, $configuration=$config-changes, $connection=$conn); } var $close-results = jcs:close($conn); if ($results//xnm:error) { for-each ($results//xnm:error) { <output> message; } } if ($results//xnm:warning) { for-each ($results//xnm:warning) { <output> message; } } } }
Verification
Verifying the Commit
Purpose
Verify that the commit succeeded.
Action
You should include code in your script that parses the
node-set returned by the jcs:load-configuration
template for any errors or warnings. This allows you to more easily
determine whether the commit succeeded. If there are no warning or
error messages, you can verify the success of the commit in several
ways.
Check the commit log to verify that the commit was successful. If you included the
log
option in thecommit-options
parameter, the message should be visible in the commit log along with the commit information.user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via junoscript disabling interface so-0/0/0
Check the syslog message file to verify that the commit operation was logged. In this case, you also see an
SNMP_TRAP_LINK_DOWN
message for the disabled interface so-0/0/0. Depending on your configuration settings for traceoptions, this message might or might not appear in your log file.user@host> show log messages | last Sep 22 17:08:13 host file[7319]: UI_COMMIT: User 'user' requested 'commit' operation (comment: disabling interface so-0/0/0) Sep 22 17:08:16 host mib2d[1434]: SNMP_TRAP_LINK_DOWN: ifIndex 526, ifAdminStatus down(2), ifOperStatus down(2), ifName so-0/0/0
Verifying the Configuration Changes
Purpose
Verify that the correct changes are integrated into the configuration.
Action
Display the configuration and verify that the changes are visible for the specified interface.
user@host> show configuration interfaces so-0/0/0 disable;
For this example, you also can issue the
show interfaces interface-name
operational mode command to check that the interface was disabled. In this case, the output captured before the interface was disabled shows that the interface isEnabled
.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Enabled, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:27 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None
The output captured after running the script to disable the interface shows that the interface is now
Administratively down
.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Administratively down, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Down Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:40 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None