generate_config_ripe.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import ipaddr
  4. import yaml
  5. import sys
  6. import os
  7. import glob
  8. from jinja2 import Environment, FileSystemLoader
  9. from termcolor import colored
  10. def parse_peers(peer_file):
  11. """parse_peers: Just a simple function for peers parsing
  12. :peer_file: The YAML peer file to parse
  13. :returns: Just a return code if the file is correctly parsed or not
  14. """
  15. peering_flat = open(peer_file).read()
  16. ixp = os.path.splitext(os.path.basename(peer_file))[0]
  17. try:
  18. peerings = yaml.safe_load(peering_flat)
  19. except:
  20. print colored('ERROR', 'red') + ": the peers.yaml file could not be parsed.. please check \
  21. your syntax"
  22. sys.exit(2)
  23. print "remarks:\nremarks: ======== %s ========\nremarks:" % ixp.upper()
  24. for asn in peerings:
  25. for keyword in ['export', 'import', 'description']:
  26. if keyword not in peerings[asn]:
  27. print colored('ERROR', 'red') + ": missing %s statement in stanza %s" % (keyword, asn)
  28. sys.exit(2)
  29. acceptable_exports = ['AS-GITOYEN', 'NOT ANY', 'ANY']
  30. if not peerings[asn]['export'] in acceptable_exports:
  31. print colored('ERROR', 'red') + ": export must be one of the following: %s" \
  32. % " ".join(acceptable_exports)
  33. sys.exit(2)
  34. env = Environment(loader=FileSystemLoader('./'))
  35. tpl = env.get_template('templates/ripe.j2')
  36. print tpl.render(neighbor_as = asn, description =
  37. peerings[asn]['description'], export_as = peerings[asn]['export'],
  38. import_as = peerings[asn]['import']).encode('utf-8').strip()
  39. sys.stdout.write(open('templates/AS20766.pre', 'r').read())
  40. for peer_files in glob.glob('peers/*.yml'):
  41. parse_peers(peer_files)
  42. sys.stdout.write(open('templates/AS20766.post', 'r').read())