mirror of
				https://github.com/peeringdb/peeringdb.git
				synced 2024-05-11 05:55:09 +00:00 
			
		
		
		
	
		
			
	
	
		
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | # -*- coding: utf-8 -*- | ||
|  | # Generated by Django 1.11.23 on 2019-12-10 15:24 | ||
|  | from __future__ import unicode_literals | ||
|  | 
 | ||
|  | from django.db import migrations | ||
|  | 
 | ||
|  | 
 | ||
|  | def forwards_func(apps, schema_editor): | ||
|  | 
 | ||
|  |     NetworkIXLan = apps.get_model("peeringdb_server", "NetworkIXLan") | ||
|  |     Network = apps.get_model("peeringdb_server", "Network") | ||
|  | 
 | ||
|  |     asn_missing = 0 | ||
|  |     migrated = 0 | ||
|  | 
 | ||
|  |     print("\nmigrating netixlans") | ||
|  | 
 | ||
|  |     for netixlan in NetworkIXLan.handleref.all(): | ||
|  |         if netixlan.asn != netixlan.network.asn: | ||
|  | 
 | ||
|  |             # asn differs from related network asn | ||
|  | 
 | ||
|  |             net = Network.handleref.filter(asn=netixlan.asn).first() | ||
|  | 
 | ||
|  |             if net and netixlan.status == "ok": | ||
|  | 
 | ||
|  |                 # set network object from asn | ||
|  | 
 | ||
|  |                 if net.status != netixlan.status: | ||
|  | 
 | ||
|  |                     # network status doesnt match netixlan status | ||
|  |                     # we update netixlan status to match as that is the least | ||
|  |                     # destructive behaviour while allowing us to still | ||
|  |                     # resolve the unique constraint conflict | ||
|  | 
 | ||
|  |                     netixlan.status = net.status | ||
|  | 
 | ||
|  |                     print( | ||
|  |                         "AS{}: netixlan{} {} {} at exchange {} has been moved to network AS{}, however status" | ||
|  |                         " between the two was mismatching " | ||
|  |                         " and has been corrected, but should be reviewed".format( | ||
|  |                             netixlan.network.asn, | ||
|  |                             netixlan.id, | ||
|  |                             netixlan.ipaddr4, | ||
|  |                             netixlan.ipaddr6, | ||
|  |                             netixlan.ixlan.ix.id, | ||
|  |                             net.asn, | ||
|  |                         ) | ||
|  |                     ) | ||
|  | 
 | ||
|  |                 netixlan.network = net | ||
|  |                 netixlan.save() | ||
|  |                 migrated += 1 | ||
|  | 
 | ||
|  |             else: | ||
|  | 
 | ||
|  |                 # could not find network with asn matching asn | ||
|  |                 # in this case we should drop the netixlan and log it | ||
|  | 
 | ||
|  |                 notes = "AS{}: Could not correct non-existant local_asn AS{} @ ixlan{} ".format( | ||
|  |                     netixlan.network.asn, netixlan.asn, netixlan.ixlan.id | ||
|  |                 ) | ||
|  |                 if netixlan.status == "ok": | ||
|  |                     print(notes) | ||
|  |                     asn_missing += 1 | ||
|  | 
 | ||
|  |     print("Changed related network for {} netixlans".format(migrated)) | ||
|  |     print( | ||
|  |         "Found {} netixlans where network matching local_asn did not exist".format( | ||
|  |             asn_missing | ||
|  |         ) | ||
|  |     ) | ||
|  | 
 | ||
|  | 
 | ||
|  | class Migration(migrations.Migration): | ||
|  | 
 | ||
|  |     dependencies = [ | ||
|  |         ("peeringdb_server", "0023_netfac_local_asn"), | ||
|  |     ] | ||
|  | 
 | ||
|  |     operations = [ | ||
|  |         migrations.RunPython(forwards_func, migrations.RunPython.noop), | ||
|  |     ] |