# -*- 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), ]