From 0b1fe631fcc5a18d0a0bdb04dae84afcced98926 Mon Sep 17 00:00:00 2001 From: Justin Parsell Date: Thu, 15 Feb 2024 17:48:37 +0000 Subject: [PATCH] Upload files to "dnac_integration" --- dnac_integration/navigation.py | 19 +++++++++++++++++++ dnac_integration/search.py | 11 +++++++++++ dnac_integration/tables.py | 29 +++++++++++++++++++++++++++++ dnac_integration/urls.py | 12 ++++++++++++ dnac_integration/views.py | 17 +++++++++++++++++ 5 files changed, 88 insertions(+) create mode 100644 dnac_integration/navigation.py create mode 100644 dnac_integration/search.py create mode 100644 dnac_integration/tables.py create mode 100644 dnac_integration/urls.py create mode 100644 dnac_integration/views.py diff --git a/dnac_integration/navigation.py b/dnac_integration/navigation.py new file mode 100644 index 0000000..819d577 --- /dev/null +++ b/dnac_integration/navigation.py @@ -0,0 +1,19 @@ +from extras.plugins import PluginMenuItem, PluginMenuButton +from utilities.choices import ButtonColorChoices + +dnacserver_buttons = [ + PluginMenuButton( + link='plugins:dnac_integration:dnac_server_add', + title='Add', + icon_class='mdi mdi-plus-thick', + color=ButtonColorChoices.GREEN + ) +] + +menu_items = ( + PluginMenuItem( + link='plugins:dnac_integration:dnac_server_list', + link_text='DNAC Servers', + buttons=dnacserver_buttons + ), +) \ No newline at end of file diff --git a/dnac_integration/search.py b/dnac_integration/search.py new file mode 100644 index 0000000..64eedf7 --- /dev/null +++ b/dnac_integration/search.py @@ -0,0 +1,11 @@ +from netbox.search import SearchIndex, register_search +from . import models + +@register_search +class dnacServerIndex(SearchIndex): + model = models.dnacServer + fields = ( + ('hostname', 100), + ('username', 500), + ('version', 1000), + ) \ No newline at end of file diff --git a/dnac_integration/tables.py b/dnac_integration/tables.py new file mode 100644 index 0000000..fe89f52 --- /dev/null +++ b/dnac_integration/tables.py @@ -0,0 +1,29 @@ +import django_tables2 as tables +from django.utils.safestring import mark_safe +from netbox.tables import NetBoxTable +from .models import dnacServer + +# Hide password from being viewed +# TODO: add custom view to base64, aes256 encrypt passwords +class MaskedPassword(tables.Column): + def render(self, value): + value = "*****" + return mark_safe(value) + +class dnacServerTable(NetBoxTable): + # Define the type of fields to display for a table + hostname = tables.Column( + linkify=True + ) + username = tables.Column() + password = MaskedPassword() + version = tables.Column() + verify = tables.BooleanColumn() + status = tables.BooleanColumn() + default_filter_action = tables.BooleanColumn() + + # Setup table ordering + class Meta(NetBoxTable.Meta): + model = dnacServer + fields = ('pk', 'id', 'hostname', 'username', 'password', 'version', 'verify', 'status', 'default_filter_action', 'actions') + default_columns = ('hostname', 'version', 'verify', 'status') \ No newline at end of file diff --git a/dnac_integration/urls.py b/dnac_integration/urls.py new file mode 100644 index 0000000..59620fc --- /dev/null +++ b/dnac_integration/urls.py @@ -0,0 +1,12 @@ +from django.urls import path +from netbox.views.generic import ObjectChangeLogView +from . import models, views + +urlpatterns = [ + path('servers/', views.dnacServerListView.as_view(), name='dnac_server_list'), + path('servers/add/', views.dnacServerEditView.as_view(), name='dnac_server_add'), + path('servers//', views.dnacServerView.as_view(), name='dnac_server'), + path('servers//edit/', views.dnacServerEditView.as_view(), name='dnac_server_edit'), + path('servers//delete/', views.dnacServerDeleteView.as_view(), name='dnac_server_delete'), + path('servers//changelog/', ObjectChangeLogView.as_view(), name='dnac_server_changelog', kwargs={'model': models.dnacServer}), +] \ No newline at end of file diff --git a/dnac_integration/views.py b/dnac_integration/views.py new file mode 100644 index 0000000..43f4398 --- /dev/null +++ b/dnac_integration/views.py @@ -0,0 +1,17 @@ +from netbox.views import generic +from django.db.models import Count +from . import forms, models, tables, filtersets + +class dnacServerView(generic.ObjectView): + queryset = models.dnacServer.objects.all() + +class dnacServerListView(generic.ObjectListView): + queryset = models.dnacServer.objects.all() + table = tables.dnacServerTable + +class dnacServerEditView(generic.ObjectEditView): + queryset = models.dnacServer.objects.all() + form = forms.dnacServerForm + +class dnacServerDeleteView(generic.ObjectDeleteView): + queryset = models.dnacServer.objects.all() \ No newline at end of file