Quick Python code with Jinja2 and config templates

Networking is awesome but some tasks may be quite boring and repetitive. For  new campus network installations a lot of time is used just to put a basic initial configuration template on switches.

Each vendor has its proprietary method to distribute configs automagically but sometimes the effort to setup the system is simply too much.

A common practice is to prepare a template in a test environment then copy it changing the IP address, hostname and a few other parameters. That’s a manual and error prone procedure.

I took the chance to write a quick Python script to automate the process and generate the config files reading the data from a csv file and a template.

How it works?

The script reads a csv and a template files and uses Jinja2 to create all the single config files.

How to use it?

1) create a template using the Jinja2 sintax like this:

hostname {{hostname}}
inte vlan 1
ip address {{ip}} netmask {{netmask}}
username {{username}} password {{password}}

Notice the values between “{{ }}” will be replaced with the values read from the csv file

2) create a csv file with the values:

# lines starting with # are comments
#hostname,ip,netmask,username,password
sw1,10.0.0.1,255.255.255.0,admin,sup3rs3cr3t
sw2,10.0.0.2,255.255.255.0,admin,sup3rs3cr3t
sw3,10.0.0.3,255.255.255.0,admin,sup3rs3cr3t
sw4,10.0.0.4,255.255.255.0,admin,sup3rs3cr3t
sw5,10.0.0.5,255.255.255.0,admin,sup3rs3cr3t

3) Run the script. The parameters are: csv file, template file, directory where the config will be stored:

 python cfgmaker_jinja2.py list.csv template.txt CGFS

The output

The output of the scritp are 5 files in the CFGS folder with all the values:

hostname sw1
inte vlan 1
ip address 10.0.0.1 netmask 255.255.255.0
username admin password sup3rs3cr3t

hostname sw2
inte vlan 1
ip address 10.0.0.2 netmask 255.255.255.0
username admin password sup3rs3cr3t

hostname sw3
inte vlan 1
ip address 10.0.0.3 netmask 255.255.255.0
username admin password sup3rs3cr3t

hostname sw4
inte vlan 1
ip address 10.0.0.4 netmask 255.255.255.0
username admin password sup3rs3cr3t

hostname sw5
inte vlan 1
ip address 10.0.0.5 netmask 255.255.255.0
username admin password sup3rs3cr3t

Where’s the code?

You can find the source code and the example files in BitBucket.

 
comments powered by Disqus
Creative Commons License This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License