From 20b7685d3bbba7f096d1dba20960b0d08a931bf2 Mon Sep 17 00:00:00 2001 From: Djothi Date: Mon, 4 Sep 2023 17:53:34 +0200 Subject: [PATCH] feat: add PortLayout model --- .../netbox_cmdb/migrations/0038_portlayout.py | 32 +++++++++++++++++++ netbox_cmdb/netbox_cmdb/models/interface.py | 29 +++++++++++++++-- 2 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 netbox_cmdb/netbox_cmdb/migrations/0038_portlayout.py diff --git a/netbox_cmdb/netbox_cmdb/migrations/0038_portlayout.py b/netbox_cmdb/netbox_cmdb/migrations/0038_portlayout.py new file mode 100644 index 0000000..963c36a --- /dev/null +++ b/netbox_cmdb/netbox_cmdb/migrations/0038_portlayout.py @@ -0,0 +1,32 @@ +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0161_cabling_cleanup'), + ('netbox_cmdb', '0037_logicalinterface'), + ] + + operations = [ + migrations.CreateModel( + name='PortLayout', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ('name', models.CharField(max_length=64)), + ('label_name', models.CharField(max_length=64)), + ('logical_name', models.CharField(max_length=64)), + ('vendor_name', models.CharField(max_length=64)), + ('vendor_short_name', models.CharField(max_length=64)), + ('vendor_long_name', models.CharField(max_length=64)), + ('device_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_device_type', to='dcim.devicetype')), + ('network_role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_network_role', to='dcim.devicerole')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/netbox_cmdb/netbox_cmdb/models/interface.py b/netbox_cmdb/netbox_cmdb/models/interface.py index be88792..d02ab63 100644 --- a/netbox_cmdb/netbox_cmdb/models/interface.py +++ b/netbox_cmdb/netbox_cmdb/models/interface.py @@ -74,10 +74,18 @@ class LogicalInterface(ChangeLoggedModel): to="VRF", related_name="%(class)s_vrf", on_delete=models.CASCADE, blank=True, null=True ) ipv4_address = models.ForeignKey( - to="ipam.IPAddress", related_name="%(class)s_ipv4_address", on_delete=models.CASCADE, blank=True, null=True + to="ipam.IPAddress", + related_name="%(class)s_ipv4_address", + on_delete=models.CASCADE, + blank=True, + null=True, ) ipv6_address = models.ForeignKey( - to="ipam.IPAddress", related_name="%(class)s_ipv6_address", on_delete=models.CASCADE, blank=True, null=True + to="ipam.IPAddress", + related_name="%(class)s_ipv6_address", + on_delete=models.CASCADE, + blank=True, + null=True, ) mode = models.CharField( choices=LOGICAL_INTERFACE_MODE_CHOICES, @@ -113,3 +121,20 @@ def __str__(self): class Meta: unique_together = ("index", "parent_interface") + + +class PortLayout(ChangeLoggedModel): + """A port layout configuration on a Network device.""" + + device_type = models.ForeignKey( + to="dcim.DeviceType", related_name="%(class)s_device_type", on_delete=models.CASCADE + ) + network_role = models.ForeignKey( + to="dcim.DeviceRole", related_name="%(class)s_network_role", on_delete=models.CASCADE + ) + name = models.CharField(max_length=64) + label_name = models.CharField(max_length=64) + logical_name = models.CharField(max_length=64) + vendor_name = models.CharField(max_length=64) + vendor_short_name = models.CharField(max_length=64) + vendor_long_name = models.CharField(max_length=64)