diff --git a/netbox/circuits/migrations/0039_provider_remove_deprecated_fields.py b/netbox/circuits/migrations/0039_provider_remove_deprecated_fields.py new file mode 100644 index 000000000..ceb1803ca --- /dev/null +++ b/netbox/circuits/migrations/0039_provider_remove_deprecated_fields.py @@ -0,0 +1,59 @@ +import os + +from django.db import migrations +from django.db.utils import DataError + + +def check_legacy_data(apps, schema_editor): + """ + Abort the migration if any legacy provider fields still contain data. + """ + Provider = apps.get_model('circuits', 'Provider') + + provider_count = Provider.objects.exclude(asn__isnull=True).count() + if provider_count and 'NETBOX_DELETE_LEGACY_DATA' not in os.environ: + raise DataError( + f"Unable to proceed with deleting asn field from Provider model: Found {provider_count} " + f"providers with legacy ASN data. Please ensure all legacy provider ASN data has been " + f"migrated to ASN objects before proceeding. Or, set the NETBOX_DELETE_LEGACY_DATA " + f"environment variable to bypass this safeguard and delete all legacy provider ASN data." + ) + + provider_count = Provider.objects.exclude(admin_contact='', noc_contact='', portal_url='').count() + if provider_count and 'NETBOX_DELETE_LEGACY_DATA' not in os.environ: + raise DataError( + f"Unable to proceed with deleting contact fields from Provider model: Found {provider_count} " + f"providers with legacy contact data. Please ensure all legacy provider contact data has been " + f"migrated to contact objects before proceeding. Or, set the NETBOX_DELETE_LEGACY_DATA " + f"environment variable to bypass this safeguard and delete all legacy provider contact data." + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ('circuits', '0038_cabling_cleanup'), + ] + + operations = [ + migrations.RunPython( + code=check_legacy_data, + reverse_code=migrations.RunPython.noop + ), + migrations.RemoveField( + model_name='provider', + name='admin_contact', + ), + migrations.RemoveField( + model_name='provider', + name='asn', + ), + migrations.RemoveField( + model_name='provider', + name='noc_contact', + ), + migrations.RemoveField( + model_name='provider', + name='portal_url', + ), + ] diff --git a/netbox/circuits/migrations/0039_remove_provider_admin_contact_remove_provider_asn_and_more.py b/netbox/circuits/migrations/0039_remove_provider_admin_contact_remove_provider_asn_and_more.py deleted file mode 100644 index efea9fe94..000000000 --- a/netbox/circuits/migrations/0039_remove_provider_admin_contact_remove_provider_asn_and_more.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 4.0.7 on 2022-09-15 17:20 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('circuits', '0038_cabling_cleanup'), - ] - - operations = [ - migrations.RemoveField( - model_name='provider', - name='admin_contact', - ), - migrations.RemoveField( - model_name='provider', - name='asn', - ), - migrations.RemoveField( - model_name='provider', - name='noc_contact', - ), - migrations.RemoveField( - model_name='provider', - name='portal_url', - ), - ]