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: Limit the Number of ATM Virtual Circuits

date_range 14-Jul-21

This commit script example limits the number of Asynchronous Transfer Mode (ATM) virtual circuits (VCs) configured on an ATM interface.

Requirements

This example uses a device running Junos OS with an ATM interface.

Overview and Commit Script

For each ATM interface, the set of corresponding VCs is selected. The number of those VCs, as determined by the built-in Extensible Stylesheet Language Transformations (XSLT) count() function, cannot exceed the limit set by the global variable limit. If there are more ATM VCs than limit, a commit error is generated, and the commit operation fails.

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:param name="limit" select="10"/>
    <xsl:template match="configuration">
        <xsl:for-each select="interfaces/interface[starts-with(name, 'at-')]">
            <xsl:variable name="count" select="count(unit)"/>
            <xsl:if test="$count &gt; $limit">
                <xnm:error>
                    <edit-path>[edit interfaces]</edit-path>
                    <statement><xsl:value-of select="name"/></statement>
                    <message>
                        <xsl:text>ATM VC limit exceeded; </xsl:text>
                        <xsl:value-of select="$count"/>
                        <xsl:text> are configured but only </xsl:text>
                        <xsl:value-of select="$limit"/>
                        <xsl:text> are allowed.</xsl:text>
                    </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";
 
param $limit = 10;
match configuration {
    for-each (interfaces/interface[starts-with(name, 'at-')]) {
        var $count = count(unit);
        if ($count > $limit) {
            <xnm:error> {
                <edit-path> "[edit interfaces]";
                <statement> name;
                <message> {
                    expr "ATM VC limit exceeded; ";
                    expr $count;
                    expr " are configured but only ";
                    expr $limit;
                    expr " are allowed.";
                }
            }
        }
    }
}

Configuration

Procedure

Step-by-Step Procedure

To download, enable, and test the script:

  1. Copy the script into a text file, name the file atm-vc-limit.xsl or atm-vc-limit.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 atm-vc-limit.slax.

    content_copy zoom_out_map
    system {
        scripts {
            commit {
                file atm-vc-limit.xsl;
            }
        }
    }
    interfaces {
        at-1/2/3 {
            unit 15 {
                family inet {
                    address 10.12.13.15/20;
                }
            }
            unit 16 {
                family inet {
                    address 10.12.13.16/20;
                }
            }
            unit 17 {
                family inet {
                    address 10.12.13.17/20;
                }
            }
            unit 18 {
                family inet {
                    address 10.12.13.18/20;
                }
            }
            unit 19 {
                family inet {
                    address 10.12.13.19/20;
                }
            }
            unit 20 {
                family inet {
                    address 10.12.13.20/20;
                }
            }
            unit 21 {
                family inet {
                    address 10.12.13.21/20;
                }
            }
            unit 22 {
                family inet {
                    address 10.12.13.22/20;
                }
            }
            unit 23 {
                family inet {
                    address 10.12.13.23/20;
                }
            }
            unit 24 {
                family inet {
                    address 10.12.13.24/20;
                }
            }
            unit 25 {
                family inet {
                    address 10.12.13.25/20;
                }
            }
            unit 26 {
                family inet {
                    address 10.12.13.26/20;
                }
            }
        }
    }
    
  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 the Commit Script Output

Purpose

Verify that the script behaves as expected.

Action

Review the output of the commit command. The sample configuration stanzas configure 12 virtual circuits on the ATM interface atm-1/2/3. Because the commit script only allows 10 ATM VCs to be configured on any ATM interface, 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]
    'at-1/2/3'
    ATM VC limit exceeded; 12 are configured but only 10 are allowed.
error: 1 error reported by commit scripts
error: commit script failure
footer-navigation