generate_peers.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import requests
  2. import yaml
  3. GITOYEN_ASN = 0
  4. PEER_ASN_LIST = []
  5. gitoyen_peering_factory = []
  6. ses = requests.session()
  7. peer = dict()
  8. # Load config
  9. try:
  10. config = yaml.load(open('config/settings.yml'))
  11. GITOYEN_ASN = config['ASN']
  12. PEER_ASN_LIST = config['PEERS']
  13. except:
  14. print("Failed to load config exiting..")
  15. exit(1)
  16. # List Gitoyen Factory with IPv6 avaidable
  17. factory_request = ses.get("https://peeringdb.com//api/netixlan?asn=" + str(GITOYEN_ASN))
  18. for factory in factory_request.json()['data']:
  19. if factory['ipaddr6'] is not None:
  20. gitoyen_peering_factory.append(factory)
  21. for factory in gitoyen_peering_factory:
  22. name = (str(factory['name'])).split(' ')[0].lower()
  23. print("Generation en cours pour " + name)
  24. peer[name] = dict()
  25. for asn in PEER_ASN_LIST:
  26. info_request = ses.get(
  27. "https://peeringdb.com/api/netixlan?asn=" + str(asn) + "&ix_id=" + str(factory['ix_id']))
  28. result = info_request.json()['data']
  29. if len(result) > 0:
  30. name_request = ses.get('https://peeringdb.com/api/net?asn=' + str(asn)).json()
  31. peer[name][asn] = dict()
  32. peer[name][asn]['description'] = name_request['data'][0]['name']
  33. if name_request['data'][0]['irr_as_set'] is not None and len(name_request['data'][0]['irr_as_set']) > 0:
  34. peer[name][asn]['import'] = name_request['data'][0]['irr_as_set']
  35. else:
  36. peer[name][asn]['import'] = "AS" + str(asn)
  37. peer[name][asn]['export'] = "AS-GITOYEN"
  38. peer[name][asn]['peerings'] = []
  39. if name_request['data'][0]['info_prefixes4'] is not None:
  40. peer[name][asn]['limit_ipv4'] = int(name_request['data'][0]['info_prefixes4'])
  41. if name_request['data'][0]['info_prefixes6'] is not None:
  42. peer[name][asn]['limit_ipv6'] = int(name_request['data'][0]['info_prefixes6'])
  43. delete = True
  44. for routeur in result:
  45. if routeur['ipaddr4'] is not None:
  46. peer[name][asn]['peerings'].append(routeur['ipaddr4'])
  47. print(
  48. "Generating configuration at " + name + " for the router " + str(routeur['ipaddr4']) + " of the AS " + str(
  49. asn) + " " + peer[name][asn]['description'])
  50. if routeur['ipaddr6'] is not None:
  51. peer[name][asn]['peerings'].append(routeur['ipaddr6'])
  52. print(
  53. "Generating configuration at " + name + " for the router " + str(routeur['ipaddr6']) + " of the AS " + str(
  54. asn) + " " + peer[name][asn]['description'])
  55. delete = False
  56. if delete:
  57. peer[name].pop(asn, None)
  58. for gix in peer:
  59. with open("peers/" + gix + '.yml', 'w') as outfile:
  60. yaml.dump(peer[gix], outfile, default_flow_style=False)
  61. outfile.close()