diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index efd9883bb..71846c489 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -3,6 +3,7 @@ ### Breaking Changes * Exported webhooks and custom fields now reference associated content types by raw string value (e.g. "dcim.site") rather than by human-friendly name. +* The 128GFC interface type has been corrected from `128gfc-sfp28` to `128gfc-qsfp28`. ### Enhancements @@ -14,6 +15,7 @@ ### Bug Fixes +* [#7589](https://github.com/netbox-community/netbox/issues/7589) - Correct 128GFC interface type identifier * [#7756](https://github.com/netbox-community/netbox/issues/7756) - Fix AttributeError exception when editing an IP address assigned to a FHRPGroup * [#7757](https://github.com/netbox-community/netbox/issues/7757) - Fix 404 when assigning multiple contacts/FHRP groups in succession * [#7768](https://github.com/netbox-community/netbox/issues/7768) - Validate IP address status when creating a new FHRP group diff --git a/netbox/dcim/choices.py b/netbox/dcim/choices.py index b5210284a..b2eacd172 100644 --- a/netbox/dcim/choices.py +++ b/netbox/dcim/choices.py @@ -782,7 +782,7 @@ class InterfaceTypeChoices(ChoiceSet): TYPE_16GFC_SFP_PLUS = '16gfc-sfpp' TYPE_32GFC_SFP28 = '32gfc-sfp28' TYPE_64GFC_QSFP_PLUS = '64gfc-qsfpp' - TYPE_128GFC_QSFP28 = '128gfc-sfp28' + TYPE_128GFC_QSFP28 = '128gfc-qsfp28' # InfiniBand TYPE_INFINIBAND_SDR = 'infiniband-sdr' diff --git a/netbox/dcim/migrations/0142_rename_128gfc_qsfp28.py b/netbox/dcim/migrations/0142_rename_128gfc_qsfp28.py new file mode 100644 index 000000000..d1f91afae --- /dev/null +++ b/netbox/dcim/migrations/0142_rename_128gfc_qsfp28.py @@ -0,0 +1,29 @@ +from django.db import migrations + +OLD_VALUE = '128gfc-sfp28' +NEW_VALUE = '128gfc-qsfp28' + + +def correct_type(apps, schema_editor): + """ + Correct TYPE_128GFC_QSFP28 interface type. + """ + Interface = apps.get_model('dcim', 'Interface') + InterfaceTemplate = apps.get_model('dcim', 'InterfaceTemplate') + + for model in (Interface, InterfaceTemplate): + model.objects.filter(type=OLD_VALUE).update(type=NEW_VALUE) + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0141_asn_model'), + ] + + operations = [ + migrations.RunPython( + code=correct_type, + reverse_code=migrations.RunPython.noop + ), + ]