[Contents] [Prev] [Next] [Index] [Report an Error]

Example: Generating a Custom Error Message

Using a commit script, write a custom error message that appears when the description statement is not included at the [edit interfaces t1-fpc/pic/port] hierarchy level:

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:variable name="interface" select="interfaces/interface"/>
        <xsl:for-each select="$interface[starts-with(name, 't1-')]">
            <xsl:variable name="ifname" select="."/>
            <xsl:if test="not(description)">
                <xnm:error>
                    <xsl:call-template name="jcs:edit-path"/>
                    <xsl:call-template name="jcs:statement"/>
                    <message>Missing a description for this T1 interface.</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 {
    var $interface = interfaces/interface;

    for-each ($interface[starts-with(name, 't1-')]) {
        var $ifname = .;

        if (not(description)) {
            <xnm:error> {
                call jcs:edit-path();
                call jcs:statement();
                <message> "Missing a description for this T1 interface.";
            }
        }
    }
}

Verifying the Commit Script Error Output

To test the output of an error message, make sure that the candidate configuration contains the condition that elicits the error. For this example, ensure that a T1 interface is configured but without the description statement.

To test the example in this chapter, perform the following steps:

  1. Copy the XSLT script shown just previously into a text file, and name the file description.xsl.
  2. Depending on whether you save your commit script files to the flash drive or the hard drive, copy the description.xsl file to the config/scripts/commit or the /var/db/scripts/commit directory on your routing platform.
  3. Include the file description.xsl statement at the [edit system scripts commit] hierarchy level:
    user@host> edit
    [edit]

    user@host# set system scripts commit file description.xsl
  4. If there is no T1 interface configured without the description statement, issue the following configuration mode commands:
    [edit]

    user@host# edit interfaces t1-0/0/1
    [edit interfaces t1-0/0/1]

    user@host# delete description
  5. Issue the commit command. The following output appears:
    [edit]

    user@host# commit
    [edit interfaces interface t1-0/0/1]
        'description'
            Missing a description for this T1 interface.
    [edit interfaces interface t1-0/0/2]
        'description'
            Missing a description for this T1 interface.
    error: 2 errors reported by commit scripts
    error: commit script failure

To display the XML output of an error message, issue the commit check | display xml command:

[edit interfaces t1-0/0/1]

user@host# commit check | display xml
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/7.4R1/junos">
    <commit-results>
        <routing-engine junos:style="normal">
            <name>re0</name>
            <xnm:error>
                <edit-path>
                    [edit interfaces interface t1-0/0/1]
                </edit-path>
                <statement>
                    description
                </statement>
                <message>
                    Missing a description for this T1 interface.
                </message>
            </xnm:error>
            <xnm:error>
                <edit-path>
                    [edit interfaces interface t1-0/0/2]
                </edit-path>
                <statement>
                    description
                </statement>
                <message>
                    Missing a description for this T1 interface.
                </message>
            </xnm:error>
            <xnm:error xmlns="http://xml.juniper.net/xnm/1.1/xnm"
                             xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm">
                <message>
                    2 errors reported by commit scripts
                </message>
            </xnm:error>
            <xnm:error xmlns="http://xml.juniper.net/xnm/1.1/xnm"
xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm">
                <message>
                    commit script failure
                </message>
            </xnm:error>
        </routing-engine>
    </commit-results>
    <cli>
        <banner>[edit interfaces]</banner>
    </cli>
</rpc-reply>

To display a detailed trace of commit script processing, issue the commit check | display detail command:

[edit interfaces t1-0/0/1]

user@host# commit check | display detail
2005-06-14 15:56:09 PDT: reading commit script configuration
2005-06-14 15:56:09 PDT: testing commit script configuration
2005-06-14 15:56:09 PDT: opening commit script '/var/db/scripts/commit/error.xsl'
2005-06-14 15:56:09 PDT: reading commit script 'error.xsl'
2005-06-14 15:56:09 PDT: running commit script 'error.xsl'
2005-06-14 15:56:09 PDT: processing commit script 'error.xsl'
[edit interfaces interface t1-0/0/1]
    'description'
        Missing a description for this T1 interface.
[edit interfaces interface t1-0/0/2]
    'description'
        Missing a description for this T1 interface.
2005-06-14 15:56:09 PDT: 2 errors from script 'error.xsl'
error: 2 errors reported by commit scripts
error: commit script failure

[Contents] [Prev] [Next] [Index] [Report an Error]