Skip to main content

Generate IRR Route Objects at scale quickly and without error

Project description

IRR Generator

Generate IRR Route Objects at scale quickly and without error

Build Latest Version Python Versions

Lightweight Python script designed to automate the generation of IRR Objects. Essential for the toolkit of any Network Engineers maintaining route objects.

How

By passing a list of Supernets & Origin ASNs, IRR Generator will auto expand the Supernet and append its Subnets for route object generation.

Installation

Use the package manager pip to install IRR Generator.

pip install irr-generator

Usage

CLI

IRR Generator can be run directly on the CLI via irrgenerator. In doing so, a full or relative path to a file containing the prefix data must be passed using the --file option (this will default to subnets.txt locally otherwise). The response will be directly printed to terminal for easy copy and paste.

When running IRR Generator via the CLI, NOTIFY_EMAIL, MAINT_OBJECT & IRR_SOURCE can directly be overriden at the top of generate_irr.py. Alternatively, arguments can be passed via the CLI.

optional arguments:
  -h, --help            show this help message and exit
  -f FILE_NAME, --file_name FILE_NAME
                        Full or Relative path to file
  -e NOTIFY_EMAIL, --notify_email NOTIFY_EMAIL
                        Notify email address set in route object
  -m MAINT_OBJECT, --maint_object MAINT_OBJECT
                        Maintainer set in route object
  -s IRR_SOURCE, --irr_source IRR_SOURCE
                        IRR Source set in route object

Example

(test-env) ╭─jamesditrapani@maximus ~/development/irr-generator
╰─$ irrgenerator -f subnets.txt -e "myemail@example.com" -m "MAINT-04" -s "NTT"
route: 1.1.1.0/24
descr: IANA-ASSIGNED
origin: AS444
notify: myemail@example.com
mnt-by: MAINT-04
changed: myemail@example.com 20210111
source: NTT

Python API

IRR Generator can act as a Python API if needed. When instantiating IRRGenerator(), some form of data must be passed. This can be via a relative/full file path expected in file_name or via a dictionary of prefix/asn combos expected in prefixes. On init of the IRRGenerator() class it is also important that you pass variables to define MAINT_OBJECT, NOTIFY_EMAIL & IRR_SOURCE that are used when returning formatted data.

Examples

File Example
from irrgenerator.irrgenerator import IRRGenerator

irr = IRRGenerator(file_name='subnets.txt')
irr.NOTIFY_EMAIL = 'example1@example.com'
irr.MAINT_OBJECT = 'MY-MAINT-01'
irr.IRR_SOURCE = 'RADB'

response = irr.create()

print(response)
{'1.1.1.0/24': {1: {'route': '1.1.1.0/24', 'descr': 'OVERTHEWIRE-AS-AP', 'origin': 'AS9268', 'notify': 'noc@example.com', 'mnt-by': 'MAINT-EXAMPLE-01', 'changed': 'noc@example.com 20210111', 'source': 'EXAMPLE-NTT'}}}

Dict Example

from irrgenerator.irrgenerator import IRRGenerator

myprefixes = {
  '1.1.1.0/24': 'AS111',
  '2.2.2.0/23': 'AS123'
}

irr = IRRGenerator(prefixes=myprefixes)
irr.NOTIFY_EMAIL = 'test@example.com'
irr.MAINT_OBJECT = 'MY-MAINT-02'
irr.IRR_SOURCE = 'NTT'

response = irr.create()
print(response)
{'1.1.1.0/24': {1: {'route': '1.1.1.0/24', 'descr': 'BOSTONU-AS', 'origin': 'AS111', 'notify': 'noc@example.com', 'mnt-by': 'MAINT-EXAMPLE-01', 'changed': 'noc@example.com 20210111', 'source': 'EXAMPLE-NTT'}}, '2.2.2.0/23': {1: {'route': '2.2.2.0/23', 'descr': 'LOGAIRCOMNET-AS', 'origin': 'AS123', 'notify': 'noc@example.com', 'mnt-by': 'MAINT-EXAMPLE-01', 'changed': 'noc@example.com 20210111', 'source': 'EXAMPLE-NTT'}, 2: {'route': '2.2.2.0/24', 'descr': 'LOGAIRCOMNET-AS', 'origin': 'AS123', 'notify': 'noc@example.com', 'mnt-by': 'MAINT-EXAMPLE-01', 'changed': 'noc@example.com 20210111', 'source': 'EXAMPLE-NTT'}, 3: {'route': '2.2.3.0/24', 'descr': 'LOGAIRCOMNET-AS', 'origin': 'AS123', 'notify': 'noc@example.com', 'mnt-by': 'MAINT-EXAMPLE-01', 'changed': 'noc@example.com 20210111', 'source': 'EXAMPLE-NTT'}}}

Response Schema

{
  'prefix/cidr': {
    int: {
      'route': str,
      'descr': str,
      'origin': str,
      'notify': str,
      'mnt-by': str,
      'changed': str,
      'source': str
    }
  }
}

Release History

  • 0.0.4
    • Beta

Meta

James Di Trapani – @jamesditrapani – james[at]ditrapani.com.au

https://github.com/jamesditrapani/

License

GPL 3.0

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

irr_generator-0.0.4-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

Details for the file irr_generator-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: irr_generator-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 21.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.2 requests-toolbelt/0.9.1 tqdm/4.55.2 CPython/3.7.3

File hashes

Hashes for irr_generator-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 2319e9c14c5970ba19382d41a1bcd4f9d9d0cf1299a7f16092968d417e653b45
MD5 6ede5845fd98eda012b7b2ac88dfbba7
BLAKE2b-256 47eeb7d560a48204438ebcf472670fbc40ed1a0d3375b44709cfd6101d0315b3

See more details on using hashes here.

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