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: Require Internal Clocking on T1 Interfaces

date_range 14-Jul-21

This example shows how to use a commit script to require that T1 interfaces be configured with internal clocking.

Requirements

This example uses a device running Junos OS with T1 interfaces.

Overview and Commit Script

This commit script ensures that T1 interfaces are explicitly configured to use internal clocking. If the clocking statement is not included in the configuration, or if the clocking external statement is included, an error message is generated, and the configuration is not committed.

The example script is shown in both XSLT and SLAX syntax:

XSLT Syntax

content_copy zoom_out_map
<?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:template match="configuration">
        <xsl:for-each select="interfaces/interface[starts-with(name, 't1-')]"> 
            <xsl:variable name="clock-source">
                <xsl:value-of select="clocking"/> 
            </xsl:variable>
            <xsl:if test="not($clock-source = 'internal')">
            <!-- or xsl:if test="$clock-source != 'internal'" -->
                <xnm:error>
                    <xsl:call-template name="jcs:edit-path"/>
                    <xsl:call-template name="jcs:statement"> 
                        <xsl:with-param name="dot" select="clocking"/>
                    </xsl:call-template>
                    <message>
                        This T1 interface should have internal clocking.
                    </message>
                </xnm:error>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

SLAX Syntax

content_copy zoom_out_map
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 {
    for-each (interfaces/interface[starts-with(name, 't1-')]) {
        var $clock-source = {
            expr clocking;
        }
        if (not($clock-source = 'internal')) {
            <xnm:error> {
                call jcs:edit-path();
                call jcs:statement($dot = clocking);
                <message> "This T1 interface should have internal clocking.";
            }
        }
    }
}

Configuration

Procedure

Step-by-Step Procedure

To download, enable, and test the script:

  1. Copy the script into a text file, name the file clocking-error.xsl or clocking-error.slax as appropriate, and copy it to the /var/db/scripts/commit/ directory on the device.

  2. Select the following test configuration stanzas, and press Ctrl+c to copy them to the clipboard.

    If you are using the SLAX version of the script, change the filename at the [edit system scripts commit file] hierarchy level to clocking-error.slax.

    content_copy zoom_out_map
    system {
        scripts {
            commit {
                file clocking-error.xsl;
            }
        }
    }
    interfaces {
        t1-0/0/0 {
            clocking external;
        }
        t1-0/0/1 {
            unit 0;
        }
    }
    
  3. In configuration mode, issue the load merge terminal command to merge the stanzas into your device configuration.

    content_copy zoom_out_map
    [edit]
    user@host# load merge terminal
    [Type ^D at a new line to end input]
    ... Paste the contents of the clipboard here ...
    
    1. At the prompt, paste the contents of the clipboard by using the mouse and the paste icon.

    2. Press Enter.

    3. Press Ctrl+d.

  4. Commit the configuration.

    content_copy zoom_out_map
    user@host# commit
    

Verification

Verifying Commit Script Execution

Purpose

Verify that the script behaves as expected.

Action

Review the output of the commit command. The sample configuration stanzas configure two T1 interfaces t1-0/0/0 and t1-0/0/1. Interface t1-0/0/0 is configured with the clocking external statement, and interface t1-0/0/1 does not include any clocking statement. The script generates an error, and the commit operation fails. The following output appears after issuing a commit command:

content_copy zoom_out_map
[edit]
user@host# commit
[edit interfaces interface t1-0/0/0]
    'clocking external;'
    This T1 interface should have internal clocking.
[edit interfaces interface t1-0/0/1]
    ';'
    This T1 interface should have internal clocking.
error: 2 errors reported by commit scripts
error: commit script failure
footer-navigation