Fixes #19440: Ensure data migrations use the correct database connection

This commit is contained in:
Jeremy Stretch
2025-05-08 14:53:52 -04:00
parent 8baf15771a
commit 76aa255f07
32 changed files with 197 additions and 131 deletions

View File

@@ -26,49 +26,50 @@ def set_null_values(apps, schema_editor):
RackType = apps.get_model('dcim', 'RackType')
RearPort = apps.get_model('dcim', 'RearPort')
Site = apps.get_model('dcim', 'Site')
db_alias = schema_editor.connection.alias
Cable.objects.filter(length_unit='').update(length_unit=None)
Cable.objects.filter(type='').update(type=None)
ConsolePort.objects.filter(cable_end='').update(cable_end=None)
ConsolePort.objects.filter(type='').update(type=None)
ConsolePortTemplate.objects.filter(type='').update(type=None)
ConsoleServerPort.objects.filter(cable_end='').update(cable_end=None)
ConsoleServerPort.objects.filter(type='').update(type=None)
ConsoleServerPortTemplate.objects.filter(type='').update(type=None)
Device.objects.filter(airflow='').update(airflow=None)
Device.objects.filter(face='').update(face=None)
DeviceType.objects.filter(airflow='').update(airflow=None)
DeviceType.objects.filter(subdevice_role='').update(subdevice_role=None)
DeviceType.objects.filter(weight_unit='').update(weight_unit=None)
FrontPort.objects.filter(cable_end='').update(cable_end=None)
Interface.objects.filter(cable_end='').update(cable_end=None)
Interface.objects.filter(mode='').update(mode=None)
Interface.objects.filter(poe_mode='').update(poe_mode=None)
Interface.objects.filter(poe_type='').update(poe_type=None)
Interface.objects.filter(rf_channel='').update(rf_channel=None)
Interface.objects.filter(rf_role='').update(rf_role=None)
InterfaceTemplate.objects.filter(poe_mode='').update(poe_mode=None)
InterfaceTemplate.objects.filter(poe_type='').update(poe_type=None)
InterfaceTemplate.objects.filter(rf_role='').update(rf_role=None)
ModuleType.objects.filter(airflow='').update(airflow=None)
ModuleType.objects.filter(weight_unit='').update(weight_unit=None)
PowerFeed.objects.filter(cable_end='').update(cable_end=None)
PowerOutlet.objects.filter(cable_end='').update(cable_end=None)
PowerOutlet.objects.filter(feed_leg='').update(feed_leg=None)
PowerOutlet.objects.filter(type='').update(type=None)
PowerOutletTemplate.objects.filter(feed_leg='').update(feed_leg=None)
PowerOutletTemplate.objects.filter(type='').update(type=None)
PowerPort.objects.filter(cable_end='').update(cable_end=None)
PowerPort.objects.filter(type='').update(type=None)
PowerPortTemplate.objects.filter(type='').update(type=None)
Rack.objects.filter(airflow='').update(airflow=None)
Rack.objects.filter(form_factor='').update(form_factor=None)
Rack.objects.filter(outer_unit='').update(outer_unit=None)
Rack.objects.filter(weight_unit='').update(weight_unit=None)
RackType.objects.filter(outer_unit='').update(outer_unit=None)
RackType.objects.filter(weight_unit='').update(weight_unit=None)
RearPort.objects.filter(cable_end='').update(cable_end=None)
Site.objects.filter(time_zone='').update(time_zone=None)
Cable.objects.using(db_alias).filter(length_unit='').update(length_unit=None)
Cable.objects.using(db_alias).filter(type='').update(type=None)
ConsolePort.objects.using(db_alias).filter(cable_end='').update(cable_end=None)
ConsolePort.objects.using(db_alias).filter(type='').update(type=None)
ConsolePortTemplate.objects.using(db_alias).filter(type='').update(type=None)
ConsoleServerPort.objects.using(db_alias).filter(cable_end='').update(cable_end=None)
ConsoleServerPort.objects.using(db_alias).filter(type='').update(type=None)
ConsoleServerPortTemplate.objects.using(db_alias).filter(type='').update(type=None)
Device.objects.using(db_alias).filter(airflow='').update(airflow=None)
Device.objects.using(db_alias).filter(face='').update(face=None)
DeviceType.objects.using(db_alias).filter(airflow='').update(airflow=None)
DeviceType.objects.using(db_alias).filter(subdevice_role='').update(subdevice_role=None)
DeviceType.objects.using(db_alias).filter(weight_unit='').update(weight_unit=None)
FrontPort.objects.using(db_alias).filter(cable_end='').update(cable_end=None)
Interface.objects.using(db_alias).filter(cable_end='').update(cable_end=None)
Interface.objects.using(db_alias).filter(mode='').update(mode=None)
Interface.objects.using(db_alias).filter(poe_mode='').update(poe_mode=None)
Interface.objects.using(db_alias).filter(poe_type='').update(poe_type=None)
Interface.objects.using(db_alias).filter(rf_channel='').update(rf_channel=None)
Interface.objects.using(db_alias).filter(rf_role='').update(rf_role=None)
InterfaceTemplate.objects.using(db_alias).filter(poe_mode='').update(poe_mode=None)
InterfaceTemplate.objects.using(db_alias).filter(poe_type='').update(poe_type=None)
InterfaceTemplate.objects.using(db_alias).filter(rf_role='').update(rf_role=None)
ModuleType.objects.using(db_alias).filter(airflow='').update(airflow=None)
ModuleType.objects.using(db_alias).filter(weight_unit='').update(weight_unit=None)
PowerFeed.objects.using(db_alias).filter(cable_end='').update(cable_end=None)
PowerOutlet.objects.using(db_alias).filter(cable_end='').update(cable_end=None)
PowerOutlet.objects.using(db_alias).filter(feed_leg='').update(feed_leg=None)
PowerOutlet.objects.using(db_alias).filter(type='').update(type=None)
PowerOutletTemplate.objects.using(db_alias).filter(feed_leg='').update(feed_leg=None)
PowerOutletTemplate.objects.using(db_alias).filter(type='').update(type=None)
PowerPort.objects.using(db_alias).filter(cable_end='').update(cable_end=None)
PowerPort.objects.using(db_alias).filter(type='').update(type=None)
PowerPortTemplate.objects.using(db_alias).filter(type='').update(type=None)
Rack.objects.using(db_alias).filter(airflow='').update(airflow=None)
Rack.objects.using(db_alias).filter(form_factor='').update(form_factor=None)
Rack.objects.using(db_alias).filter(outer_unit='').update(outer_unit=None)
Rack.objects.using(db_alias).filter(weight_unit='').update(weight_unit=None)
RackType.objects.using(db_alias).filter(outer_unit='').update(outer_unit=None)
RackType.objects.using(db_alias).filter(weight_unit='').update(weight_unit=None)
RearPort.objects.using(db_alias).filter(cable_end='').update(cable_end=None)
Site.objects.using(db_alias).filter(time_zone='').update(time_zone=None)
class Migration(migrations.Migration):

