Example: Requiring Internal Clocking on T1 Interfaces

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

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 emitted and the configuration is not committed.

XSLT Syntax

<?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

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.";
            }
        }
    }
}

Testing the ex-clocking-error Script

To test the ex-clocking-error script, perform the following steps:

  1. Copy the XSLT or SLAX script from Example: Requiring Internal Clocking on T1 Interfaces into a text file, name the file ex-clocking-error.xsl or ex-clocking-error.slax as appropriate, and copy it to the /var/db/scripts/commit directory on the device.
  2. Select the following 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 ex-clocking-error.slax.

    system {scripts {commit {file ex-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:

    [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 using the mouse and the paste icon.
    2. Press Enter.
    3. Press Ctrl+d.
  4. Issue the commit command. The following output appears:

    [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