Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

Navigation

Required Boilerplate for Op Scripts

When you write operation (op) scripts, you use Extensible Stylesheet Language Transformations (XSLT) or Stylesheet Language Alternative Syntax (SLAX) tools provided with Junos OS. These tools include basic boilerplate that you must include in all op scripts, optional extension functions that accomplish scripting tasks more easily, and named templates that make scripts easier to read and write, which you import from a file called junos.xsl. For more information about the extension functions and templates, see Junos Script Automation: Understanding Extension Functions in the jcs and slax Namespaces and Junos Script Automation: Named Templates in the jcs Namespace Overview.

Op scripts are based on Junos XML and Junos XML protocol tag elements. Like all XML elements, angle brackets enclose the name of a Junos XML or Junos XML protocol tag element in its opening and closing tags. This is an XML convention, and the brackets are a required part of the complete tag element name. They are not to be confused with the angle brackets used in the documentation to indicate optional parts of Junos OS CLI command strings.

You must include either XSLT or SLAX boilerplate as the starting point for all op scripts that you create. The XSLT boilerplate follows:

XSLT Boilerplate for
Op Scripts

  1    <?xml version="1.0" standalone="yes"?>
  2    <xsl:stylesheet version="1.0"
  3        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4        xmlns:junos="http://xml.juniper.net/junos/*/junos"
  5        xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm"
  6        xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0">
  7        <xsl:import href="../import/junos.xsl"/>
 
  8        <xsl:template match="/">
  9            <op-script-results>
                <!-- ... insert your code here ... -->
10            </op-script-results>
11        </xsl:template>
        <!-- ... insert additional template definitions here ... -->
12    </xsl:stylesheet>

Line 1 is the Extensible Markup Language (XML) processing instruction (PI), which marks this file as XML and specifies the version of XML as 1.0. The XML PI, if present, must be the first non-comment token in the script file.

  1    <?xml version="1.0"?>

Line 2 opens the style sheet and specifies the XSLT version as 1.0.

  2    <xsl:stylesheet version="1.0"

Lines 3 through 6 list all the namespace mappings commonly used in operation scripts. Not all of these prefixes are used in this example, but it is not an error to list namespace mappings that are not referenced. Listing all namespace mappings prevents errors if the mappings are used in later versions of the script.

  3        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4        xmlns:junos="http://xml.juniper.net/junos/*/junos"
  5        xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm"
  6        xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0">

Line 7 is an XSLT import statement. It loads the templates and variables from the file referenced as ../import/junos.xsl, which ships as part of Junos OS (in the file /usr/libdata/cscript/import/junos.xsl). The junos.xsl file contains a set of named templates you can call in your scripts. These named templates are discussed in Junos Script Automation: Named Templates in the jcs Namespace Overview and Junos Named Templates in the jcs Namespace Summary.

  7        <xsl:import href="../import/junos.xsl"/>

Line 8 defines a template that matches the </> element. The <xsl:template match="/"> element is the root element and represents the top level of the XML hierarchy. All XML Path Language (XPath) expressions in the script must start at the top level. This allows the script to access all possible Junos XML and Junos XML protocol remote procedure calls (RPCs). For more information, see XPath Overview.

  8        <xsl:template match="/">

After the <xsl:template match="/"> tag element, the <op-script-results> and </op-script-results> container tags must be the top-level child tags, as shown in Lines 9 and 10.

  9            <op-script-results>
                <!-- ... insert your code here ... -->
10            </op-script-results>

Line 11 closes the template.

11        </xsl:template>

Between Line 11 and Line 12, you can define additional XSLT templates that are called from within the <xsl:template match="/"> template.

Line 12 closes the style sheet and the op script.

12    </xsl:stylesheet>

SLAX Boilerplate for
Op Scripts

The corresponding SLAX boilerplate is as follows:

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 / {
    <op-script-results> {
        /*
            * Insert your code here
        */
    }
}

Published: 2013-07-08

Published: 2013-07-08