Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 3dc3070b authored by Vehbo DZOGOVIC's avatar Vehbo DZOGOVIC
Browse files

Merge branch 'add_docker_compose_and_default_config' of...

Merge branch 'add_docker_compose_and_default_config' of https://code.europa.eu/digit-c4/netbox-plugins into add_docker_compose_and_default_config
parents 24f09b42 bae15af0
No related branches found
No related tags found
1 merge request!16add docker compose and netbox default configuration
Pipeline #69971 passed
Showing
with 125 additions and 60 deletions
......@@ -14,4 +14,6 @@ COPY ./plugins /opt/netbox/plugins
COPY requirements.txt /opt/netbox/plugins
COPY netbox_configuration/plugins.py /etc/netbox/config/plugins.py
RUN /opt/netbox/venv/bin/pip install -r /opt/netbox/plugins/requirements.txt
RUN pip install -r /opt/netbox/plugins/requirements.txt
RUN rm -rf /opt/netbox/plugins
......@@ -18,6 +18,7 @@
- name: Building image
community.docker.docker_image:
build:
pull: true
path: ../
args:
http_proxy: "{{ lookup('ansible.builtin.env', 'HTTP_PROXY') }}"
......
recursive-include src *.html
global-include *.html
......@@ -5,7 +5,7 @@ class NetBoxRpsConfig(PluginConfig):
name = 'netbox_rps_plugin'
verbose_name = 'NetBox RPS'
description = 'A Netbox plugin to add RPS resources'
version = '0.7.1'
version = '0.8.1'
author = "Vincent Simonin"
author_email = "vincent.simonin@ext.ec.europa.eu"
base_url = 'rps'
......
from netbox.filtersets import NetBoxModelFilterSet
from .models import Mapping
from .models import Mapping, HttpHeader
from django.db.models import Q
class MappingFilterSet(NetBoxModelFilterSet):
......@@ -9,5 +9,20 @@ class MappingFilterSet(NetBoxModelFilterSet):
fields = ('id', 'authentication', 'source', 'target', 'Comment')
def search(self, queryset, name, value):
return queryset.filter( Q(source__icontains=value) | Q(target__icontains=value)
return queryset.filter( Q(source__icontains=value) | Q(target__icontains=value)
| Q(authentication__icontains=value) | Q(Comment__icontains=value))
class HttpHeaderFilterSet(NetBoxModelFilterSet):
class Meta:
model = HttpHeader
fields = ('id', 'name', 'value', 'apply_to')
def search(self, queryset, name, value):
"""Perform the filtered search."""
if not value.strip():
return queryset
qs_filter = (
Q(name__icontains=value)
)
return queryset.filter(qs_filter)
from django import forms
from django.utils.translation import gettext as _
from netbox.forms import NetBoxModelForm, NetBoxModelFilterSetForm, NetBoxModelImportForm
from .models import Mapping, AuthenticationChoices
from .models import Mapping, AuthenticationChoices, HttpHeader
class MappingForm(NetBoxModelForm):
......@@ -33,3 +33,18 @@ class MappingImportForm(NetBoxModelImportForm):
class Meta:
model = Mapping
fields = ('source', 'target', 'authentication', 'testingpage', 'webdav')
class HttpHeaderForm(NetBoxModelForm):
class Meta:
model = HttpHeader
fields = (
'mapping', 'name', 'value', 'apply_to'
)
labels = {
'mapping': 'Mapping',
'name': 'Name',
'value': 'Value',
'apply_to': 'Apply to',
}
......@@ -101,3 +101,6 @@ class HttpHeader(NetBoxModel):
class Meta:
unique_together = ['mapping', 'name', 'apply_to']
ordering = ['name']
def __str__(self):
return self.name
......@@ -32,4 +32,3 @@ menu = (
icon_class='mdi mdi-graph-outline'
)
)
......@@ -21,11 +21,12 @@ class HttpHeaderTable(NetBoxTable):
mapping = tables.Column(
linkify=True
)
class Meta(NetBoxTable.Meta):
model = HttpHeader
fields = (
'pk', 'id', 'name', 'value', 'apply_to', 'mapping'
)
default_columns = (
'name', 'value'
'name', 'value', 'apply_to'
)
{% extends 'generic/object.html' %}
{% load render_table from django_tables2 %}
{% block content %}
<div class="row mb-3">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">Access List</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Name</th>
<td>{{ object.name }}</td>
</tr>
<tr>
<th scope="row">Default Action</th>
<td>{{ object.get_default_action_display }}</td>
</tr>
<tr>
<th scope="row">Rules</th>
<td>{{ object.rules.count }}</td>
</tr>
</table>
</div>
</div>
{% include 'inc/panels/custom_fields.html' %}
</div>
<div class="col col-md-6">
{% include 'inc/panels/tags.html' %}
{% include 'inc/panels/comments.html' %}
</div>
</div>
<div class="row">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">Rules</h5>
<div class="card-body table-responsive">
{% render_table rules_table %}
</div>
</div>
</div>
</div>
{% endblock content %}
{% extends 'generic/object.html' %}
{% load helpers %}
{% load render_table from django_tables2 %}
{% load perms %}
{% block extra_controls %}
<a href="{% url 'plugins:netbox_rps_plugin:httpheader_add' %}?mapping={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary">
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add HTTP Header
</a>
{% endblock %}
{% block content %}
{% include 'inc/table_controls_htmx.html' with table_modal="HttpHeaderTable_config" %}
<form method="post">
{% csrf_token %}
<input type="hidden" name="return_url" value="{% if return_url %}{{ return_url }}{% else %}{{ request.path }}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}{% endif %}" />
<div class="card">
<div class="card-body htmx-container table-responsive" id="object_list">
{% include 'htmx/table.html' %}
</div>
</div>
<div class="noprint bulk-buttons">
<div class="bulk-button-group">
{% if 'bulk_delete' in actions %}
<button type="submit" name="_delete" formaction="{% url 'plugins:netbox_rps_plugin:httpheaders_bulk_delete' %}?return_url={% url 'plugins:netbox_rps_plugin:mapping_httpheader' pk=object.pk %}" class="btn btn-danger btn-sm">
<i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
</button>
{% endif %}
</div>
</div>
</form>
{% endblock %}
{% block modals %}
{{ block.super }}
{% table_config_form table %}
{% endblock modals %}
{% extends 'generic/object.html' %}
{% block extra_controls %}
<a href="{% url 'plugins:netbox_rps_plugin:httpheader_add' %}?mapping={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary">
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> Add HTTP Header
</a>
{% endblock %}
{% block content %}
<div class="row mb-3">
<div class="col col-md-6">
......
......@@ -19,5 +19,11 @@ urlpatterns = (
}),
# HTTP Headers
#path('http-headers/', views.MappingHttpHeadersView.as_view(), name='httpheaders_list'),
path('http-headers/add/', views.HttpHeaderEditView.as_view(), name='httpheader_add'),
path('http-headers/delete/', views.HttpHeaderBulkDeleteView.as_view(), name='httpheaders_bulk_delete'),
path('http-headers/<int:pk>/edit/', views.HttpHeaderEditView.as_view(), name='httpheader_edit'),
path('http-headers/<int:pk>/delete/', views.HttpHeaderDeleteView.as_view(), name='httpheader_delete'),
path('http-headers/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='httpheader_changelog', kwargs={
'model': models.HttpHeader
}),
)
......@@ -5,7 +5,7 @@ from utilities.views import ViewTab, register_model_view
from django.utils.translation import gettext as _
class MappingView(generic.ObjectView):
queryset = models.Mapping.objects.all()
queryset = models.Mapping.objects.all().prefetch_related('http_headers')
class MappingListView(generic.ObjectListView):
......@@ -35,14 +35,35 @@ class MappingBulkDeleteView(generic.BulkDeleteView):
table = tables.MappingTable
#@register_model_view(models.Mapping, 'HTTP Headers', path='http-headers')
@register_model_view(models.Mapping, 'httpheader')
class MappingHttpHeadersView(generic.ObjectChildrenView):
queryset = models.Mapping.objects.all()
queryset = models.Mapping.objects.all().prefetch_related('http_headers')
child_model = models.HttpHeader
table = tables.HttpHeaderTable
filterset = filtersets.HttpHeaderFilterSet
template_name = "netbox_rps_plugin/httpheader/child.html"
hide_if_empty = False
tab = ViewTab(
label=_('HTTP Headers')
label=_('HTTP Headers'),
badge=lambda obj: obj.http_headers.count(),
hide_if_empty=False,
)
def get_children(self, request, parent):
return models.HttpHeader.objects.restrict(request.user, 'view').filter(mapping=parent)
return parent.http_headers
class HttpHeaderEditView(generic.ObjectEditView):
queryset = models.HttpHeader.objects.all()
form = forms.HttpHeaderForm
class HttpHeaderDeleteView(generic.ObjectDeleteView):
queryset = models.HttpHeader.objects.all()
class HttpHeaderBulkDeleteView(generic.BulkDeleteView):
queryset = models.HttpHeader.objects.all()
filterset = filtersets.HttpHeaderFilterSet
table = tables.HttpHeaderTable
from setuptools import find_packages, setup
setup(
name='netbox-rps-plugin',
version='0.7.1',
name='netbox_rps_plugin',
version='0.8.1',
description='A Netbox plugin to add RPS resources',
install_requires=[],
packages=find_packages(),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment