Merge pull request #34 from ryanmerolle/feature_33

add device to ACL relationship
This commit is contained in:
Ryan Merolle 2022-07-14 22:25:00 -04:00 committed by GitHub
commit dac1ab9f5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 23 additions and 9 deletions

View File

@ -1,6 +1,7 @@
from rest_framework import serializers
from ipam.api.serializers import NestedPrefixSerializer
from dcim.api.serializers import NestedDeviceSerializer
from netbox.api.serializers import NetBoxModelSerializer, WritableNestedSerializer
from ..models import AccessList, AccessListRule
@ -16,7 +17,7 @@ class NestedAccessListSerializer(WritableNestedSerializer):
class Meta:
model = AccessList
fields = ('id', 'url', 'display', 'name')
fields = ('id', 'url', 'display', 'name', 'device')
class NestedAccessListRuleSerializer(WritableNestedSerializer):
@ -38,11 +39,12 @@ class AccessListSerializer(NetBoxModelSerializer):
view_name='plugins-api:netbox_access_lists-api:accesslist-detail'
)
rule_count = serializers.IntegerField(read_only=True)
device = NestedDeviceSerializer()
class Meta:
model = AccessList
fields = (
'id', 'url', 'display', 'name', 'type', 'default_action', 'comments', 'tags', 'custom_fields', 'created',
'id', 'url', 'display', 'name', 'device', 'type', 'default_action', 'comments', 'tags', 'custom_fields', 'created',
'last_updated', 'rule_count',
)

View File

@ -7,7 +7,9 @@ from .serializers import AccessListSerializer, AccessListRuleSerializer
class AccessListViewSet(NetBoxModelViewSet):
queryset = models.AccessList.objects.prefetch_related('tags').annotate(
queryset = models.AccessList.objects.prefetch_related(
'device', 'tags'
).annotate(
rule_count=Count('rules')
)
serializer_class = AccessListSerializer

View File

@ -5,7 +5,7 @@ from .models import AccessList, AccessListRule
class AccessListFilterSet(NetBoxModelFilterSet):
class Meta:
model = AccessList
fields = ('id', 'name', 'type', 'default_action', 'comments')
fields = ('id', 'name', 'device', 'type', 'default_action', 'comments')
def search(self, queryset, name, value):
return queryset.filter(description__icontains=value)

View File

@ -16,7 +16,7 @@ class AccessListForm(NetBoxModelForm):
class Meta:
model = AccessList
fields = ('name', 'type', 'default_action', 'comments', 'tags')
fields = ('name', 'device', 'type', 'default_action', 'comments', 'tags')
class AccessListFilterForm(NetBoxModelFilterSetForm):

View File

@ -23,13 +23,15 @@ class Migration(migrations.Migration):
('last_updated', models.DateTimeField(auto_now=True, null=True)),
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder)),
('name', models.CharField(max_length=100)),
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='access_lists', to='dcim.device')),
('type', models.CharField(max_length=100)),
('default_action', models.CharField(max_length=30)),
('comments', models.TextField(blank=True)),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
],
options={
'ordering': ('name',),
'ordering': ('name', 'device'),
'unique_together': {('name', 'device')},
},
),
migrations.CreateModel(

View File

@ -40,6 +40,11 @@ class AccessList(NetBoxModel):
name = models.CharField(
max_length=100
)
device = models.ForeignKey(
to='dcim.Device',
on_delete=models.CASCADE,
related_name='access_lists'
)
type = models.CharField(
max_length=30,
choices=AccessListTypeChoices
@ -54,7 +59,7 @@ class AccessList(NetBoxModel):
)
class Meta:
ordering = ('name',)
ordering = ('name', 'device')
def __str__(self):
return self.name

View File

@ -8,6 +8,9 @@ class AccessListTable(NetBoxTable):
name = tables.Column(
linkify=True
)
device = tables.Column(
linkify=True
)
type = ChoiceFieldColumn()
default_action = ChoiceFieldColumn()
rule_count = tables.Column()
@ -17,8 +20,8 @@ class AccessListTable(NetBoxTable):
class Meta(NetBoxTable.Meta):
model = AccessList
fields = ('pk', 'id', 'name', 'type', 'rule_count', 'default_action', 'comments', 'actions', 'tags')
default_columns = ('name', 'type', 'rule_count', 'default_action', 'tags')
fields = ('pk', 'id', 'name', 'device', 'type', 'rule_count', 'default_action', 'comments', 'actions', 'tags')
default_columns = ('name', 'device', 'type', 'rule_count', 'default_action', 'tags')
class AccessListRuleTable(NetBoxTable):