Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

header-navigation
keyboard_arrow_up
close
keyboard_arrow_left
Automation Scripting User Guide
Table of Contents Expand all
list Table of Contents
file_download PDF
{ "lLangCode": "en", "lName": "English", "lCountryCode": "us", "transcode": "en_US" }
English
keyboard_arrow_right

Example: Change the Configuration Using SLAX and XSLT Op Scripts

date_range 19-Nov-24

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:

  1. 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.

  2. In configuration mode, configure the script’s filename at the [edit system scripts op file] hierarchy level.

    content_copy zoom_out_map
    [edit system scripts op]
    user@host# set file config-change.slax
    
  3. Issue the commit and-quit command to commit the configuration and to return to operational mode.

    content_copy zoom_out_map
    [edit]
    user@host# commit and-quit
    
  4. 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.

  5. Execute the op script.

    content_copy zoom_out_map
    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

content_copy zoom_out_map
version 1.2;

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 the commit-options parameter, the message should be visible in the commit log along with the commit information.

    content_copy zoom_out_map
    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.

    content_copy zoom_out_map
    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.

    content_copy zoom_out_map
    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 is Enabled.

    content_copy zoom_out_map
    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.

    content_copy zoom_out_map
    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
    
footer-navigation