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

Generate a Custom Warning, Error, or System Log Message in Commit Scripts

date_range 19-Nov-24

Junos OS commit scripts can generate custom warning, error, or system log messages during a commit operation to alert you when the configuration does not comply with custom configuration rules. Generating an error also causes the commit operation to fail. To generate a custom warning, error, or system log message in a commit script:

  1. Include the appropriate commit script boilerplate from Required Boilerplate for Commit Scripts. It is reproduced here for convenience:

    XSLT Boilerplate
    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">
            <!-- ... insert your code here ... -->
        </xsl:template>
    </xsl:stylesheet>
    SLAX Boilerplate
    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";
    import "../import/junos.xsl";
     
    match configuration {
        /*
         * insert your code here
        */
    }
    Python Boilerplate
    content_copy zoom_out_map
    from junos import Junos_Configuration
    import jcs
    
    if __name__ == '__main__':
        # insert your code here
  2. At the position indicated by the comment “insert your code here,” include one or more XSLT programming instructions or their SLAX or Python equivalents. Commonly used XSLT constructs include the following:

    • <xsl:choose> <xsl:when> <xsl:otherwise>—Conditional construct that causes different instructions to be processed in different circumstances. The <xsl:choose> instruction contains one or more <xsl:when> elements, each of which tests an XPath expression. If the test evaluates as true, the XSLT processor executes the instructions in the <xsl:when> element. The XSLT processor processes only the instructions contained in the first <xsl:when> element whose test attribute evaluates as true. If none of the <xsl:when> elements’ test attributes evaluate as true, the content of the <xsl:otherwise> element, if there is one, is processed.

    • <xsl:for-each select="xpath-expression">—Programming instruction that tells the XSLT processor to gather together a set of nodes and process them one by one. The nodes are selected by the Extensible Markup Language (XML) Path Language (XPath) expression in the select attribute. Each of the nodes is then processed according to the instructions contained in the <xsl:for-each> instruction. Code inside an <xsl:for-each> instruction is evaluated recursively for each node that matches the XPath expression. The context is moved to the node during each pass.

    • <xsl:if test="xpath-expression">—Conditional construct that causes instructions to be processed if the XPath expression in the test attribute evaluates to true.

      For example, the following programming instruction evaluates as true when the host-name statement is not included at the [edit system] hierarchy level:

      content_copy zoom_out_map
      <xsl:if test="not(system/host-name)">

      In SLAX, the if construct looks like this:

      content_copy zoom_out_map
      if (not(system/host-name))

      Similarly in Python:

      content_copy zoom_out_map
       if not(Junos_Configuration.xpath("./system/host-name")):
  3. Include the appropriate constructs to generate a warning, error, or system log message.

    In SLAX and XSLT scripts, include <xnm:warning>, <xnm:error>, or <syslog> elements with a <message> child element that specifies the content of the message. For warning and error messages, you can include several other child elements, such as the jcs:edit-path and jcs:statement templates, which cause the warning or error message to include the relevant configuration hierarchy and statement information, as shown in the following examples.

    In Python scripts, include jcs.emit_warning(), jcs.emit_error(), or jcs.syslog() functions, and include the message string in the argument list.

    For example, when an XSLT commit script generates a warning using the following <xnm:warning> element:

    content_copy zoom_out_map
    <xnm:warning>
        <xsl:call-template name="jcs:edit-path">
            <xsl:with-param name="dot" select="chassis"/>
        </xsl:call-template>
        <message>IP source-route processing is not enabled.</message>
    </xnm:warning>

    it emits the following output during the commit operation:

    content_copy zoom_out_map
    [edit chassis]
        warning: IP source-route processing is not enabled.
    commit complete

    Similarly, when an XSLT commit script generates an error using the following <xnm:error> element:

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

    it emits the following output during the commit operation:

    content_copy zoom_out_map
    [edit interfaces interface t1-0/0/0]
        'interface t1-0/0/0;'
        Missing a description for this T1 interface.
    error: 1 error reported by commit scripts
    error: commit script failure
    Note:

    In SLAX and XSLT scripts, if you are including a warning message in conjunction with a script-generated configuration change, you can generate the warning by including the message parameter with the jcs:emit-change template. The message parameter causes the jcs:emit-change template to call the <xnm:warning> template, which sends a warning notification to the CLI. (For more information, see Overview of Generating Persistent or Transient Configuration Changes Using Commit Scripts.)

    For system log messages, the only supported child element is <message>:

    content_copy zoom_out_map
    <syslog>
        <message>syslog-string</message>
    </syslog>

    For a description of all the XSLT tags and attributes you can include, see SLAX and XSLT Commit Script Tag Elements to Use When Generating Messages.

    For SLAX versions of these constructs, see Example: Generate a Custom Warning Message, Example: Generate a Custom Error Message, and Example: Generate a Custom System Log Message.

  4. Save the script with a meaningful name.

  5. Copy the script to either the /var/db/scripts/commit directory on the hard disk or the /config/scripts/commit directory on the flash drive.

    For information about setting the storage location for commit scripts, see Store and Enable Junos Automation Scripts and Store Scripts in Flash Memory.

  6. Enable the script by including the file filename statement at the [edit system scripts commit] hierarchy level.

    content_copy zoom_out_map
    [edit system scripts commit]
    user@host# set file filename
    
  7. If the script is written in Python, enable the execution of unsigned Python scripts.

    content_copy zoom_out_map
    [edit]
    user@host# set system scripts language (python | python3)
    
  8. Commit the configuration.

    content_copy zoom_out_map
    [edit]
    user@host# commit and-quit
    
    Note:

    If the device has dual Routing Engines, and you want the script to take effect on both of them, you can issue the commit synchronize scripts command to synchronize the configuration and copy the scripts to the other Routing Engine as part of the commit operation.

footer-navigation