Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions netbox/ipam/models/vlans.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,12 @@ def get_next_available_vid(self):
return available_vids[0]
return None

def get_child_vlans(self):
"""
Return all VLANs within this group.
"""
return VLAN.objects.filter(group=self).order_by('vid')


class VLAN(PrimaryModel):
"""
Expand Down
37 changes: 24 additions & 13 deletions netbox/ipam/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -897,21 +897,8 @@ def get_extra_context(self, request, instance):
(VLAN.objects.restrict(request.user, 'view').filter(group=instance), 'group_id'),
)

# TODO: Replace with embedded table
vlans = VLAN.objects.restrict(request.user, 'view').filter(group=instance).prefetch_related(
Prefetch('prefixes', queryset=Prefix.objects.restrict(request.user)),
'tenant', 'site', 'role',
).order_by('vid')
vlans = add_available_vlans(vlans, vlan_group=instance)

vlans_table = tables.VLANTable(vlans, user=request.user, exclude=('group',))
if request.user.has_perm('ipam.change_vlan') or request.user.has_perm('ipam.delete_vlan'):
vlans_table.columns.show('pk')
vlans_table.configure(request)

return {
'related_models': related_models,
'vlans_table': vlans_table,
}


Expand Down Expand Up @@ -944,6 +931,30 @@ class VLANGroupBulkDeleteView(generic.BulkDeleteView):
table = tables.VLANGroupTable


@register_model_view(VLANGroup, 'vlans')
class VLANGroupVLANsView(generic.ObjectChildrenView):
queryset = VLANGroup.objects.all()
child_model = VLAN
table = tables.VLANTable
filterset = filtersets.VLANFilterSet
template_name = 'generic/object_children.html'
tab = ViewTab(
label=_('VLANs'),
badge=lambda x: x.get_child_vlans().count(),
permission='ipam.view_vlan',
weight=500
)

def get_children(self, request, parent):
return parent.get_child_vlans().restrict(request.user, 'view').prefetch_related(
Prefetch('prefixes', queryset=Prefix.objects.restrict(request.user)),
'tenant', 'site', 'role',
)

def prep_table_data(self, request, queryset, parent):
return add_available_vlans(parent.get_child_vlans(), parent)


#
# FHRP groups
#
Expand Down
11 changes: 0 additions & 11 deletions netbox/templates/ipam/vlangroup.html
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,4 @@ <h5 class="card-header">VLAN Group</h5>
{% plugin_right_page object %}
</div>
</div>
<div class="row mb-3">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">VLANs</h5>
<div class="card-body table-responsive">
{% render_table vlans_table 'inc/table.html' %}
{% include 'inc/paginator.html' with paginator=vlans_table.paginator page=vlans_table.page %}
</div>
</div>
</div>
</div>
{% endblock %}