2018-11-01 14:54:36 -04:00
|
|
|
import sys
|
|
|
|
|
2018-10-30 12:16:22 -04:00
|
|
|
from django.db import migrations, models
|
|
|
|
import django.db.models.deletion
|
|
|
|
|
2020-01-14 11:47:28 -05:00
|
|
|
CONNECTION_STATUS_CONNECTED = True
|
2018-10-30 12:16:22 -04:00
|
|
|
|
|
|
|
|
|
|
|
def circuit_terminations_to_cables(apps, schema_editor):
|
|
|
|
"""
|
|
|
|
Copy all existing CircuitTermination Interface associations as Cables
|
|
|
|
"""
|
|
|
|
ContentType = apps.get_model('contenttypes', 'ContentType')
|
|
|
|
CircuitTermination = apps.get_model('circuits', 'CircuitTermination')
|
|
|
|
Interface = apps.get_model('dcim', 'Interface')
|
|
|
|
Cable = apps.get_model('dcim', 'Cable')
|
|
|
|
|
|
|
|
# Load content types
|
|
|
|
circuittermination_type = ContentType.objects.get_for_model(CircuitTermination)
|
|
|
|
interface_type = ContentType.objects.get_for_model(Interface)
|
|
|
|
|
|
|
|
# Create a new Cable instance from each console connection
|
2018-11-01 14:54:36 -04:00
|
|
|
if 'test' not in sys.argv:
|
|
|
|
print("\n Adding circuit terminations... ", end='', flush=True)
|
2018-10-30 12:16:22 -04:00
|
|
|
for circuittermination in CircuitTermination.objects.filter(interface__isnull=False):
|
|
|
|
|
2018-10-31 11:52:43 -04:00
|
|
|
# Create the new Cable
|
|
|
|
cable = Cable.objects.create(
|
|
|
|
termination_a_type=circuittermination_type,
|
|
|
|
termination_a_id=circuittermination.id,
|
|
|
|
termination_b_type=interface_type,
|
|
|
|
termination_b_id=circuittermination.interface_id,
|
|
|
|
status=CONNECTION_STATUS_CONNECTED
|
|
|
|
)
|
|
|
|
|
|
|
|
# Cache the Cable on its two termination points
|
|
|
|
CircuitTermination.objects.filter(pk=circuittermination.pk).update(
|
|
|
|
cable=cable,
|
|
|
|
connected_endpoint=circuittermination.interface,
|
|
|
|
connection_status=CONNECTION_STATUS_CONNECTED
|
|
|
|
)
|
2018-10-30 12:16:22 -04:00
|
|
|
# Cache the connected Cable on the Interface
|
2018-10-31 11:52:43 -04:00
|
|
|
Interface.objects.filter(pk=circuittermination.interface_id).update(
|
|
|
|
cable=cable,
|
|
|
|
_connected_circuittermination=circuittermination,
|
|
|
|
connection_status=CONNECTION_STATUS_CONNECTED
|
|
|
|
)
|
2018-10-30 12:16:22 -04:00
|
|
|
|
|
|
|
cable_count = Cable.objects.filter(termination_a_type=circuittermination_type).count()
|
2018-11-01 14:54:36 -04:00
|
|
|
if 'test' not in sys.argv:
|
|
|
|
print("{} cables created".format(cable_count))
|
2018-10-30 12:16:22 -04:00
|
|
|
|
|
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
atomic = False
|
|
|
|
|
|
|
|
dependencies = [
|
|
|
|
('circuits', '0012_change_logging'),
|
|
|
|
('dcim', '0066_cables'),
|
|
|
|
]
|
|
|
|
|
|
|
|
operations = [
|
|
|
|
|
2018-10-30 14:27:45 -04:00
|
|
|
# Add new CircuitTermination fields
|
2018-10-30 12:16:22 -04:00
|
|
|
migrations.AddField(
|
|
|
|
model_name='circuittermination',
|
|
|
|
name='connected_endpoint',
|
|
|
|
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.Interface'),
|
|
|
|
),
|
|
|
|
migrations.AddField(
|
|
|
|
model_name='circuittermination',
|
|
|
|
name='connection_status',
|
2018-11-19 13:44:18 -05:00
|
|
|
field=models.NullBooleanField(),
|
2018-10-30 12:16:22 -04:00
|
|
|
),
|
2018-10-30 14:27:45 -04:00
|
|
|
migrations.AddField(
|
|
|
|
model_name='circuittermination',
|
|
|
|
name='cable',
|
2018-11-01 14:54:36 -04:00
|
|
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.Cable'),
|
2018-10-30 14:27:45 -04:00
|
|
|
),
|
2018-10-30 12:16:22 -04:00
|
|
|
|
|
|
|
# Copy CircuitTermination connections to Interfaces as Cables
|
|
|
|
migrations.RunPython(circuit_terminations_to_cables),
|
|
|
|
|
2018-10-30 14:27:45 -04:00
|
|
|
# Remove interface field from CircuitTermination
|
2018-10-30 12:16:22 -04:00
|
|
|
migrations.RemoveField(
|
|
|
|
model_name='circuittermination',
|
|
|
|
name='interface',
|
|
|
|
),
|
|
|
|
]
|