ipfabric_netbox 4.3.0b5__py3-none-any.whl → 4.3.0b7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ipfabric_netbox might be problematic. Click here for more details.
- ipfabric_netbox/__init__.py +1 -1
- ipfabric_netbox/api/serializers.py +5 -0
- ipfabric_netbox/api/views.py +47 -0
- ipfabric_netbox/choices.py +2 -2
- ipfabric_netbox/forms.py +137 -4
- ipfabric_netbox/models.py +6 -1
- ipfabric_netbox/tables.py +2 -0
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsync.html +1 -1
- ipfabric_netbox/tests/api/test_api.py +149 -22
- ipfabric_netbox/tests/test_views.py +214 -158
- ipfabric_netbox/urls.py +24 -108
- ipfabric_netbox/views.py +293 -132
- {ipfabric_netbox-4.3.0b5.dist-info → ipfabric_netbox-4.3.0b7.dist-info}/METADATA +1 -1
- {ipfabric_netbox-4.3.0b5.dist-info → ipfabric_netbox-4.3.0b7.dist-info}/RECORD +15 -15
- {ipfabric_netbox-4.3.0b5.dist-info → ipfabric_netbox-4.3.0b7.dist-info}/WHEEL +0 -0
ipfabric_netbox/views.py
CHANGED
|
@@ -17,6 +17,11 @@ from django.views.generic import View
|
|
|
17
17
|
from django_tables2 import RequestConfig
|
|
18
18
|
from ipfabric.diagrams import Network
|
|
19
19
|
from ipfabric.diagrams import NetworkSettings
|
|
20
|
+
from netbox.object_actions import AddObject
|
|
21
|
+
from netbox.object_actions import BulkDelete
|
|
22
|
+
from netbox.object_actions import BulkEdit
|
|
23
|
+
from netbox.object_actions import BulkExport
|
|
24
|
+
from netbox.object_actions import BulkRename
|
|
20
25
|
from netbox.views import generic
|
|
21
26
|
from netbox.views.generic.base import BaseObjectView
|
|
22
27
|
from netbox_branching.models import ChangeDiff
|
|
@@ -44,13 +49,19 @@ from .forms import IPFabricIngestionFilterForm
|
|
|
44
49
|
from .forms import IPFabricIngestionMergeForm
|
|
45
50
|
from .forms import IPFabricRelationshipFieldForm
|
|
46
51
|
from .forms import IPFabricSnapshotFilterForm
|
|
52
|
+
from .forms import IPFabricSourceBulkEditForm
|
|
47
53
|
from .forms import IPFabricSourceFilterForm
|
|
48
54
|
from .forms import IPFabricSourceForm
|
|
55
|
+
from .forms import IPFabricSyncBulkEditForm
|
|
49
56
|
from .forms import IPFabricSyncForm
|
|
50
57
|
from .forms import IPFabricTableForm
|
|
51
58
|
from .forms import IPFabricTransformFieldForm
|
|
59
|
+
from .forms import IPFabricTransformMapBulkEditForm
|
|
60
|
+
from .forms import IPFabricTransformMapBulkImportForm
|
|
52
61
|
from .forms import IPFabricTransformMapCloneForm
|
|
53
62
|
from .forms import IPFabricTransformMapForm
|
|
63
|
+
from .forms import IPFabricTransformMapGroupBulkEditForm
|
|
64
|
+
from .forms import IPFabricTransformMapGroupBulkImportForm
|
|
54
65
|
from .forms import IPFabricTransformMapGroupForm
|
|
55
66
|
from .models import IPFabricData
|
|
56
67
|
from .models import IPFabricIngestion
|
|
@@ -79,9 +90,10 @@ from .utilities.transform_map import build_transform_maps
|
|
|
79
90
|
from .utilities.transform_map import get_transform_map
|
|
80
91
|
|
|
81
92
|
|
|
82
|
-
# Transform Map Relationship Field
|
|
93
|
+
# region - Transform Map Relationship Field
|
|
83
94
|
|
|
84
95
|
|
|
96
|
+
@register_model_view(IPFabricRelationshipField, "add", detail=False)
|
|
85
97
|
@register_model_view(IPFabricRelationshipField, "edit")
|
|
86
98
|
class IPFabricRelationshipFieldEditView(generic.ObjectEditView):
|
|
87
99
|
queryset = IPFabricRelationshipField.objects.all()
|
|
@@ -89,37 +101,33 @@ class IPFabricRelationshipFieldEditView(generic.ObjectEditView):
|
|
|
89
101
|
default_return_url = "plugins:ipfabric_netbox:ipfabricrelationshipfield_list"
|
|
90
102
|
|
|
91
103
|
|
|
104
|
+
@register_model_view(IPFabricRelationshipField, "delete")
|
|
92
105
|
class IPFabricRelationshipFieldDeleteView(generic.ObjectDeleteView):
|
|
93
106
|
queryset = IPFabricRelationshipField.objects.all()
|
|
94
107
|
default_return_url = "plugins:ipfabric_netbox:ipfabricrelationshipfield_list"
|
|
95
108
|
|
|
96
109
|
|
|
97
|
-
@register_model_view(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
110
|
+
@register_model_view(
|
|
111
|
+
IPFabricRelationshipField, "bulk_delete", path="delete", detail=False
|
|
112
|
+
)
|
|
113
|
+
class IPFabricRelationshipFieldBulkDeleteView(generic.BulkDeleteView):
|
|
114
|
+
queryset = IPFabricRelationshipField.objects.all()
|
|
101
115
|
table = IPFabricRelationshipFieldTable
|
|
102
|
-
template_name = "ipfabric_netbox/inc/transform_map_relationship_map.html"
|
|
103
|
-
tab = ViewTab(
|
|
104
|
-
label="Relationship Maps",
|
|
105
|
-
badge=lambda obj: IPFabricRelationshipField.objects.filter(
|
|
106
|
-
transform_map=obj
|
|
107
|
-
).count(),
|
|
108
|
-
permission="ipfabric_netbox.view_ipfabricrelationshipfield",
|
|
109
|
-
)
|
|
110
|
-
|
|
111
|
-
def get_children(self, request, parent):
|
|
112
|
-
return self.child_model.objects.filter(transform_map=parent)
|
|
113
116
|
|
|
114
117
|
|
|
118
|
+
# This list is not linked in navigation, but it's needed for tests
|
|
119
|
+
@register_model_view(IPFabricRelationshipField, "list", path="", detail=False)
|
|
115
120
|
class IPFabricRelationshipFieldListView(generic.ObjectListView):
|
|
116
121
|
queryset = IPFabricRelationshipField.objects.all()
|
|
117
122
|
table = IPFabricRelationshipFieldTable
|
|
123
|
+
actions = ()
|
|
118
124
|
|
|
119
125
|
|
|
120
|
-
#
|
|
126
|
+
# endregion
|
|
127
|
+
# region - Transform Map Group
|
|
121
128
|
|
|
122
129
|
|
|
130
|
+
@register_model_view(IPFabricTransformMapGroup, "list", path="", detail=False)
|
|
123
131
|
class IPFabricTransformMapGroupListView(generic.ObjectListView):
|
|
124
132
|
queryset = IPFabricTransformMapGroup.objects.annotate(
|
|
125
133
|
maps_count=models.Count("transform_maps")
|
|
@@ -128,6 +136,7 @@ class IPFabricTransformMapGroupListView(generic.ObjectListView):
|
|
|
128
136
|
filterset = IPFabricTransformMapGroupFilterSet
|
|
129
137
|
|
|
130
138
|
|
|
139
|
+
@register_model_view(IPFabricTransformMapGroup, "add", detail=False)
|
|
131
140
|
@register_model_view(IPFabricTransformMapGroup, "edit")
|
|
132
141
|
class IPFabricTransformMapGroupEditView(generic.ObjectEditView):
|
|
133
142
|
queryset = IPFabricTransformMapGroup.objects.all()
|
|
@@ -135,11 +144,37 @@ class IPFabricTransformMapGroupEditView(generic.ObjectEditView):
|
|
|
135
144
|
default_return_url = "plugins:ipfabric_netbox:ipfabrictransformmapgroup_list"
|
|
136
145
|
|
|
137
146
|
|
|
147
|
+
@register_model_view(IPFabricTransformMapGroup, "delete")
|
|
138
148
|
class IPFabricTransformMapGroupDeleteView(generic.ObjectDeleteView):
|
|
139
149
|
queryset = IPFabricTransformMapGroup.objects.all()
|
|
140
150
|
default_return_url = "plugins:ipfabric_netbox:ipfabrictransformmapgroup_list"
|
|
141
151
|
|
|
142
152
|
|
|
153
|
+
@register_model_view(
|
|
154
|
+
IPFabricTransformMapGroup, "bulk_import", path="import", detail=False
|
|
155
|
+
)
|
|
156
|
+
class IPFabricTransformMapGroupBulkImportView(generic.BulkImportView):
|
|
157
|
+
queryset = IPFabricTransformMapGroup.objects.all()
|
|
158
|
+
model_form = IPFabricTransformMapGroupBulkImportForm
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@register_model_view(IPFabricTransformMapGroup, "bulk_edit", path="edit", detail=False)
|
|
162
|
+
class IPFabricTransformMapGroupBulkEditView(generic.BulkEditView):
|
|
163
|
+
queryset = IPFabricTransformMapGroup.objects.all()
|
|
164
|
+
table = IPFabricTransformMapGroupTable
|
|
165
|
+
form = IPFabricTransformMapGroupBulkEditForm
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
@register_model_view(
|
|
169
|
+
IPFabricTransformMapGroup, "bulk_rename", path="rename", detail=False
|
|
170
|
+
)
|
|
171
|
+
class IPFabricTransformMapGroupBulkRenameView(generic.BulkRenameView):
|
|
172
|
+
queryset = IPFabricTransformMapGroup.objects.all()
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
@register_model_view(
|
|
176
|
+
IPFabricTransformMapGroup, "bulk_delete", path="delete", detail=False
|
|
177
|
+
)
|
|
143
178
|
class IPFabricTransformMapGroupBulkDeleteView(generic.BulkDeleteView):
|
|
144
179
|
queryset = IPFabricTransformMapGroup.objects.all()
|
|
145
180
|
table = IPFabricTransformMapGroupTable
|
|
@@ -155,9 +190,11 @@ class IPFabricTransformMapGroupView(GetRelatedModelsMixin, generic.ObjectView):
|
|
|
155
190
|
}
|
|
156
191
|
|
|
157
192
|
|
|
158
|
-
#
|
|
193
|
+
# endregion
|
|
194
|
+
# region - Transform Map
|
|
159
195
|
|
|
160
196
|
|
|
197
|
+
@register_model_view(IPFabricTransformMap, "list", path="", detail=False)
|
|
161
198
|
class IPFabricTransformMapListView(generic.ObjectListView):
|
|
162
199
|
queryset = IPFabricTransformMap.objects.all()
|
|
163
200
|
table = IPFabricTransformMapTable
|
|
@@ -165,6 +202,50 @@ class IPFabricTransformMapListView(generic.ObjectListView):
|
|
|
165
202
|
filterset = IPFabricTransformMapFilterSet
|
|
166
203
|
|
|
167
204
|
|
|
205
|
+
@register_model_view(IPFabricTransformMap, "add", detail=False)
|
|
206
|
+
@register_model_view(IPFabricTransformMap, "edit")
|
|
207
|
+
class IPFabricTransformMapEditView(generic.ObjectEditView):
|
|
208
|
+
queryset = IPFabricTransformMap.objects.all()
|
|
209
|
+
form = IPFabricTransformMapForm
|
|
210
|
+
default_return_url = "plugins:ipfabric_netbox:ipfabrictransformmap_list"
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
@register_model_view(IPFabricTransformMap, "delete")
|
|
214
|
+
class IPFabricTransformMapDeleteView(generic.ObjectDeleteView):
|
|
215
|
+
queryset = IPFabricTransformMap.objects.all()
|
|
216
|
+
default_return_url = "plugins:ipfabric_netbox:ipfabrictransformmap_list"
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
@register_model_view(IPFabricTransformMap, "bulk_import", path="import", detail=False)
|
|
220
|
+
class IPFabricTransformMapBulkImportView(generic.BulkImportView):
|
|
221
|
+
queryset = IPFabricTransformMap.objects.all()
|
|
222
|
+
model_form = IPFabricTransformMapBulkImportForm
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
@register_model_view(IPFabricTransformMap, "bulk_edit", path="edit", detail=False)
|
|
226
|
+
class IPFabricTransformMapBulkEditView(generic.BulkEditView):
|
|
227
|
+
queryset = IPFabricTransformMap.objects.all()
|
|
228
|
+
table = IPFabricTransformMapTable
|
|
229
|
+
form = IPFabricTransformMapBulkEditForm
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
@register_model_view(IPFabricTransformMap, "bulk_rename", path="rename", detail=False)
|
|
233
|
+
class IPFabricTransformMapBulkRenameView(generic.BulkRenameView):
|
|
234
|
+
queryset = IPFabricTransformMap.objects.all()
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
@register_model_view(IPFabricTransformMap, "bulk_delete", path="delete", detail=False)
|
|
238
|
+
class IPFabricTransformMapBulkDeleteView(generic.BulkDeleteView):
|
|
239
|
+
queryset = IPFabricTransformMap.objects.all()
|
|
240
|
+
table = IPFabricTransformMapTable
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
@register_model_view(IPFabricTransformMap)
|
|
244
|
+
class IPFabricTransformMapView(generic.ObjectView):
|
|
245
|
+
queryset = IPFabricTransformMap.objects.all()
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
@register_model_view(IPFabricTransformMap, "restore", detail=False)
|
|
168
249
|
class IPFabricTransformMapRestoreView(generic.ObjectListView):
|
|
169
250
|
queryset = IPFabricTransformMap.objects.all()
|
|
170
251
|
table = IPFabricTransformMapTable
|
|
@@ -205,13 +286,6 @@ class IPFabricTransformMapRestoreView(generic.ObjectListView):
|
|
|
205
286
|
return redirect("plugins:ipfabric_netbox:ipfabrictransformmap_list")
|
|
206
287
|
|
|
207
288
|
|
|
208
|
-
@register_model_view(IPFabricTransformMap, "edit")
|
|
209
|
-
class IPFabricTransformMapEditView(generic.ObjectEditView):
|
|
210
|
-
queryset = IPFabricTransformMap.objects.all()
|
|
211
|
-
form = IPFabricTransformMapForm
|
|
212
|
-
default_return_url = "plugins:ipfabric_netbox:ipfabrictransformmap_list"
|
|
213
|
-
|
|
214
|
-
|
|
215
289
|
@register_model_view(IPFabricTransformMap, "clone")
|
|
216
290
|
class IPFabricTransformMapCloneView(BaseObjectView):
|
|
217
291
|
queryset = IPFabricTransformMap.objects.all()
|
|
@@ -329,65 +403,85 @@ class IPFabricTransformMapCloneView(BaseObjectView):
|
|
|
329
403
|
)
|
|
330
404
|
|
|
331
405
|
|
|
332
|
-
|
|
406
|
+
@register_model_view(IPFabricTransformMap, "fields")
|
|
407
|
+
class IPFabricTransformFieldView(generic.ObjectChildrenView):
|
|
333
408
|
queryset = IPFabricTransformMap.objects.all()
|
|
334
|
-
|
|
335
|
-
|
|
409
|
+
child_model = IPFabricTransformField
|
|
410
|
+
table = IPFabricTransformFieldTable
|
|
411
|
+
template_name = "ipfabric_netbox/inc/transform_map_field_map.html"
|
|
412
|
+
actions = (AddObject, BulkDelete)
|
|
413
|
+
tab = ViewTab(
|
|
414
|
+
label="Field Maps",
|
|
415
|
+
badge=lambda obj: IPFabricTransformField.objects.filter(
|
|
416
|
+
transform_map=obj
|
|
417
|
+
).count(),
|
|
418
|
+
permission="ipfabric_netbox.view_ipfabrictransformfield",
|
|
419
|
+
)
|
|
336
420
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
table = IPFabricTransformMapTable
|
|
421
|
+
def get_children(self, request, parent):
|
|
422
|
+
return self.child_model.objects.filter(transform_map=parent)
|
|
340
423
|
|
|
341
424
|
|
|
342
|
-
@register_model_view(IPFabricTransformMap)
|
|
343
|
-
class
|
|
425
|
+
@register_model_view(IPFabricTransformMap, "relationships")
|
|
426
|
+
class IPFabricTransformRelationshipView(generic.ObjectChildrenView):
|
|
344
427
|
queryset = IPFabricTransformMap.objects.all()
|
|
428
|
+
child_model = IPFabricRelationshipField
|
|
429
|
+
table = IPFabricRelationshipFieldTable
|
|
430
|
+
template_name = "ipfabric_netbox/inc/transform_map_relationship_map.html"
|
|
431
|
+
actions = (AddObject, BulkDelete)
|
|
432
|
+
tab = ViewTab(
|
|
433
|
+
label="Relationship Maps",
|
|
434
|
+
badge=lambda obj: IPFabricRelationshipField.objects.filter(
|
|
435
|
+
transform_map=obj
|
|
436
|
+
).count(),
|
|
437
|
+
permission="ipfabric_netbox.view_ipfabricrelationshipfield",
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
def get_children(self, request, parent):
|
|
441
|
+
return self.child_model.objects.filter(transform_map=parent)
|
|
345
442
|
|
|
346
443
|
|
|
347
|
-
#
|
|
444
|
+
# endregion
|
|
445
|
+
# region - Transform Map Field
|
|
348
446
|
|
|
349
447
|
|
|
448
|
+
# This list is not linked in navigation, but it's needed for tests
|
|
449
|
+
@register_model_view(IPFabricTransformField, "list", path="", detail=False)
|
|
350
450
|
class IPFabricTransformFieldListView(generic.ObjectListView):
|
|
351
451
|
queryset = IPFabricTransformField.objects.all()
|
|
352
452
|
table = IPFabricTransformFieldTable
|
|
453
|
+
actions = ()
|
|
353
454
|
|
|
354
455
|
|
|
456
|
+
@register_model_view(IPFabricTransformField, "add", detail=False)
|
|
355
457
|
@register_model_view(IPFabricTransformField, "edit")
|
|
356
458
|
class IPFabricTransformFieldEditView(generic.ObjectEditView):
|
|
357
459
|
queryset = IPFabricTransformField.objects.all()
|
|
358
460
|
form = IPFabricTransformFieldForm
|
|
359
461
|
|
|
360
462
|
|
|
463
|
+
@register_model_view(IPFabricTransformField, "delete")
|
|
361
464
|
class IPFabricTransformFieldDeleteView(generic.ObjectDeleteView):
|
|
362
465
|
queryset = IPFabricTransformField.objects.all()
|
|
363
466
|
|
|
364
467
|
|
|
365
|
-
@register_model_view(
|
|
366
|
-
class
|
|
367
|
-
queryset =
|
|
368
|
-
child_model = IPFabricTransformField
|
|
468
|
+
@register_model_view(IPFabricTransformField, "bulk_delete", path="delete", detail=False)
|
|
469
|
+
class IPFabricTransformFieldBulkDeleteView(generic.BulkDeleteView):
|
|
470
|
+
queryset = IPFabricTransformField.objects.all()
|
|
369
471
|
table = IPFabricTransformFieldTable
|
|
370
|
-
template_name = "ipfabric_netbox/inc/transform_map_field_map.html"
|
|
371
|
-
tab = ViewTab(
|
|
372
|
-
label="Field Maps",
|
|
373
|
-
badge=lambda obj: IPFabricTransformField.objects.filter(
|
|
374
|
-
transform_map=obj
|
|
375
|
-
).count(),
|
|
376
|
-
permission="ipfabric_netbox.view_ipfabrictransformfield",
|
|
377
|
-
)
|
|
378
|
-
|
|
379
|
-
def get_children(self, request, parent):
|
|
380
|
-
return self.child_model.objects.filter(transform_map=parent)
|
|
381
472
|
|
|
382
473
|
|
|
383
|
-
#
|
|
474
|
+
# endregion
|
|
475
|
+
# region - Snapshot
|
|
384
476
|
|
|
385
477
|
|
|
478
|
+
@register_model_view(IPFabricSnapshot, "list", path="", detail=False)
|
|
386
479
|
class IPFabricSnapshotListView(generic.ObjectListView):
|
|
387
480
|
queryset = IPFabricSnapshot.objects.all()
|
|
388
481
|
table = IPFabricSnapshotTable
|
|
389
482
|
filterset = IPFabricSnapshotFilterSet
|
|
390
483
|
filterset_form = IPFabricSnapshotFilterForm
|
|
484
|
+
actions = (BulkExport, BulkDelete)
|
|
391
485
|
|
|
392
486
|
|
|
393
487
|
@register_model_view(IPFabricSnapshot)
|
|
@@ -395,10 +489,12 @@ class IPFabricSnapshotView(generic.ObjectView):
|
|
|
395
489
|
queryset = IPFabricSnapshot.objects.all()
|
|
396
490
|
|
|
397
491
|
|
|
492
|
+
@register_model_view(IPFabricSnapshot, "delete")
|
|
398
493
|
class IPFabricSnapshotDeleteView(generic.ObjectDeleteView):
|
|
399
494
|
queryset = IPFabricSnapshot.objects.all()
|
|
400
495
|
|
|
401
496
|
|
|
497
|
+
@register_model_view(IPFabricSnapshot, "bulk_delete", path="delete", detail=False)
|
|
402
498
|
class IPFabricSnapshotBulkDeleteView(generic.BulkDeleteView):
|
|
403
499
|
queryset = IPFabricSnapshot.objects.all()
|
|
404
500
|
filterset = IPFabricSnapshotFilterSet
|
|
@@ -422,10 +518,16 @@ class IPFabricSnapshotRawView(generic.ObjectChildrenView):
|
|
|
422
518
|
return self.child_model.objects.filter(snapshot_data=parent)
|
|
423
519
|
|
|
424
520
|
|
|
521
|
+
# endregion
|
|
522
|
+
# region - Snapshot Data
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
@register_model_view(IPFabricData, "delete")
|
|
425
526
|
class IPFabricSnapshotDataDeleteView(generic.ObjectDeleteView):
|
|
426
527
|
queryset = IPFabricData.objects.all()
|
|
427
528
|
|
|
428
529
|
|
|
530
|
+
@register_model_view(IPFabricData, "bulk_delete", path="delete", detail=False)
|
|
429
531
|
class IPFabricSnapshotDataBulkDeleteView(generic.BulkDeleteView):
|
|
430
532
|
queryset = IPFabricData.objects.all()
|
|
431
533
|
filterset = IPFabricDataFilterSet
|
|
@@ -461,9 +563,11 @@ class IPFabricSnapshotDataJSONView(generic.ObjectView):
|
|
|
461
563
|
)
|
|
462
564
|
|
|
463
565
|
|
|
464
|
-
#
|
|
566
|
+
# endregion
|
|
567
|
+
# region - Source
|
|
465
568
|
|
|
466
569
|
|
|
570
|
+
@register_model_view(IPFabricSource, "list", path="", detail=False)
|
|
467
571
|
class IPFabricSourceListView(generic.ObjectListView):
|
|
468
572
|
queryset = IPFabricSource.objects.annotate(
|
|
469
573
|
snapshot_count=count_related(IPFabricSnapshot, "source")
|
|
@@ -471,8 +575,10 @@ class IPFabricSourceListView(generic.ObjectListView):
|
|
|
471
575
|
filterset = IPFabricSourceFilterSet
|
|
472
576
|
filterset_form = IPFabricSourceFilterForm
|
|
473
577
|
table = IPFabricSourceTable
|
|
578
|
+
actions = (AddObject, BulkExport, BulkEdit, BulkRename, BulkDelete)
|
|
474
579
|
|
|
475
580
|
|
|
581
|
+
@register_model_view(IPFabricSource, "add", detail=False)
|
|
476
582
|
@register_model_view(IPFabricSource, "edit")
|
|
477
583
|
class IPFabricSourceEditView(generic.ObjectEditView):
|
|
478
584
|
queryset = IPFabricSource.objects.all()
|
|
@@ -518,19 +624,115 @@ class IPFabricSourceDeleteView(generic.ObjectDeleteView):
|
|
|
518
624
|
queryset = IPFabricSource.objects.all()
|
|
519
625
|
|
|
520
626
|
|
|
627
|
+
@register_model_view(IPFabricSource, "bulk_edit", path="edit", detail=False)
|
|
628
|
+
class IPFabricSourceBulkEditView(generic.BulkEditView):
|
|
629
|
+
queryset = IPFabricSource.objects.all()
|
|
630
|
+
table = IPFabricSourceTable
|
|
631
|
+
form = IPFabricSourceBulkEditForm
|
|
632
|
+
|
|
633
|
+
|
|
634
|
+
@register_model_view(IPFabricSource, "bulk_rename", path="rename", detail=False)
|
|
635
|
+
class IPFabricSourceBulkRenameView(generic.BulkRenameView):
|
|
636
|
+
queryset = IPFabricSource.objects.all()
|
|
637
|
+
|
|
638
|
+
|
|
639
|
+
@register_model_view(IPFabricSource, "bulk_delete", path="delete", detail=False)
|
|
521
640
|
class IPFabricSourceBulkDeleteView(generic.BulkDeleteView):
|
|
522
641
|
queryset = IPFabricSource.objects.all()
|
|
523
642
|
filterset = IPFabricSourceFilterSet
|
|
524
643
|
table = IPFabricSourceTable
|
|
525
644
|
|
|
526
645
|
|
|
527
|
-
|
|
646
|
+
@register_model_view(
|
|
647
|
+
IPFabricSource,
|
|
648
|
+
name="topology",
|
|
649
|
+
path="topology/<int:site>",
|
|
650
|
+
kwargs={"snapshot": ""},
|
|
651
|
+
)
|
|
652
|
+
class IPFabricSourceTopology(LoginRequiredMixin, View):
|
|
653
|
+
template_name = "ipfabric_netbox/inc/site_topology_modal.html"
|
|
654
|
+
|
|
655
|
+
def get(self, request, pk, site, **kwargs):
|
|
656
|
+
if request.htmx:
|
|
657
|
+
try:
|
|
658
|
+
site = get_object_or_404(Site, pk=site)
|
|
659
|
+
source_id = request.GET.get("source")
|
|
660
|
+
if not source_id:
|
|
661
|
+
raise Exception("Source ID not available in request.")
|
|
662
|
+
source = get_object_or_404(IPFabricSource, pk=source_id)
|
|
663
|
+
snapshot = request.GET.get("snapshot")
|
|
664
|
+
if not snapshot:
|
|
665
|
+
raise Exception("Snapshot ID not available in request.")
|
|
666
|
+
|
|
667
|
+
source.parameters.update(
|
|
668
|
+
{"snapshot_id": snapshot, "base_url": source.url}
|
|
669
|
+
)
|
|
670
|
+
|
|
671
|
+
ipf = IPFabric(parameters=source.parameters)
|
|
672
|
+
snapshot_data = ipf.ipf.snapshots.get(snapshot)
|
|
673
|
+
if not snapshot_data:
|
|
674
|
+
raise Exception(
|
|
675
|
+
f"Snapshot ({snapshot}) not available in IP Fabric." # noqa E713
|
|
676
|
+
)
|
|
677
|
+
|
|
678
|
+
sites = ipf.ipf.inventory.sites.all(
|
|
679
|
+
filters={"siteName": ["eq", site.name]}
|
|
680
|
+
)
|
|
681
|
+
if not sites:
|
|
682
|
+
raise Exception(
|
|
683
|
+
f"{site.name} not available in snapshot ({snapshot})." # noqa E713
|
|
684
|
+
)
|
|
685
|
+
|
|
686
|
+
net = Network(sites=site.name, all_network=False)
|
|
687
|
+
settings = NetworkSettings()
|
|
688
|
+
settings.hide_protocol("xdp")
|
|
689
|
+
settings.hiddenDeviceTypes.extend(["transit", "cloud"])
|
|
690
|
+
|
|
691
|
+
link = ipf.ipf.diagram.share_link(net, graph_settings=settings)
|
|
692
|
+
svg_data = ipf.ipf.diagram.svg(net, graph_settings=settings).decode(
|
|
693
|
+
"utf-8"
|
|
694
|
+
)
|
|
695
|
+
error = None
|
|
696
|
+
except Exception as e:
|
|
697
|
+
error = e
|
|
698
|
+
svg_data = link = snapshot_data = source = None
|
|
699
|
+
|
|
700
|
+
return render(
|
|
701
|
+
request,
|
|
702
|
+
self.template_name,
|
|
703
|
+
{
|
|
704
|
+
"site": site,
|
|
705
|
+
"source": source,
|
|
706
|
+
"svg": svg_data,
|
|
707
|
+
"size": "xl",
|
|
708
|
+
"link": link,
|
|
709
|
+
"time": timezone.now(),
|
|
710
|
+
"snapshot": snapshot_data,
|
|
711
|
+
"error": error,
|
|
712
|
+
},
|
|
713
|
+
)
|
|
714
|
+
return render(
|
|
715
|
+
request,
|
|
716
|
+
self.template_name,
|
|
717
|
+
{
|
|
718
|
+
"site": site,
|
|
719
|
+
"size": "xl",
|
|
720
|
+
"time": timezone.now(),
|
|
721
|
+
},
|
|
722
|
+
)
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
# endregion
|
|
726
|
+
# region - Sync
|
|
727
|
+
@register_model_view(IPFabricSync, "list", path="", detail=False)
|
|
528
728
|
class IPFabricSyncListView(generic.ObjectListView):
|
|
529
729
|
queryset = IPFabricSync.objects.all()
|
|
530
730
|
table = IPFabricSyncTable
|
|
531
731
|
filterset = IPFabricSyncFilterSet
|
|
732
|
+
actions = (AddObject, BulkExport, BulkEdit, BulkRename, BulkDelete)
|
|
532
733
|
|
|
533
734
|
|
|
735
|
+
@register_model_view(IPFabricSync, "add", detail=False)
|
|
534
736
|
@register_model_view(IPFabricSync, "edit")
|
|
535
737
|
class IPFabricSyncEditView(generic.ObjectEditView):
|
|
536
738
|
queryset = IPFabricSync.objects.all()
|
|
@@ -580,7 +782,15 @@ class IPFabricSyncView(generic.ObjectView):
|
|
|
580
782
|
|
|
581
783
|
last_ingestion = instance.ipfabricingestion_set.last()
|
|
582
784
|
|
|
583
|
-
|
|
785
|
+
scheduled_job = None
|
|
786
|
+
if instance.scheduled:
|
|
787
|
+
scheduled_job = instance.jobs.filter(scheduled=instance.scheduled).last()
|
|
788
|
+
|
|
789
|
+
return {
|
|
790
|
+
"format": format,
|
|
791
|
+
"last_ingestion": last_ingestion,
|
|
792
|
+
"scheduled_job": scheduled_job,
|
|
793
|
+
}
|
|
584
794
|
|
|
585
795
|
|
|
586
796
|
@register_model_view(IPFabricSync, "sync")
|
|
@@ -588,7 +798,7 @@ class IPFabricStartSyncView(BaseObjectView):
|
|
|
588
798
|
queryset = IPFabricSync.objects.all()
|
|
589
799
|
|
|
590
800
|
def get_required_permission(self):
|
|
591
|
-
return "ipfabric_netbox.
|
|
801
|
+
return "ipfabric_netbox.sync_ipfabricsync"
|
|
592
802
|
|
|
593
803
|
def get(self, request, pk):
|
|
594
804
|
ipfabric = get_object_or_404(self.queryset, pk=pk)
|
|
@@ -608,6 +818,19 @@ class IPFabricSyncDeleteView(generic.ObjectDeleteView):
|
|
|
608
818
|
default_return_url = "plugins:ipfabric_netbox:ipfabricsync_list"
|
|
609
819
|
|
|
610
820
|
|
|
821
|
+
@register_model_view(IPFabricSync, "bulk_edit", path="edit", detail=False)
|
|
822
|
+
class IPFabricSyncBulkEditView(generic.BulkEditView):
|
|
823
|
+
queryset = IPFabricSync.objects.all()
|
|
824
|
+
table = IPFabricSyncTable
|
|
825
|
+
form = IPFabricSyncBulkEditForm
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
@register_model_view(IPFabricSync, "bulk_rename", path="rename", detail=False)
|
|
829
|
+
class IPFabricSyncBulkRenameView(generic.BulkRenameView):
|
|
830
|
+
queryset = IPFabricSync.objects.all()
|
|
831
|
+
|
|
832
|
+
|
|
833
|
+
@register_model_view(IPFabricSync, "bulk_delete", path="delete", detail=False)
|
|
611
834
|
class IPFabricSyncBulkDeleteView(generic.BulkDeleteView):
|
|
612
835
|
queryset = IPFabricSync.objects.all()
|
|
613
836
|
filterset = IPFabricSnapshotFilterSet
|
|
@@ -620,6 +843,7 @@ class IPFabricTransformMapTabView(generic.ObjectChildrenView):
|
|
|
620
843
|
child_model = IPFabricTransformMap
|
|
621
844
|
table = IPFabricTransformMapTable
|
|
622
845
|
template_name = "generic/object_children.html"
|
|
846
|
+
actions = (AddObject, BulkDelete)
|
|
623
847
|
tab = ViewTab(
|
|
624
848
|
label="Transform Maps",
|
|
625
849
|
badge=lambda obj: obj.get_transform_maps(
|
|
@@ -640,6 +864,7 @@ class IPFabricIngestionTabView(generic.ObjectChildrenView):
|
|
|
640
864
|
child_model = IPFabricIngestion
|
|
641
865
|
table = IPFabricIngestionTable
|
|
642
866
|
filterset = IPFabricIngestionFilterSet
|
|
867
|
+
actions = (AddObject, BulkDelete)
|
|
643
868
|
tab = ViewTab(
|
|
644
869
|
label="Ingestions",
|
|
645
870
|
badge=lambda obj: IPFabricIngestion.objects.filter(sync=obj).count(),
|
|
@@ -654,7 +879,11 @@ class IPFabricIngestionTabView(generic.ObjectChildrenView):
|
|
|
654
879
|
)
|
|
655
880
|
|
|
656
881
|
|
|
657
|
-
#
|
|
882
|
+
# endregion
|
|
883
|
+
# region - Ingestion
|
|
884
|
+
|
|
885
|
+
|
|
886
|
+
@register_model_view(IPFabricIngestion, "list", path="", detail=False)
|
|
658
887
|
class IPFabricIngestionListView(generic.ObjectListView):
|
|
659
888
|
queryset = IPFabricIngestion.objects.annotate(
|
|
660
889
|
description=models.F("branch__description"),
|
|
@@ -664,6 +893,7 @@ class IPFabricIngestionListView(generic.ObjectListView):
|
|
|
664
893
|
filterset = IPFabricIngestionFilterSet
|
|
665
894
|
filterset_form = IPFabricIngestionFilterForm
|
|
666
895
|
table = IPFabricIngestionTable
|
|
896
|
+
actions = (AddObject, BulkExport, BulkDelete)
|
|
667
897
|
|
|
668
898
|
|
|
669
899
|
def annotate_statistics(queryset):
|
|
@@ -868,6 +1098,7 @@ class IPFabricIngestionIssuesView(generic.ObjectChildrenView):
|
|
|
868
1098
|
table = IPFabricIngestionIssuesTable
|
|
869
1099
|
template_name = "generic/object_children.html"
|
|
870
1100
|
filterset = IPFabricIngestionIssueFilterSet
|
|
1101
|
+
actions = (AddObject, BulkDelete)
|
|
871
1102
|
tab = ViewTab(
|
|
872
1103
|
label="Ingestion Issues",
|
|
873
1104
|
badge=lambda obj: IPFabricIngestionIssue.objects.filter(ingestion=obj).count(),
|
|
@@ -883,6 +1114,12 @@ class IPFabricIngestionDeleteView(generic.ObjectDeleteView):
|
|
|
883
1114
|
queryset = IPFabricIngestion.objects.all()
|
|
884
1115
|
|
|
885
1116
|
|
|
1117
|
+
@register_model_view(IPFabricIngestion, "bulk_delete", path="delete", detail=False)
|
|
1118
|
+
class IPFabricIngestionBulkDeleteView(generic.BulkDeleteView):
|
|
1119
|
+
queryset = IPFabricIngestion.objects.all()
|
|
1120
|
+
table = IPFabricIngestionTable
|
|
1121
|
+
|
|
1122
|
+
|
|
886
1123
|
@register_model_view(Device, "ipfabric")
|
|
887
1124
|
class IPFabricTable(generic.ObjectView):
|
|
888
1125
|
template_name = "ipfabric_netbox/ipfabric_table.html"
|
|
@@ -985,80 +1222,4 @@ class IPFabricTable(generic.ObjectView):
|
|
|
985
1222
|
return super().get(request, **kwargs)
|
|
986
1223
|
|
|
987
1224
|
|
|
988
|
-
|
|
989
|
-
IPFabricSource,
|
|
990
|
-
name="topology",
|
|
991
|
-
path="topology/<int:site>",
|
|
992
|
-
kwargs={"snapshot": ""},
|
|
993
|
-
)
|
|
994
|
-
class IPFabricSourceTopology(LoginRequiredMixin, View):
|
|
995
|
-
template_name = "ipfabric_netbox/inc/site_topology_modal.html"
|
|
996
|
-
|
|
997
|
-
def get(self, request, pk, site, **kwargs):
|
|
998
|
-
if request.htmx:
|
|
999
|
-
try:
|
|
1000
|
-
site = get_object_or_404(Site, pk=site)
|
|
1001
|
-
source_id = request.GET.get("source")
|
|
1002
|
-
if not source_id:
|
|
1003
|
-
raise Exception("Source ID not available in request.")
|
|
1004
|
-
source = get_object_or_404(IPFabricSource, pk=source_id)
|
|
1005
|
-
snapshot = request.GET.get("snapshot")
|
|
1006
|
-
if not snapshot:
|
|
1007
|
-
raise Exception("Snapshot ID not available in request.")
|
|
1008
|
-
|
|
1009
|
-
source.parameters.update(
|
|
1010
|
-
{"snapshot_id": snapshot, "base_url": source.url}
|
|
1011
|
-
)
|
|
1012
|
-
|
|
1013
|
-
ipf = IPFabric(parameters=source.parameters)
|
|
1014
|
-
snapshot_data = ipf.ipf.snapshots.get(snapshot)
|
|
1015
|
-
if not snapshot_data:
|
|
1016
|
-
raise Exception(
|
|
1017
|
-
f"Snapshot ({snapshot}) not available in IP Fabric." # noqa E713
|
|
1018
|
-
)
|
|
1019
|
-
|
|
1020
|
-
sites = ipf.ipf.inventory.sites.all(
|
|
1021
|
-
filters={"siteName": ["eq", site.name]}
|
|
1022
|
-
)
|
|
1023
|
-
if not sites:
|
|
1024
|
-
raise Exception(
|
|
1025
|
-
f"{site.name} not available in snapshot ({snapshot})." # noqa E713
|
|
1026
|
-
)
|
|
1027
|
-
|
|
1028
|
-
net = Network(sites=site.name, all_network=False)
|
|
1029
|
-
settings = NetworkSettings()
|
|
1030
|
-
settings.hide_protocol("xdp")
|
|
1031
|
-
settings.hiddenDeviceTypes.extend(["transit", "cloud"])
|
|
1032
|
-
|
|
1033
|
-
link = ipf.ipf.diagram.share_link(net, graph_settings=settings)
|
|
1034
|
-
svg_data = ipf.ipf.diagram.svg(net, graph_settings=settings).decode(
|
|
1035
|
-
"utf-8"
|
|
1036
|
-
)
|
|
1037
|
-
error = None
|
|
1038
|
-
except Exception as e:
|
|
1039
|
-
error = e
|
|
1040
|
-
svg_data = link = snapshot_data = source = None
|
|
1041
|
-
|
|
1042
|
-
return render(
|
|
1043
|
-
request,
|
|
1044
|
-
self.template_name,
|
|
1045
|
-
{
|
|
1046
|
-
"site": site,
|
|
1047
|
-
"source": source,
|
|
1048
|
-
"svg": svg_data,
|
|
1049
|
-
"size": "xl",
|
|
1050
|
-
"link": link,
|
|
1051
|
-
"time": timezone.now(),
|
|
1052
|
-
"snapshot": snapshot_data,
|
|
1053
|
-
"error": error,
|
|
1054
|
-
},
|
|
1055
|
-
)
|
|
1056
|
-
return render(
|
|
1057
|
-
request,
|
|
1058
|
-
self.template_name,
|
|
1059
|
-
{
|
|
1060
|
-
"site": site,
|
|
1061
|
-
"size": "xl",
|
|
1062
|
-
"time": timezone.now(),
|
|
1063
|
-
},
|
|
1064
|
-
)
|
|
1225
|
+
# endregion
|