Rename Interface to VMInterface

This commit is contained in:
Jeremy Stretch 2020-06-23 13:16:21 -04:00
parent d1bd010e05
commit 75354a8a78
13 changed files with 62 additions and 60 deletions

View File

@ -4,7 +4,7 @@ from dcim.models import Device, DeviceRole, DeviceType, Interface, Manufacturer,
from ipam.choices import *
from ipam.filters import *
from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
from virtualization.models import Cluster, ClusterType, Interface as VMInterface, VirtualMachine
from virtualization.models import Cluster, ClusterType, VirtualMachine, VMInterface
from tenancy.models import Tenant, TenantGroup

View File

@ -10,7 +10,7 @@ from ipam.models import VLAN
from tenancy.api.nested_serializers import NestedTenantSerializer
from utilities.api import ChoiceField, SerializedPKRelatedField, ValidatedModelSerializer
from virtualization.choices import *
from virtualization.models import Cluster, ClusterGroup, ClusterType, Interface, VirtualMachine
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
from .nested_serializers import *
@ -106,7 +106,7 @@ class InterfaceSerializer(TaggedObjectSerializer, ValidatedModelSerializer):
)
class Meta:
model = Interface
model = VMInterface
fields = [
'id', 'virtual_machine', 'name', 'enabled', 'mtu', 'mac_address', 'description', 'mode', 'untagged_vlan',
'tagged_vlans', 'tags',

View File

@ -5,7 +5,7 @@ from extras.api.views import CustomFieldModelViewSet
from utilities.api import ModelViewSet
from utilities.utils import get_subquery
from virtualization import filters
from virtualization.models import Cluster, ClusterGroup, ClusterType, Interface, VirtualMachine
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
from . import serializers
@ -72,7 +72,7 @@ class VirtualMachineViewSet(CustomFieldModelViewSet):
class InterfaceViewSet(ModelViewSet):
queryset = Interface.objects.filter(
queryset = VMInterface.objects.filter(
virtual_machine__isnull=False
).prefetch_related(
'virtual_machine', 'tags'

View File

@ -9,7 +9,7 @@ from utilities.filters import (
TreeNodeMultipleChoiceFilter,
)
from .choices import *
from .models import Cluster, ClusterGroup, ClusterType, Interface, VirtualMachine
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
__all__ = (
'ClusterFilterSet',
@ -222,7 +222,7 @@ class InterfaceFilterSet(BaseFilterSet):
)
class Meta:
model = Interface
model = VMInterface
fields = ['id', 'name', 'enabled', 'mtu']
def search(self, queryset, name, value):

View File

@ -19,7 +19,7 @@ from utilities.forms import (
StaticSelect2, StaticSelect2Multiple, TagFilterField, BOOLEAN_WITH_BLANK_CHOICES,
)
from .choices import *
from .models import Cluster, ClusterGroup, ClusterType, Interface, VirtualMachine
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
#
@ -600,7 +600,7 @@ class InterfaceForm(BootstrapMixin, forms.ModelForm):
)
class Meta:
model = Interface
model = VMInterface
fields = [
'virtual_machine', 'name', 'enabled', 'mac_address', 'mtu', 'description', 'mode', 'tags', 'untagged_vlan',
'tagged_vlans',
@ -717,7 +717,7 @@ class InterfaceCreateForm(BootstrapMixin, forms.Form):
class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm):
pk = forms.ModelMultipleChoiceField(
queryset=Interface.objects.all(),
queryset=VMInterface.objects.all(),
widget=forms.MultipleHiddenInput()
)
virtual_machine = forms.ModelChoiceField(
@ -786,7 +786,7 @@ class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm):
class InterfaceFilterForm(forms.Form):
model = Interface
model = VMInterface
enabled = forms.NullBooleanField(
required=False,
widget=StaticSelect2(
@ -816,7 +816,7 @@ class VirtualMachineBulkAddComponentForm(BootstrapMixin, forms.Form):
class InterfaceBulkCreateForm(
form_from_model(Interface, ['enabled', 'mtu', 'description', 'tags']),
form_from_model(VMInterface, ['enabled', 'mtu', 'description', 'tags']),
VirtualMachineBulkAddComponentForm
):
pass

View File

@ -20,7 +20,7 @@ class Migration(migrations.Migration):
operations = [
migrations.CreateModel(
name='Interface',
name='VMInterface',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)),
('name', models.CharField(max_length=64)),
@ -38,6 +38,7 @@ class Migration(migrations.Migration):
options={
'ordering': ('virtual_machine', utilities.query_functions.CollateAsChar('_name')),
'unique_together': {('virtual_machine', 'name')},
'verbose_name': 'interface',
},
),
]

View File

@ -8,10 +8,10 @@ def replicate_interfaces(apps, schema_editor):
TaggedItem = apps.get_model('extras', 'TaggedItem')
Interface = apps.get_model('dcim', 'Interface')
IPAddress = apps.get_model('ipam', 'IPAddress')
VMInterface = apps.get_model('virtualization', 'Interface')
VMInterface = apps.get_model('virtualization', 'VMInterface')
interface_ct = ContentType.objects.get_for_model(Interface)
vm_interface_ct = ContentType.objects.get_for_model(VMInterface)
vminterface_ct = ContentType.objects.get_for_model(VMInterface)
# Replicate dcim.Interface instances assigned to VirtualMachines
original_interfaces = Interface.objects.filter(virtual_machine__isnull=False)
@ -35,12 +35,12 @@ def replicate_interfaces(apps, schema_editor):
TaggedItem.objects.filter(
content_type=interface_ct, object_id=interface.pk
).update(
content_type=vm_interface_ct, object_id=vm_interface.pk
content_type=vminterface_ct, object_id=vm_interface.pk
)
# Update any assigned IPAddresses
IPAddress.objects.filter(assigned_object_id=interface.pk).update(
assigned_object_type=vm_interface_ct,
assigned_object_type=vminterface_ct,
assigned_object_id=vm_interface.pk
)
@ -59,7 +59,7 @@ class Migration(migrations.Migration):
dependencies = [
('ipam', '0037_ipaddress_assignment'),
('virtualization', '0015_interface'),
('virtualization', '0015_vminterface'),
]
operations = [

View File

@ -20,8 +20,8 @@ __all__ = (
'Cluster',
'ClusterGroup',
'ClusterType',
'Interface',
'VirtualMachine',
'VMInterface',
)
@ -381,7 +381,7 @@ class VirtualMachine(ChangeLoggedModel, ConfigContextModel, CustomFieldModel):
#
@extras_features('graphs', 'export_templates', 'webhooks')
class Interface(BaseInterface):
class VMInterface(BaseInterface):
virtual_machine = models.ForeignKey(
to='virtualization.VirtualMachine',
on_delete=models.CASCADE,
@ -423,6 +423,7 @@ class Interface(BaseInterface):
]
class Meta:
verbose_name = 'interface'
ordering = ('virtual_machine', CollateAsChar('_name'))
unique_together = ('virtual_machine', 'name')

View File

@ -3,7 +3,7 @@ from django_tables2.utils import Accessor
from tenancy.tables import COL_TENANT
from utilities.tables import BaseTable, ColoredLabelColumn, TagColumn, ToggleColumn
from .models import Cluster, ClusterGroup, ClusterType, Interface, VirtualMachine
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
CLUSTERTYPE_ACTIONS = """
<a href="{% url 'virtualization:clustertype_changelog' slug=record.slug %}" class="btn btn-default btn-xs" title="Change log">
@ -175,5 +175,5 @@ class VirtualMachineDetailTable(VirtualMachineTable):
class InterfaceTable(BaseTable):
class Meta(BaseTable.Meta):
model = Interface
model = VMInterface
fields = ('name', 'enabled', 'description')

View File

@ -4,7 +4,7 @@ from rest_framework import status
from dcim.choices import InterfaceModeChoices
from ipam.models import VLAN
from utilities.testing import APITestCase, APIViewTestCases
from virtualization.models import Cluster, ClusterGroup, ClusterType, Interface, VirtualMachine
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
class AppTest(APITestCase):
@ -203,15 +203,15 @@ class InterfaceTest(APITestCase):
clustertype = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1')
cluster = Cluster.objects.create(name='Test Cluster 1', type=clustertype)
self.virtualmachine = VirtualMachine.objects.create(cluster=cluster, name='Test VM 1')
self.interface1 = Interface.objects.create(
self.interface1 = VMInterface.objects.create(
virtual_machine=self.virtualmachine,
name='Test Interface 1'
)
self.interface2 = Interface.objects.create(
self.interface2 = VMInterface.objects.create(
virtual_machine=self.virtualmachine,
name='Test Interface 2'
)
self.interface3 = Interface.objects.create(
self.interface3 = VMInterface.objects.create(
virtual_machine=self.virtualmachine,
name='Test Interface 3'
)
@ -254,8 +254,8 @@ class InterfaceTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED)
self.assertEqual(Interface.objects.count(), 4)
interface4 = Interface.objects.get(pk=response.data['id'])
self.assertEqual(VMInterface.objects.count(), 4)
interface4 = VMInterface.objects.get(pk=response.data['id'])
self.assertEqual(interface4.virtual_machine_id, data['virtual_machine'])
self.assertEqual(interface4.name, data['name'])
@ -272,7 +272,7 @@ class InterfaceTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED)
self.assertEqual(Interface.objects.count(), 4)
self.assertEqual(VMInterface.objects.count(), 4)
self.assertEqual(response.data['virtual_machine']['id'], data['virtual_machine'])
self.assertEqual(response.data['name'], data['name'])
self.assertEqual(response.data['untagged_vlan']['id'], data['untagged_vlan'])
@ -298,7 +298,7 @@ class InterfaceTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED)
self.assertEqual(Interface.objects.count(), 6)
self.assertEqual(VMInterface.objects.count(), 6)
self.assertEqual(response.data[0]['name'], data[0]['name'])
self.assertEqual(response.data[1]['name'], data[1]['name'])
self.assertEqual(response.data[2]['name'], data[2]['name'])
@ -332,7 +332,7 @@ class InterfaceTest(APITestCase):
response = self.client.post(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_201_CREATED)
self.assertEqual(Interface.objects.count(), 6)
self.assertEqual(VMInterface.objects.count(), 6)
for i in range(0, 3):
self.assertEqual(response.data[i]['name'], data[i]['name'])
self.assertEqual([v['id'] for v in response.data[i]['tagged_vlans']], data[i]['tagged_vlans'])
@ -348,8 +348,8 @@ class InterfaceTest(APITestCase):
response = self.client.put(url, data, format='json', **self.header)
self.assertHttpStatus(response, status.HTTP_200_OK)
self.assertEqual(Interface.objects.count(), 3)
interface1 = Interface.objects.get(pk=response.data['id'])
self.assertEqual(VMInterface.objects.count(), 3)
interface1 = VMInterface.objects.get(pk=response.data['id'])
self.assertEqual(interface1.name, data['name'])
def test_delete_interface(self):
@ -358,4 +358,4 @@ class InterfaceTest(APITestCase):
response = self.client.delete(url, **self.header)
self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
self.assertEqual(Interface.objects.count(), 2)
self.assertEqual(VMInterface.objects.count(), 2)

View File

@ -4,7 +4,7 @@ from dcim.models import DeviceRole, Platform, Region, Site
from tenancy.models import Tenant, TenantGroup
from virtualization.choices import *
from virtualization.filters import *
from virtualization.models import Cluster, ClusterGroup, ClusterType, Interface, VirtualMachine
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
class ClusterTypeTestCase(TestCase):
@ -260,11 +260,11 @@ class VirtualMachineTestCase(TestCase):
VirtualMachine.objects.bulk_create(vms)
interfaces = (
Interface(virtual_machine=vms[0], name='Interface 1', mac_address='00-00-00-00-00-01'),
Interface(virtual_machine=vms[1], name='Interface 2', mac_address='00-00-00-00-00-02'),
Interface(virtual_machine=vms[2], name='Interface 3', mac_address='00-00-00-00-00-03'),
VMInterface(virtual_machine=vms[0], name='Interface 1', mac_address='00-00-00-00-00-01'),
VMInterface(virtual_machine=vms[1], name='Interface 2', mac_address='00-00-00-00-00-02'),
VMInterface(virtual_machine=vms[2], name='Interface 3', mac_address='00-00-00-00-00-03'),
)
Interface.objects.bulk_create(interfaces)
VMInterface.objects.bulk_create(interfaces)
def test_id(self):
params = {'id': self.queryset.values_list('pk', flat=True)[:2]}
@ -366,7 +366,7 @@ class VirtualMachineTestCase(TestCase):
class InterfaceTestCase(TestCase):
queryset = Interface.objects.all()
queryset = VMInterface.objects.all()
filterset = InterfaceFilterSet
@classmethod
@ -394,11 +394,11 @@ class InterfaceTestCase(TestCase):
VirtualMachine.objects.bulk_create(vms)
interfaces = (
Interface(virtual_machine=vms[0], name='Interface 1', enabled=True, mtu=100, mac_address='00-00-00-00-00-01'),
Interface(virtual_machine=vms[1], name='Interface 2', enabled=True, mtu=200, mac_address='00-00-00-00-00-02'),
Interface(virtual_machine=vms[2], name='Interface 3', enabled=False, mtu=300, mac_address='00-00-00-00-00-03'),
VMInterface(virtual_machine=vms[0], name='Interface 1', enabled=True, mtu=100, mac_address='00-00-00-00-00-01'),
VMInterface(virtual_machine=vms[1], name='Interface 2', enabled=True, mtu=200, mac_address='00-00-00-00-00-02'),
VMInterface(virtual_machine=vms[2], name='Interface 3', enabled=False, mtu=300, mac_address='00-00-00-00-00-03'),
)
Interface.objects.bulk_create(interfaces)
VMInterface.objects.bulk_create(interfaces)
def test_id(self):
id_list = self.queryset.values_list('id', flat=True)[:2]

View File

@ -5,7 +5,7 @@ from dcim.models import DeviceRole, Platform, Site
from ipam.models import VLAN
from utilities.testing import ViewTestCases
from virtualization.choices import *
from virtualization.models import Cluster, ClusterGroup, ClusterType, Interface, VirtualMachine
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
class ClusterGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
@ -199,7 +199,7 @@ class InterfaceTestCase(
ViewTestCases.BulkEditObjectsViewTestCase,
ViewTestCases.BulkDeleteObjectsViewTestCase,
):
model = Interface
model = VMInterface
@classmethod
def setUpTestData(cls):
@ -214,10 +214,10 @@ class InterfaceTestCase(
)
VirtualMachine.objects.bulk_create(virtualmachines)
Interface.objects.bulk_create([
Interface(virtual_machine=virtualmachines[0], name='Interface 1'),
Interface(virtual_machine=virtualmachines[0], name='Interface 2'),
Interface(virtual_machine=virtualmachines[0], name='Interface 3'),
VMInterface.objects.bulk_create([
VMInterface(virtual_machine=virtualmachines[0], name='Interface 1'),
VMInterface(virtual_machine=virtualmachines[0], name='Interface 2'),
VMInterface(virtual_machine=virtualmachines[0], name='Interface 3'),
])
vlans = (

View File

@ -14,7 +14,7 @@ from utilities.views import (
ObjectDeleteView, ObjectEditView, ObjectListView,
)
from . import filters, forms, tables
from .models import Cluster, ClusterGroup, ClusterType, Interface, VirtualMachine
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
#
@ -236,7 +236,7 @@ class VirtualMachineView(ObjectView):
def get(self, request, pk):
virtualmachine = get_object_or_404(self.queryset, pk=pk)
interfaces = Interface.objects.restrict(request.user, 'view').filter(virtual_machine=virtualmachine)
interfaces = VMInterface.objects.restrict(request.user, 'view').filter(virtual_machine=virtualmachine)
services = Service.objects.restrict(request.user, 'view').filter(virtual_machine=virtualmachine)
return render(request, 'virtualization/virtualmachine.html', {
@ -290,7 +290,7 @@ class VirtualMachineBulkDeleteView(BulkDeleteView):
#
class InterfaceListView(ObjectListView):
queryset = Interface.objects.prefetch_related('virtual_machine', 'virtual_machine__tenant', 'cable')
queryset = VMInterface.objects.prefetch_related('virtual_machine', 'virtual_machine__tenant', 'cable')
filterset = filters.InterfaceFilterSet
filterset_form = forms.InterfaceFilterForm
table = tables.InterfaceTable
@ -298,7 +298,7 @@ class InterfaceListView(ObjectListView):
class InterfaceView(ObjectView):
queryset = Interface.objects.all()
queryset = VMInterface.objects.all()
def get(self, request, pk):
@ -333,30 +333,30 @@ class InterfaceView(ObjectView):
# TODO: This should not use ComponentCreateView
class InterfaceCreateView(ComponentCreateView):
queryset = Interface.objects.all()
queryset = VMInterface.objects.all()
form = forms.InterfaceCreateForm
model_form = forms.InterfaceForm
template_name = 'virtualization/virtualmachine_component_add.html'
class InterfaceEditView(ObjectEditView):
queryset = Interface.objects.all()
queryset = VMInterface.objects.all()
model_form = forms.InterfaceForm
template_name = 'virtualization/interface_edit.html'
class InterfaceDeleteView(ObjectDeleteView):
queryset = Interface.objects.all()
queryset = VMInterface.objects.all()
class InterfaceBulkEditView(BulkEditView):
queryset = Interface.objects.all()
queryset = VMInterface.objects.all()
table = tables.InterfaceTable
form = forms.InterfaceBulkEditForm
class InterfaceBulkDeleteView(BulkDeleteView):
queryset = Interface.objects.all()
queryset = VMInterface.objects.all()
table = tables.InterfaceTable
@ -368,7 +368,7 @@ class VirtualMachineBulkAddInterfaceView(BulkComponentCreateView):
parent_model = VirtualMachine
parent_field = 'virtual_machine'
form = forms.InterfaceBulkCreateForm
queryset = Interface.objects.all()
queryset = VMInterface.objects.all()
model_form = forms.InterfaceForm
filterset = filters.VirtualMachineFilterSet
table = tables.VirtualMachineTable