added ignore_cable_type
This commit is contained in:
@@ -4,7 +4,7 @@ class TopologyViewsConfig(PluginConfig):
|
|||||||
name = 'netbox_topology_views'
|
name = 'netbox_topology_views'
|
||||||
verbose_name = 'Topology views'
|
verbose_name = 'Topology views'
|
||||||
description = 'An plugin to render topology maps'
|
description = 'An plugin to render topology maps'
|
||||||
version = '1.0.0-alpha.2'
|
version = '1.0.0-alpha.3'
|
||||||
author = 'Mattijs Vanhaverbeke'
|
author = 'Mattijs Vanhaverbeke'
|
||||||
author_email = 'author@example.com'
|
author_email = 'author@example.com'
|
||||||
base_url = 'netbox_topology_views'
|
base_url = 'netbox_topology_views'
|
||||||
@@ -15,7 +15,7 @@ class TopologyViewsConfig(PluginConfig):
|
|||||||
'device_img': ['access-switch', 'core-switch', 'firewall', 'router', 'distribution-switch', 'backup', 'storage,wan-network', 'wireless-ap', 'server', 'internal-switch', 'isp-cpe-material', 'non-racked-devices', 'power-units'],
|
'device_img': ['access-switch', 'core-switch', 'firewall', 'router', 'distribution-switch', 'backup', 'storage,wan-network', 'wireless-ap', 'server', 'internal-switch', 'isp-cpe-material', 'non-racked-devices', 'power-units'],
|
||||||
'allow_coordinates_saving': False,
|
'allow_coordinates_saving': False,
|
||||||
'preselected_tags' : [],
|
'preselected_tags' : [],
|
||||||
'enable_circuit_terminations': False,
|
'enable_circuit_terminations': True,
|
||||||
'draw_default_layout': False
|
'draw_default_layout': False
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,18 +3,6 @@ from rest_framework.serializers import ModelSerializer
|
|||||||
from dcim.models import DeviceRole, Device
|
from dcim.models import DeviceRole, Device
|
||||||
from extras.models import Tag
|
from extras.models import Tag
|
||||||
|
|
||||||
class PreDeviceRoleSerializer(ModelSerializer):
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = DeviceRole
|
|
||||||
fields = ('id', 'name')
|
|
||||||
|
|
||||||
class PreTagSerializer(ModelSerializer):
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Tag
|
|
||||||
fields = ('id', 'name')
|
|
||||||
|
|
||||||
|
|
||||||
class TopologyDummySerializer(ModelSerializer):
|
class TopologyDummySerializer(ModelSerializer):
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,6 @@ from . import views
|
|||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
|
|
||||||
router.register('preselectdeviceroles', views.PreSelectDeviceRolesViewSet)
|
|
||||||
router.register('preselecttags', views.PreSelectTagsViewSet)
|
|
||||||
router.register('search', views.SearchViewSet, basename='search')
|
|
||||||
router.register('save-coords', views.SaveCoordsViewSet, basename='save_coords')
|
router.register('save-coords', views.SaveCoordsViewSet, basename='save_coords')
|
||||||
|
|
||||||
urlpatterns = router.urls
|
urlpatterns = router.urls
|
||||||
@@ -4,7 +4,7 @@ from rest_framework.response import Response
|
|||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from rest_framework.routers import APIRootView
|
from rest_framework.routers import APIRootView
|
||||||
|
|
||||||
from .serializers import PreDeviceRoleSerializer, TopologyDummySerializer, PreTagSerializer
|
from .serializers import TopologyDummySerializer
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from dcim.models import DeviceRole, Device, Cable
|
from dcim.models import DeviceRole, Device, Cable
|
||||||
@@ -25,13 +25,6 @@ class TopologyViewsRootView(APIRootView):
|
|||||||
def get_view_name(self):
|
def get_view_name(self):
|
||||||
return 'TopologyViews'
|
return 'TopologyViews'
|
||||||
|
|
||||||
class PreSelectDeviceRolesViewSet(ReadOnlyModelViewSet):
|
|
||||||
queryset = DeviceRole.objects.filter(name__in=preselected_device_roles)
|
|
||||||
serializer_class = PreDeviceRoleSerializer
|
|
||||||
|
|
||||||
class PreSelectTagsViewSet(ReadOnlyModelViewSet):
|
|
||||||
queryset = Tag.objects.filter(name__in=preselected_tags)
|
|
||||||
serializer_class = PreTagSerializer
|
|
||||||
|
|
||||||
class SaveCoordsViewSet(ReadOnlyModelViewSet):
|
class SaveCoordsViewSet(ReadOnlyModelViewSet):
|
||||||
queryset = Device.objects.all()
|
queryset = Device.objects.all()
|
||||||
@@ -74,200 +67,3 @@ class SaveCoordsViewSet(ReadOnlyModelViewSet):
|
|||||||
results["status"] = "not allowed to save coords"
|
results["status"] = "not allowed to save coords"
|
||||||
return Response(results, status=500)
|
return Response(results, status=500)
|
||||||
|
|
||||||
class SearchViewSet(ReadOnlyModelViewSet):
|
|
||||||
queryset = Device.objects.all()
|
|
||||||
serializer_class = TopologyDummySerializer
|
|
||||||
|
|
||||||
def _filter(self, site, role, name, tags, region, location):
|
|
||||||
filter_devices = Device.objects.all()
|
|
||||||
if name is not None:
|
|
||||||
filter_devices = filter_devices.filter(name__contains=name)
|
|
||||||
if site is not None:
|
|
||||||
filter_devices = filter_devices.filter(site__id__in=site)
|
|
||||||
if role is not None:
|
|
||||||
filter_devices = filter_devices.filter(device_role__id__in=role)
|
|
||||||
if tags is not None:
|
|
||||||
filter_devices = filter_devices.filter(tags__id__in=tags)
|
|
||||||
if region is not None:
|
|
||||||
filter_devices = filter_devices.filter(site__region__id__in=region)
|
|
||||||
if location is not None:
|
|
||||||
filter_devices = filter_devices.filter(location__id__in=location)
|
|
||||||
return filter_devices
|
|
||||||
|
|
||||||
|
|
||||||
@action(detail=False, methods=['get'])
|
|
||||||
def search(self, request):
|
|
||||||
name = request.query_params.get('name', None)
|
|
||||||
if name == "":
|
|
||||||
name = None
|
|
||||||
|
|
||||||
sites = request.query_params.getlist('sites[]', None)
|
|
||||||
if sites == []:
|
|
||||||
sites = None
|
|
||||||
|
|
||||||
devicerole = request.query_params.getlist('devicerole[]', None)
|
|
||||||
if devicerole == []:
|
|
||||||
devicerole = None
|
|
||||||
|
|
||||||
tags = request.query_params.getlist('tags[]', None)
|
|
||||||
if tags == []:
|
|
||||||
tags = None
|
|
||||||
|
|
||||||
regions = request.query_params.getlist('regions[]', None)
|
|
||||||
if regions == []:
|
|
||||||
regions = None
|
|
||||||
|
|
||||||
locations = request.query_params.getlist('locations[]', None)
|
|
||||||
if locations == []:
|
|
||||||
locations = None
|
|
||||||
|
|
||||||
hide_unconnected = request.query_params.get('hide_unconnected', None)
|
|
||||||
if hide_unconnected == "":
|
|
||||||
hide_unconnected = None
|
|
||||||
|
|
||||||
devices = self._filter(sites, devicerole, name, tags, regions, locations)
|
|
||||||
|
|
||||||
nodes = []
|
|
||||||
edges = []
|
|
||||||
edge_ids = 0
|
|
||||||
cable_ids = []
|
|
||||||
circuit_ids = []
|
|
||||||
for device in devices:
|
|
||||||
cables = device.get_cables()
|
|
||||||
if cables.exists():
|
|
||||||
device_has_connections = True
|
|
||||||
for cable in cables:
|
|
||||||
if cable.termination_a_type.name != "circuit termination" and cable.termination_b_type.name != "circuit termination":
|
|
||||||
if cable.id not in cable_ids:
|
|
||||||
if cable.termination_a_type.name not in ignore_cable_type and cable.termination_b_type.name not in ignore_cable_type:
|
|
||||||
cable_ids.append(cable.id)
|
|
||||||
edge_ids += 1
|
|
||||||
|
|
||||||
cable_a_dev_name = cable.termination_a.device.name
|
|
||||||
if cable_a_dev_name is None:
|
|
||||||
cable_a_dev_name = "device A name unknown"
|
|
||||||
cable_a_name = cable.termination_a.name
|
|
||||||
if cable_a_name is None:
|
|
||||||
cable_a_name = "cable A name unknown"
|
|
||||||
cable_b_dev_name = cable.termination_b.device.name
|
|
||||||
if cable_b_dev_name is None:
|
|
||||||
cable_b_dev_name = "device B name unknown"
|
|
||||||
cable_b_name = cable.termination_b.name
|
|
||||||
if cable_b_name is None:
|
|
||||||
cable_b_name = "cable B name unknown"
|
|
||||||
|
|
||||||
edge = {}
|
|
||||||
edge["id"] = edge_ids
|
|
||||||
edge["from"] = cable.termination_a.device.id
|
|
||||||
edge["to"] = cable.termination_b.device.id
|
|
||||||
edge["title"] = "Cable between <br> " + cable_a_dev_name + " [" + cable_a_name + "]<br>" + cable_b_dev_name + " [" + cable_b_name + "]"
|
|
||||||
if cable.color != "":
|
|
||||||
edge["color"] = "#" + cable.color
|
|
||||||
edges.append(edge)
|
|
||||||
else:
|
|
||||||
if cable.termination_a_type.name == "circuit termination":
|
|
||||||
if settings.PLUGINS_CONFIG["netbox_topology_views"]["enable_circuit_terminations"]:
|
|
||||||
if cable.termination_a.circuit.id not in circuit_ids:
|
|
||||||
circuit_ids.append(cable.termination_a.circuit.id)
|
|
||||||
edge_ids += 1
|
|
||||||
|
|
||||||
cable_b_dev_name = cable.termination_b.device.name
|
|
||||||
if cable_b_dev_name is None:
|
|
||||||
cable_b_dev_name = "device B name unknown"
|
|
||||||
cable_b_name = cable.termination_b.name
|
|
||||||
if cable_b_name is None:
|
|
||||||
cable_b_name = "cable B name unknown"
|
|
||||||
|
|
||||||
edge = {}
|
|
||||||
edge["id"] = edge_ids
|
|
||||||
edge["to"] = cable.termination_b.device.id
|
|
||||||
edge["dashes"] = True
|
|
||||||
title = ""
|
|
||||||
|
|
||||||
title += "Circuit provider: " + cable.termination_a.circuit.provider.name + "<br>"
|
|
||||||
title += "Termination between <br>"
|
|
||||||
title += cable_b_dev_name + " [" + cable_b_name + "]<br>"
|
|
||||||
# To Many if's
|
|
||||||
if cable.termination_a.circuit.termination_a is not None:
|
|
||||||
if cable.termination_a.circuit.termination_a.cable is not None:
|
|
||||||
if cable.termination_a.circuit.termination_a.cable.id != cable.id:
|
|
||||||
if cable.termination_a.circuit.termination_a.cable.termination_b is not None:
|
|
||||||
if cable.termination_a.circuit.termination_a.cable.termination_b.device is not None:
|
|
||||||
edge["from"] = cable.termination_a.circuit.termination_a.cable.termination_b.device.id
|
|
||||||
|
|
||||||
cable_a_dev_name = cable.termination_a.circuit.termination_a.cable.termination_b.device.name
|
|
||||||
if cable_a_dev_name is None:
|
|
||||||
cable_a_dev_name = "device B name unknown"
|
|
||||||
cable_b_name = cable.termination_a.circuit.termination_a.cable.termination_b.name
|
|
||||||
if cable_a_name is None:
|
|
||||||
cable_a_name = "cable B name unknown"
|
|
||||||
title += cable_a_dev_name + " [" + cable_a_name + "]<br>"
|
|
||||||
edge["title"] = title
|
|
||||||
edges.append(edge)
|
|
||||||
# To Many if's
|
|
||||||
if cable.termination_a.circuit.termination_z is not None:
|
|
||||||
if cable.termination_a.circuit.termination_z.cable is not None:
|
|
||||||
if cable.termination_a.circuit.termination_z.cable.id != cable.id:
|
|
||||||
if cable.termination_a.circuit.termination_z.cable.termination_b is not None:
|
|
||||||
if cable.termination_a.circuit.termination_z.cable.termination_b.device is not None:
|
|
||||||
edge["from"] = cable.termination_a.circuit.termination_z.cable.termination_b.device.id
|
|
||||||
|
|
||||||
cable_a_dev_name = cable.termination_a.circuit.termination_z.cable.termination_b.device.name
|
|
||||||
if cable_a_dev_name is None:
|
|
||||||
cable_a_dev_name = "device B name unknown"
|
|
||||||
cable_a_name = cable.termination_a.circuit.termination_z.cable.termination_b.name
|
|
||||||
if cable_a_name is None:
|
|
||||||
cable_a_name = "cable B name unknown"
|
|
||||||
title += cable_a_dev_name + " [" + cable_a_name + "]<br>"
|
|
||||||
edge["title"] = title
|
|
||||||
edges.append(edge)
|
|
||||||
else:
|
|
||||||
device_has_connections = False
|
|
||||||
|
|
||||||
if hide_unconnected == 'false' or (hide_unconnected == 'true' and device_has_connections is True):
|
|
||||||
dev_name = device.name
|
|
||||||
if dev_name is None:
|
|
||||||
dev_name = "device name unknown"
|
|
||||||
|
|
||||||
node_content = ""
|
|
||||||
|
|
||||||
if device.device_type.display_name is not None:
|
|
||||||
node_content += "<tr><th>Type: </th><td>" + device.device_type.display_name + "</td></tr>"
|
|
||||||
if device.device_role.name is not None:
|
|
||||||
node_content += "<tr><th>Role: </th><td>" + device.device_role.name + "</td></tr>"
|
|
||||||
if device.serial != "":
|
|
||||||
node_content += "<tr><th>Serial: </th><td>" + device.serial + "</td></tr>"
|
|
||||||
if device.primary_ip is not None:
|
|
||||||
node_content += "<tr><th>IP Address: </th><td>" + str(device.primary_ip.address) + "</td></tr>"
|
|
||||||
|
|
||||||
dev_title = "<table> %s </table>" % (node_content)
|
|
||||||
|
|
||||||
node = {}
|
|
||||||
node["id"] = device.id
|
|
||||||
node["name"] = dev_name
|
|
||||||
node["label"] = dev_name
|
|
||||||
node["title"] = dev_title
|
|
||||||
node["shape"] = 'image'
|
|
||||||
if device.device_role.slug in settings.PLUGINS_CONFIG["netbox_topology_views"]["device_img"]:
|
|
||||||
node["image"] = '../../static/netbox_topology_views/img/' + device.device_role.slug + ".png"
|
|
||||||
else:
|
|
||||||
node["image"] = "../../static/netbox_topology_views/img/role-unknown.png"
|
|
||||||
|
|
||||||
if device.device_role.color != "":
|
|
||||||
node["color.border"] = "#" + device.device_role.color
|
|
||||||
|
|
||||||
if "coordinates" in device.custom_field_data:
|
|
||||||
if device.custom_field_data["coordinates"] != "":
|
|
||||||
cords = device.custom_field_data["coordinates"].split(";")
|
|
||||||
node["x"] = int(cords[0])
|
|
||||||
node["y"] = int(cords[1])
|
|
||||||
node["physics"] = False
|
|
||||||
|
|
||||||
nodes.append(node)
|
|
||||||
|
|
||||||
results = {}
|
|
||||||
results["nodes"] = nodes
|
|
||||||
results["edges"] = edges
|
|
||||||
|
|
||||||
return Response(results)
|
|
||||||
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
var graph = null;
|
|
||||||
var container = null;
|
|
||||||
|
|
||||||
function iniPlotboxFull() {
|
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
|
||||||
container = document.getElementById('fullvisgraph');
|
|
||||||
startRender();
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
function startRender() {
|
|
||||||
var url = location.search;
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
type: "GET",
|
|
||||||
url: "../../api/plugins/topology-views/search/search/" + url,
|
|
||||||
contentType: "application/json; charset=utf-8",
|
|
||||||
success: function (data_result, status, xhr) {
|
|
||||||
graph = null;
|
|
||||||
nodes = new vis.DataSet();
|
|
||||||
edges = new vis.DataSet();
|
|
||||||
graph = new vis.Network(container, { nodes: nodes, edges: edges }, options);
|
|
||||||
$.each(data_result["nodes"], function (index, device) {
|
|
||||||
nodes.add(device);
|
|
||||||
});
|
|
||||||
$.each(data_result["edges"], function (index, edge) {
|
|
||||||
edges.add(edge);
|
|
||||||
});
|
|
||||||
graph.fit();
|
|
||||||
canvas = document.getElementById('fullvisgraph').getElementsByTagName('canvas')[0];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
{% load static %}
|
|
||||||
{% load helpers %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
{% with config=settings.PLUGINS_CONFIG.netbox_topology_views %}
|
|
||||||
<link rel="stylesheet" href="{% static 'netbox_topology_views/css/vendor.css' %}">
|
|
||||||
<link rel="stylesheet" href="{% static 'netbox_topology_views/css/app.css' %}">
|
|
||||||
|
|
||||||
|
|
||||||
<div class="panel-body">
|
|
||||||
<div id="fullvisgraph" class=""></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
{% endwith %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block javascript %}
|
|
||||||
<script src="{% static 'jquery/jquery-3.5.1.min.js' %}"></script>
|
|
||||||
<script src="{% static 'netbox_topology_views/js/vendor.js' %}"></script>
|
|
||||||
<script src="{% static 'netbox_topology_views/js/app.js' %}"></script>
|
|
||||||
|
|
||||||
<script type="application/javascript"> iniPlotboxFull()</script>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -20,10 +20,6 @@
|
|||||||
<i class="mdi mdi-download"></i>
|
<i class="mdi mdi-download"></i>
|
||||||
Download
|
Download
|
||||||
</a>
|
</a>
|
||||||
<a id="btnFullView" class="btn btn-sm btn-info disabled" target="_blank">
|
|
||||||
<i class="mdi mdi-share"></i>
|
|
||||||
Share
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock controls %}
|
{% endblock controls %}
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ def get_topology_data(queryset, hide_unconnected):
|
|||||||
if not queryset:
|
if not queryset:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
ignore_cable_type = settings.PLUGINS_CONFIG["netbox_topology_views"]["ignore_cable_type"]
|
||||||
|
|
||||||
device_ids = [d.id for d in queryset]
|
device_ids = [d.id for d in queryset]
|
||||||
|
|
||||||
for qs_device in queryset:
|
for qs_device in queryset:
|
||||||
@@ -33,35 +35,36 @@ def get_topology_data(queryset, hide_unconnected):
|
|||||||
links_device = Cable.objects.filter(Q(_termination_a_device_id=qs_device.id) | Q(_termination_b_device_id=qs_device.id) )
|
links_device = Cable.objects.filter(Q(_termination_a_device_id=qs_device.id) | Q(_termination_b_device_id=qs_device.id) )
|
||||||
for link_from in links_device:
|
for link_from in links_device:
|
||||||
if link_from.termination_a_type.name != "circuit termination" and link_from.termination_b_type.name != "circuit termination":
|
if link_from.termination_a_type.name != "circuit termination" and link_from.termination_b_type.name != "circuit termination":
|
||||||
if link_from.id not in cable_ids:
|
if link_from.termination_a_type.name not in ignore_cable_type and link_from.termination_b_type.name not in ignore_cable_type:
|
||||||
if link_from.termination_a.device.id in device_ids and link_from.termination_b.device.id in device_ids:
|
if link_from.id not in cable_ids:
|
||||||
device_has_connections = True
|
if link_from.termination_a.device.id in device_ids and link_from.termination_b.device.id in device_ids:
|
||||||
cable_ids.append(link_from.id)
|
device_has_connections = True
|
||||||
edge_ids += 1
|
cable_ids.append(link_from.id)
|
||||||
cable_a_dev_name = link_from.termination_a.device.name
|
edge_ids += 1
|
||||||
if cable_a_dev_name is None:
|
cable_a_dev_name = link_from.termination_a.device.name
|
||||||
cable_a_dev_name = "device A name unknown"
|
if cable_a_dev_name is None:
|
||||||
cable_a_name = link_from.termination_a.name
|
cable_a_dev_name = "device A name unknown"
|
||||||
if cable_a_name is None:
|
cable_a_name = link_from.termination_a.name
|
||||||
cable_a_name = "cable A name unknown"
|
if cable_a_name is None:
|
||||||
cable_b_dev_name = link_from.termination_b.device.name
|
cable_a_name = "cable A name unknown"
|
||||||
if cable_b_dev_name is None:
|
cable_b_dev_name = link_from.termination_b.device.name
|
||||||
cable_b_dev_name = "device B name unknown"
|
if cable_b_dev_name is None:
|
||||||
cable_b_name = link_from.termination_b.name
|
cable_b_dev_name = "device B name unknown"
|
||||||
if cable_b_name is None:
|
cable_b_name = link_from.termination_b.name
|
||||||
cable_b_name = "cable B name unknown"
|
if cable_b_name is None:
|
||||||
|
cable_b_name = "cable B name unknown"
|
||||||
|
|
||||||
edge = {}
|
edge = {}
|
||||||
edge["id"] = edge_ids
|
edge["id"] = edge_ids
|
||||||
edge["from"] = link_from.termination_a.device.id
|
edge["from"] = link_from.termination_a.device.id
|
||||||
edge["to"] = link_from.termination_b.device.id
|
edge["to"] = link_from.termination_b.device.id
|
||||||
edge["title"] = "Cable between <br> " + cable_a_dev_name + " [" + cable_a_name + "]<br>" + cable_b_dev_name + " [" + cable_b_name + "]"
|
edge["title"] = "Cable between <br> " + cable_a_dev_name + " [" + cable_a_name + "]<br>" + cable_b_dev_name + " [" + cable_b_name + "]"
|
||||||
if link_from.color != "":
|
if link_from.color != "":
|
||||||
edge["color"] = "#" + link_from.color
|
edge["color"] = "#" + link_from.color
|
||||||
edges.append(edge)
|
edges.append(edge)
|
||||||
else:
|
else:
|
||||||
if link_from.termination_a.device.id in device_ids and link_from.termination_b.device.id in device_ids:
|
if link_from.termination_a.device.id in device_ids and link_from.termination_b.device.id in device_ids:
|
||||||
device_has_connections = True
|
device_has_connections = True
|
||||||
else:
|
else:
|
||||||
if settings.PLUGINS_CONFIG["netbox_topology_views"]["enable_circuit_terminations"]:
|
if settings.PLUGINS_CONFIG["netbox_topology_views"]["enable_circuit_terminations"]:
|
||||||
if link_from.termination_a.circuit.id not in circuit_ids:
|
if link_from.termination_a.circuit.id not in circuit_ids:
|
||||||
|
|||||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "netbox_topology_views",
|
"name": "netbox_topology_views",
|
||||||
"version": "1.0.0-alpha.2",
|
"version": "1.0.0-alpha.3",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"name": "netbox_topology_views",
|
"name": "netbox_topology_views",
|
||||||
"version": "1.0.0-alpha.2",
|
"version": "1.0.0-alpha.3",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"resources": "gulp build",
|
"resources": "gulp build",
|
||||||
"resources_dev": "gulp build_dev"
|
"resources_dev": "gulp build_dev"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='netbox-topology-views',
|
name='netbox-topology-views',
|
||||||
version='1.0.0-alpha.2',
|
version='1.0.0-alpha.3',
|
||||||
description='An NetBox plugin to create Topology maps',
|
description='An NetBox plugin to create Topology maps',
|
||||||
url='https://github.com/mattieserver/netbox-topology-views',
|
url='https://github.com/mattieserver/netbox-topology-views',
|
||||||
author='Mattijs Vanhaverbeke',
|
author='Mattijs Vanhaverbeke',
|
||||||
|
|||||||
Reference in New Issue
Block a user