View File

@@ -6,19 +6,26 @@ def populate_mac_addresses(apps, schema_editor):
ContentType = apps.get_model('contenttypes', 'ContentType')
Interface = apps.get_model('dcim', 'Interface')
MACAddress = apps.get_model('dcim', 'MACAddress')
db_alias = schema_editor.connection.alias
interface_ct = ContentType.objects.get_for_model(Interface)
mac_addresses = [
MACAddress(
mac_address=interface.mac_address, assigned_object_type=interface_ct, assigned_object_id=interface.pk
mac_address=interface.mac_address,
assigned_object_type=interface_ct,
assigned_object_id=interface.pk
)
for interface in Interface.objects.filter(mac_address__isnull=False)
]
MACAddress.objects.bulk_create(mac_addresses, batch_size=100)
MACAddress.objects.using(db_alias).bulk_create(mac_addresses, batch_size=100)
# TODO: Optimize interface updates
for mac_address in mac_addresses:
Interface.objects.filter(pk=mac_address.assigned_object_id).update(primary_mac_address=mac_address)
Interface.objects.using(db_alias).filter(
pk=mac_address.assigned_object_id
).update(
primary_mac_address=mac_address
)
class Migration(migrations.Migration):

View File

@@ -11,6 +11,8 @@ def load_initial_data(apps, schema_editor):
Load initial ModuleTypeProfile objects from file.
"""
ModuleTypeProfile = apps.get_model('dcim', 'ModuleTypeProfile')
db_alias = schema_editor.connection.alias
initial_profiles = (
'cpu',
'fan',
@@ -25,7 +27,7 @@ def load_initial_data(apps, schema_editor):
with file_path.open('r') as f:
data = json.load(f)
try:
ModuleTypeProfile.objects.create(**data)
ModuleTypeProfile.objects.using(db_alias).create(**data)
except Exception as e:
print(f"Error loading data from {file_path}")
raise e