Skip to main content

jnprsr is a Parser for Juniper Configuration Files

Project description

jnprsr

jnprsr ('ʤunəpɑrsər) is a Parser for Juniper configuration files.

It is based around a Lexer and Parser built using ANTLR4 (https://www.antlr.org/). The formal grammar used in our project was intially created by the batfish (https://github.com/batfish/batfish) project.

Our tool allows to generate an Abstract Syntax Tree (AST) from a given Juniper configuration file. This AST can then be processed further. Currently, we provide the following functions:

  • Pretty-Printing
  • Configuration Merge
  • Sub-Tree Selection

The AST generated by our implementation uses a data-type provided by the anytree (https://github.com/c0fec0de/anytree) library. You can easily process the AST generated by our implementation and use it in our own tools.

Please note: This product comes with absolutely no warranty. It is neither supported nor endorsed in any way by Juniper Networks Inc. We assume no liability for any undesired or incorrect behavior you might experience with this software. If you break your network using jnprsr, it is your responsibility and you should be ashamed of yourself for not testing your software properly.

Installation

You can install jnprsr using pip:

pip install jnprsr

You can also install directly from Git:

pip install git+https://github.com/markusju/jnprsr.git

TL;DR - What you can do with jnprsr

Pretty-Printing

It allows you to transform a configuration file looking like this

interfaces { et-0/0/0 {description "More Bandwidth!"; unit 0 {family inet{address 192.0.2.1/24;}}}}

into this

interfaces {
    et-0/0/0 {
        description "More Bandwidth!";
        unit 0 {
            family inet {
                address 192.0.2.1/24;
            }
        }
    }
}

Configuration Merge

Suppose you have this snippet

interfaces {
    et-0/0/0 {
        description "Skynet NNI";
    }
}

and this target configuration

interfaces {
    et-0/0/0 {
        unit 0 {
            family inet {
                address 192.0.2.1/24;
            } 
        }
    }
}

using jnprsr you can perform a > load merge operation on the target configuration with the snippet to generate this:

interfaces {
    et-0/0/0 {
        description "Skynet NNI";
        unit 0 {
            family inet {
                address 192.0.2.1/24;
            } 
        }
    }
}

Sub-Tree Selection

Let's say you have this configuration file:

protocols {
    bgp {
        group SKYNET-PEER {
            type external;
            peer-as 1337;
            neighbor 1.2.3.4;
        }
        group EVILCORP-PEER {
            type external;
            peer-as 1338;
            neighbor 1.2.3.5;
        }
        group UMBRELLACORP-PEER {
            type external;
            peer-as 1339;
            neighbor 1.2.3.6;
        }
    }
}

and you want to access the sub-tree of the SKYNET-PEER BGP peer-group.

Using jnprsr you can easily perform the equivalent of > show configuration protocols bgp group SKYNET-PEER:

protocols {
    bgp {
        group SKYNET-PEER {
            type external;
            peer-as 1337;
            neighbor 1.2.3.4;
        }
    }
}

Other Stuff

Since jnprsr creates an anytree object, you can easily work with the parsed configuration data. Some things you could do include, but are not limited to:

  • Validation and/or Verification: Does a certain configuration element or sub-tree exist?
  • Comparison: Comparing two given configurations, what nodes are different?
  • Editing: Create, Remove, Change a given configuration and generate textual output from the changed tree again.

Getting Started

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jnprsr-0.0.7.tar.gz (26.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jnprsr-0.0.7-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file jnprsr-0.0.7.tar.gz.

File metadata

  • Download URL: jnprsr-0.0.7.tar.gz
  • Upload date:
  • Size: 26.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for jnprsr-0.0.7.tar.gz
Algorithm Hash digest
SHA256 226e1e66470f91f316468de47fa46e18de338ef35db415d7ef015055d4601229
MD5 2662e4cfaec5c9b702db13eca091453c
BLAKE2b-256 fea72ee83490da4527451b1993bfb57ddda6a5c175c11e2bd019274a27b4a4b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for jnprsr-0.0.7.tar.gz:

Publisher: publish.yml on markusju/jnprsr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jnprsr-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: jnprsr-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 24.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for jnprsr-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 e5b97fe9c32ac39ae8e7d73b3f1ccde78217625b3dd1c8769b88a5e3e22a454a
MD5 cef1f0b718f3ba35dc0a4b4084ec8fe8
BLAKE2b-256 f3bc7f8117eeb4d0a994c6b7a78e0330b3cb5f1cbc2752ea30750ca0e0db826e

See more details on using hashes here.

Provenance

The following attestation bundles were made for jnprsr-0.0.7-py3-none-any.whl:

Publisher: publish.yml on markusju/jnprsr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page