generate_peers.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. name_request = ses.get('https://peeringdb.com/api/net?asn=' + str(asn)).json()
  30. peer[name][asn] = dict()
  31. peer[name][asn]['description'] = name_request['data'][0]['name']
  32. if name_request['data'][0]['irr_as_set'] is not None:
  33. peer[name][asn]['import'] = name_request['data'][0]['irr_as_set']
  34. else:
  35. peer[name][asn]['import'] = "AS" + str(asn)
  36. peer[name][asn]['export'] = "AS-GITOYEN"
  37. peer[name][asn]['peerings'] = []
  38. if name_request['data'][0]['info_prefixes4'] is not None:
  39. peer[name][asn]['limit_ipv4'] = int(name_request['data'][0]['info_prefixes4'])
  40. if name_request['data'][0]['info_prefixes6'] is not None:
  41. peer[name][asn]['limit_ipv6'] = int(name_request['data'][0]['info_prefixes6'])
  42. delete = True
  43. for routeur in result:
  44. if routeur['ipaddr4'] is not None:
  45. peer[name][asn]['peerings'].append(routeur['ipaddr4'])
  46. print(
  47. "Generating configuration at " + name + " for the router " + str(routeur['ipaddr4']) + " of the AS " + str(
  48. asn) + " " + peer[name][asn]['description'])
  49. if routeur['ipaddr6'] is not None:
  50. peer[name][asn]['peerings'].append(routeur['ipaddr6'])
  51. print(
  52. "Generating configuration at " + name + " for the router " + str(routeur['ipaddr6']) + " of the AS " + str(
  53. asn) + " " + peer[name][asn]['description'])
  54. delete = False
  55. if delete:
  56. peer[name].pop(asn, None)
  57. for gix in peer:
  58. with open("peers/" + gix + '.yml', 'w') as outfile:
  59. yaml.dump(peer[gix], outfile, default_flow_style=False)
  60. outfile.close()