ipfabric_netbox 4.3.1b1__py3-none-any.whl → 4.3.1b3__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 +4 -2
- ipfabric_netbox/choices.py +56 -20
- ipfabric_netbox/filtersets.py +6 -2
- ipfabric_netbox/forms.py +24 -19
- ipfabric_netbox/graphql/enums.py +10 -3
- ipfabric_netbox/graphql/filters.py +4 -3
- ipfabric_netbox/jobs.py +6 -5
- ipfabric_netbox/models.py +46 -45
- ipfabric_netbox/navigation.py +10 -9
- ipfabric_netbox/tables.py +12 -10
- ipfabric_netbox/templates/ipfabric_netbox/inc/clone_form.html +7 -4
- ipfabric_netbox/templates/ipfabric_netbox/inc/diff.html +10 -8
- ipfabric_netbox/templates/ipfabric_netbox/inc/json.html +4 -2
- ipfabric_netbox/templates/ipfabric_netbox/inc/logs_pending.html +4 -3
- ipfabric_netbox/templates/ipfabric_netbox/inc/merge_form.html +7 -5
- ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_button.html +8 -6
- ipfabric_netbox/templates/ipfabric_netbox/inc/site_topology_modal.html +8 -4
- ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_field_map.html +2 -1
- ipfabric_netbox/templates/ipfabric_netbox/inc/transform_map_relationship_map.html +2 -1
- ipfabric_netbox/templates/ipfabric_netbox/ipfabric_table.html +4 -4
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricingestion.html +12 -11
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsnapshot.html +15 -14
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsource.html +13 -12
- ipfabric_netbox/templates/ipfabric_netbox/ipfabricsync.html +16 -15
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap.html +7 -6
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_list.html +2 -1
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmap_restore.html +1 -1
- ipfabric_netbox/templates/ipfabric_netbox/ipfabrictransformmapgroup.html +4 -3
- ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_progress.html +5 -4
- ipfabric_netbox/templates/ipfabric_netbox/partials/ingestion_statistics.html +5 -4
- ipfabric_netbox/templates/ipfabric_netbox/partials/job_logs.html +10 -9
- ipfabric_netbox/tests/api/test_api.py +6 -5
- ipfabric_netbox/tests/test_forms.py +16 -15
- ipfabric_netbox/tests/test_views.py +24 -23
- ipfabric_netbox/utilities/ipfutils.py +2 -2
- ipfabric_netbox/views.py +8 -7
- {ipfabric_netbox-4.3.1b1.dist-info → ipfabric_netbox-4.3.1b3.dist-info}/METADATA +1 -1
- {ipfabric_netbox-4.3.1b1.dist-info → ipfabric_netbox-4.3.1b3.dist-info}/RECORD +40 -40
- {ipfabric_netbox-4.3.1b1.dist-info → ipfabric_netbox-4.3.1b3.dist-info}/WHEEL +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{% load helpers %}
|
|
2
|
-
|
|
2
|
+
{% load i18n %}
|
|
3
3
|
<div class="modal-body">
|
|
4
|
-
<div class="d-flex flex-row m-2"
|
|
4
|
+
<div class="d-flex flex-row m-2">
|
|
5
5
|
{% if svg %}
|
|
6
6
|
<div class=" d-flex flex-row flex-grow-1 align-items-center">
|
|
7
7
|
{{svg|safe}}
|
|
@@ -9,10 +9,12 @@
|
|
|
9
9
|
<div>
|
|
10
10
|
<div class="position-absolute top-0 end-0 m-2 border rounded p-2">
|
|
11
11
|
<ul class="list-unstyled">
|
|
12
|
+
{% blocktrans %}
|
|
12
13
|
<li><span>Fetched: {{ time|isodatetime }}</span></li>
|
|
13
14
|
<li>Snapshot Name: {{ snapshot.name }}</li>
|
|
14
15
|
<li>Snapshot ID: {{ snapshot.snapshot_id }}</li>
|
|
15
16
|
<li>Snapshot Date: {{ snapshot.end|isodatetime }}</li>
|
|
17
|
+
{% endblocktrans %}
|
|
16
18
|
</ul>
|
|
17
19
|
</div>
|
|
18
20
|
</div>
|
|
@@ -24,10 +26,12 @@
|
|
|
24
26
|
<div>
|
|
25
27
|
<div class="border rounded p-2">
|
|
26
28
|
<ul class="list-unstyled">
|
|
29
|
+
{% blocktrans %}
|
|
27
30
|
<li><span>Fetched: {{ time|isodatetime }}</span></li>
|
|
28
31
|
<li>Snapshot Name: {{ snapshot.name }}</li>
|
|
29
32
|
<li>Snapshot ID: {{ snapshot.snapshot_id }}</li>
|
|
30
33
|
<li>Snapshot Date: {{ snapshot.end|isodatetime }}</li>
|
|
34
|
+
{% endblocktrans %}
|
|
31
35
|
</ul>
|
|
32
36
|
</div>
|
|
33
37
|
</div>
|
|
@@ -40,8 +44,8 @@
|
|
|
40
44
|
<a href="#" hx-get="{% url 'plugins:ipfabric_netbox:ipfabricsource_topology' pk=source.pk site=site.pk %}?snapshot={{ snapshot.snapshot_id }}"
|
|
41
45
|
hx-target="#topology-modal-content" class="btn btn-success" hx-indicator=".my-indicator"><span
|
|
42
46
|
class="spinner-border spinner-border-sm loader my-indicator" role="status" aria-hidden="true"></span>
|
|
43
|
-
Refresh</a>
|
|
44
|
-
<a href="{{ link }}" class="btn btn-primary" target="_blank">Open in IP Fabric</a>
|
|
47
|
+
{% trans "Refresh" %}</a>
|
|
48
|
+
<a href="{{ link }}" class="btn btn-primary" target="_blank">{% trans "Open in IP Fabric" %}</a>
|
|
45
49
|
</div>
|
|
46
50
|
{% endif %}
|
|
47
51
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{% extends 'generic/object_children.html' %}
|
|
2
|
+
{% load i18n %}
|
|
2
3
|
|
|
3
4
|
{% block extra_controls %}
|
|
4
5
|
{% if perms.ipfabric_netbox.add_ipfabrictransformfield %}
|
|
5
6
|
<a href="{% url 'plugins:ipfabric_netbox:ipfabrictransformfield_add' %}?transform_map={{ object.pk }}&return_url={% url 'plugins:ipfabric_netbox:ipfabrictransformmap_fields' pk=object.pk %}"
|
|
6
7
|
class="btn btn-primary">
|
|
7
|
-
<i class="mdi mdi-plus-thick" aria-hidden="true"></i
|
|
8
|
+
<i class="mdi mdi-plus-thick" aria-hidden="true"></i> {% trans "Field Map" %}
|
|
8
9
|
</a>
|
|
9
10
|
{% endif %}
|
|
10
11
|
{{ block.super }}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{% extends 'generic/object_children.html' %}
|
|
2
|
+
{% load i18n %}
|
|
2
3
|
|
|
3
4
|
{% block extra_controls %}
|
|
4
5
|
{% if perms.ipfabric_netbox.add_ipfabricrelationshipfield %}
|
|
5
6
|
<a href="{% url 'plugins:ipfabric_netbox:ipfabricrelationshipfield_add' %}?transform_map={{ object.pk }}&return_url={% url 'plugins:ipfabric_netbox:ipfabrictransformmap_relationships' pk=object.pk %}"
|
|
6
7
|
class="btn btn-primary">
|
|
7
|
-
<i class="mdi mdi-plus-thick" aria-hidden="true"></i
|
|
8
|
+
<i class="mdi mdi-plus-thick" aria-hidden="true"></i> {% trans "Relationship Map" %}
|
|
8
9
|
</a>
|
|
9
10
|
{% endif %}
|
|
10
11
|
{{ block.super }}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<div class="row px-3">
|
|
12
12
|
<div class="card">
|
|
13
13
|
<div class="card-body">
|
|
14
|
-
Device does not have a serial number configured. The serial number is used to match devices between NetBox and IP Fabric.
|
|
14
|
+
{% trans "Device does not have a serial number configured. The serial number is used to match devices between NetBox and IP Fabric." %}
|
|
15
15
|
</div>
|
|
16
16
|
</div>
|
|
17
17
|
</div>
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
<div class="row px-3">
|
|
20
20
|
<div class="card">
|
|
21
21
|
<div class="card-body">
|
|
22
|
-
Device has a remote IP Fabric Source configured and cannot directly query IP Fabric.
|
|
22
|
+
{% trans "Device has a remote IP Fabric Source configured and cannot directly query IP Fabric." %}
|
|
23
23
|
</div>
|
|
24
24
|
</div>
|
|
25
25
|
{% else %}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
{% render_form form %}
|
|
30
30
|
<div class="text-end">
|
|
31
31
|
<button type="submit" class="btn btn-primary">
|
|
32
|
-
<span class="mdi mdi-magnify" aria-hidden="true"></span
|
|
32
|
+
<span class="mdi mdi-magnify" aria-hidden="true"></span> {% trans "Fetch" %}
|
|
33
33
|
</button>
|
|
34
34
|
</div>
|
|
35
35
|
</form>
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
<div class="row px-3">
|
|
48
48
|
<div class="card">
|
|
49
49
|
<div class="card-body">
|
|
50
|
-
Could not find an IP Fabric Source that could have synced this Device. The source is used to match devices between NetBox and IP Fabric instance.
|
|
50
|
+
{% trans "Could not find an IP Fabric Source that could have synced this Device. The source is used to match devices between NetBox and IP Fabric instance." %}
|
|
51
51
|
</div>
|
|
52
52
|
</div>
|
|
53
53
|
</div>
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
{% load perms %}
|
|
6
6
|
{% load plugins %}
|
|
7
7
|
{% load tabs %}
|
|
8
|
+
{% load i18n %}
|
|
8
9
|
|
|
9
10
|
{% block title %}{{ object }}{% endblock %}
|
|
10
11
|
|
|
@@ -23,12 +24,12 @@
|
|
|
23
24
|
data-bs-toggle="modal"
|
|
24
25
|
data-bs-target="#htmx-modal" disabled
|
|
25
26
|
>
|
|
26
|
-
<span class="mdi mdi-sync" aria-hidden="true"></span> Merge
|
|
27
|
+
<span class="mdi mdi-sync" aria-hidden="true"></span> {% trans "Merge" %}
|
|
27
28
|
</a>
|
|
28
29
|
{% else %}
|
|
29
30
|
<span class="inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-delay="100" data-bs-placement="bottom">
|
|
30
31
|
<button class="btn btn-success" disabled>
|
|
31
|
-
<i class="mdi mdi-sync" aria-hidden="true"></i
|
|
32
|
+
<i class="mdi mdi-sync" aria-hidden="true"></i> {% trans "Merge" %}
|
|
32
33
|
</button>
|
|
33
34
|
</span>
|
|
34
35
|
{% endif %}
|
|
@@ -46,43 +47,43 @@
|
|
|
46
47
|
<div class="row mb-3">
|
|
47
48
|
<div class="col col-md-6">
|
|
48
49
|
<div class="card">
|
|
49
|
-
<h5 class="card-header">Ingestion Information</h5>
|
|
50
|
+
<h5 class="card-header">{% trans "Ingestion Information" %}</h5>
|
|
50
51
|
<div class="card-body">
|
|
51
52
|
<table class="table table-hover attr-table">
|
|
52
53
|
<tr>
|
|
53
|
-
<th scope="row">Name</th>
|
|
54
|
+
<th scope="row">{% trans "Name" %}</th>
|
|
54
55
|
<td>{{ object.name }}</td>
|
|
55
56
|
</tr>
|
|
56
57
|
<tr>
|
|
57
|
-
<th scope="row">Description</th>
|
|
58
|
+
<th scope="row">{% trans "Description" %}</th>
|
|
58
59
|
<td>{{ object.description|placeholder }}</td>
|
|
59
60
|
</tr>
|
|
60
61
|
<tr>
|
|
61
|
-
<th scope="row">Sync Object</th>
|
|
62
|
+
<th scope="row">{% trans "Sync Object" %}</th>
|
|
62
63
|
<td><a href="{% url 'plugins:ipfabric_netbox:ipfabricsync' pk=object.sync.pk %}">{{ object.sync.name}}</a>
|
|
63
64
|
</td>
|
|
64
65
|
</tr>
|
|
65
66
|
<tr>
|
|
66
|
-
<th scope="row">Branch Object</th>
|
|
67
|
+
<th scope="row">{% trans "Branch Object" %}</th>
|
|
67
68
|
<td>{% if object.branch %}<a href="{% url 'plugins:netbox_branching:branch' pk=object.branch.pk %}">{{ object.branch.name}}</a>{% else %}{{ ""|placeholder }}{% endif %}
|
|
68
69
|
</td>
|
|
69
70
|
</tr>
|
|
70
71
|
<tr>
|
|
71
|
-
<th scope="row">Job Object</th>
|
|
72
|
+
<th scope="row">{% trans "Job Object" %}</th>
|
|
72
73
|
<td>{% if object.job %}<a href="{% url 'core:job' pk=object.job.pk %}">{{ object.job }}</a>{% else %}{{ ""|placeholder }}{% endif %}</td>
|
|
73
74
|
</tr>
|
|
74
75
|
<tr>
|
|
75
|
-
<th scope="row">Ingestion Status</th>
|
|
76
|
+
<th scope="row">{% trans "Ingestion Status" %}</th>
|
|
76
77
|
<td><div id="ingestion_status" hx-swap-oob="true">{% include 'ipfabric_netbox/partials/ingestion_status.html' with object=object %}</div></td>
|
|
77
78
|
<!-- <td >{% badge object.sync.get_status_display bg_color=object.sync.get_status_color %}</td> -->
|
|
78
79
|
</tr>
|
|
79
80
|
<tr>
|
|
80
|
-
<th scope="row">Snapshot</th>
|
|
81
|
+
<th scope="row">{% trans "Snapshot" %}</th>
|
|
81
82
|
<td><a
|
|
82
83
|
href="{% url 'plugins:ipfabric_netbox:ipfabricsnapshot' pk=object.sync.snapshot_data.pk %}">{{object.sync.snapshot_data.name }}</a></td>
|
|
83
84
|
</tr>
|
|
84
85
|
<tr>
|
|
85
|
-
<th scope="row">Source</th>
|
|
86
|
+
<th scope="row">{% trans "Source" %}</th>
|
|
86
87
|
<td><a
|
|
87
88
|
href="{% url 'plugins:ipfabric_netbox:ipfabricsource' pk=object.sync.snapshot_data.source.pk %}">{{object.sync.snapshot_data.source.name }}</a></td>
|
|
88
89
|
</tr>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
{% load buttons %}
|
|
3
3
|
{% load helpers %}
|
|
4
4
|
{% load perms %}
|
|
5
|
+
{% load i18n %}
|
|
5
6
|
|
|
6
7
|
{% block controls %}
|
|
7
8
|
<div class="controls">
|
|
@@ -17,25 +18,25 @@
|
|
|
17
18
|
<div class="row mb-3">
|
|
18
19
|
<div class="col col-md-6">
|
|
19
20
|
<div class="card">
|
|
20
|
-
<h5 class="card-header">Snapshot Information</h5>
|
|
21
|
+
<h5 class="card-header">{% trans "Snapshot Information</h5>
|
|
21
22
|
<div class="card-body">
|
|
22
23
|
<table class="table table-hover attr-table">
|
|
23
24
|
<tr>
|
|
24
|
-
<th scope="row">Name</th>
|
|
25
|
+
<th scope="row">{% trans "Name" %}</th>
|
|
25
26
|
<td>{{ object.name|placeholder }}</td>
|
|
26
27
|
</tr>
|
|
27
28
|
<tr>
|
|
28
|
-
<th scope="row">Snapshot ID</th>
|
|
29
|
+
<th scope="row">{% trans "Snapshot ID" %}</th>
|
|
29
30
|
<td>{{ object.snapshot_id|placeholder }}</td>
|
|
30
31
|
</tr>
|
|
31
32
|
<tr>
|
|
32
|
-
<th scope="row">Source</th>
|
|
33
|
+
<th scope="row">{% trans "Source" %}</th>
|
|
33
34
|
<td>
|
|
34
35
|
<a href="{% url 'plugins:ipfabric_netbox:ipfabricsource' pk=object.source.pk %}">{{ object.source }}</a>
|
|
35
36
|
</td>
|
|
36
37
|
</tr>
|
|
37
38
|
<tr>
|
|
38
|
-
<th scope="row">Last Updated</th>
|
|
39
|
+
<th scope="row">{% trans "Last Updated" %}</th>
|
|
39
40
|
<td>{{ object.last_updated|placeholder }}</td>
|
|
40
41
|
</tr>
|
|
41
42
|
</table>
|
|
@@ -44,23 +45,23 @@
|
|
|
44
45
|
</div>
|
|
45
46
|
<div class="col col-md-6">
|
|
46
47
|
<div class="card">
|
|
47
|
-
<h5 class="card-header">Statistics</h5>
|
|
48
|
+
<h5 class="card-header">{% trans "Statistics" %}</h5>
|
|
48
49
|
<div class="card-body">
|
|
49
50
|
<table class="table table-hover attr-table">
|
|
50
51
|
<tr>
|
|
51
|
-
<th scope="row">Version</th>
|
|
52
|
+
<th scope="row">{% trans "Version" %}</th>
|
|
52
53
|
<td>{{ object.data.version|placeholder }}</td>
|
|
53
54
|
</tr>
|
|
54
55
|
<tr>
|
|
55
|
-
<th scope="row">Status</th>
|
|
56
|
+
<th scope="row">{% trans "Status" %}</th>
|
|
56
57
|
<td>{% badge object.get_status_display bg_color=object.get_status_color %}</td>
|
|
57
58
|
</tr>
|
|
58
59
|
<tr>
|
|
59
|
-
<th scope="row">Site Count</th>
|
|
60
|
+
<th scope="row">{% trans "Site Count" %}</th>
|
|
60
61
|
<td>{{ object.data.sites|length|placeholder }}</td>
|
|
61
62
|
</tr>
|
|
62
63
|
<tr>
|
|
63
|
-
<th scope="row">Sites</th>
|
|
64
|
+
<th scope="row">{% trans "Sites" %}</th>
|
|
64
65
|
<td>
|
|
65
66
|
{% if object.data.sites %}
|
|
66
67
|
{% for site in object.data.sites %}
|
|
@@ -74,15 +75,15 @@
|
|
|
74
75
|
</td>
|
|
75
76
|
</tr>
|
|
76
77
|
<tr>
|
|
77
|
-
<th scope="row">Device Count</th>
|
|
78
|
+
<th scope="row">{% trans "Device Count" %}</th>
|
|
78
79
|
<td>{{ object.data.total_dev_count|placeholder }}</td>
|
|
79
80
|
</tr>
|
|
80
81
|
<tr>
|
|
81
|
-
<th scope="row">Interface Count</th>
|
|
82
|
+
<th scope="row">{% trans "Interface Count" %}</th>
|
|
82
83
|
<td>{{ object.data.interface_count|placeholder }}</td>
|
|
83
84
|
</tr>
|
|
84
85
|
<tr>
|
|
85
|
-
<th scope="row">Note</th>
|
|
86
|
+
<th scope="row">{% trans "Note" %}</th>
|
|
86
87
|
<td>
|
|
87
88
|
<pre>{{ object.data.note|placeholder }}</pre>
|
|
88
89
|
</td>
|
|
@@ -95,7 +96,7 @@
|
|
|
95
96
|
<div class="row">
|
|
96
97
|
<div class="col col-12">
|
|
97
98
|
<div class="card">
|
|
98
|
-
<h5 class="card-header">Data</h5>
|
|
99
|
+
<h5 class="card-header">{% trans "Data" %}</h5>
|
|
99
100
|
<div class="card-body">
|
|
100
101
|
<pre class="block">{{ object.data | json }}</pre>
|
|
101
102
|
</div>
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
{% load plugins %}
|
|
5
5
|
{% load render_table from django_tables2 %}
|
|
6
6
|
{% load perms %}
|
|
7
|
+
{% load i18n %}
|
|
7
8
|
|
|
8
9
|
{% block extra_controls %}
|
|
9
10
|
{% if perms.ipfabric_netbox.sync_source %}
|
|
@@ -11,13 +12,13 @@
|
|
|
11
12
|
<form action="{% url 'plugins:ipfabric_netbox:ipfabricsource_sync' pk=object.pk %}" method="post">
|
|
12
13
|
{% csrf_token %}
|
|
13
14
|
<button type="submit" class="btn btn-primary">
|
|
14
|
-
<i class="mdi mdi-sync" aria-hidden="true"></i
|
|
15
|
+
<i class="mdi mdi-sync" aria-hidden="true"></i> {% trans "Sync" %}
|
|
15
16
|
</button>
|
|
16
17
|
</form>
|
|
17
18
|
{% else %}
|
|
18
19
|
<span class="inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-delay="100" data-bs-placement="bottom">
|
|
19
20
|
<button class="btn btn-primary" disabled>
|
|
20
|
-
<i class="mdi mdi-sync" aria-hidden="true"></i
|
|
21
|
+
<i class="mdi mdi-sync" aria-hidden="true"></i> {% trans "Sync" %}
|
|
21
22
|
</button>
|
|
22
23
|
</span>
|
|
23
24
|
{% endif %}
|
|
@@ -28,31 +29,31 @@
|
|
|
28
29
|
<div class="row mb-3">
|
|
29
30
|
<div class="col col-md-6">
|
|
30
31
|
<div class="card">
|
|
31
|
-
<h5 class="card-header">Data Source</h5>
|
|
32
|
+
<h5 class="card-header">{% trans "Data Source" %}</h5>
|
|
32
33
|
<div class="card-body">
|
|
33
34
|
<table class="table table-hover attr-table">
|
|
34
35
|
<tr>
|
|
35
|
-
<th scope="row">Name</th>
|
|
36
|
+
<th scope="row">{% trans "Name" %}</th>
|
|
36
37
|
<td>{{ object.name }}</td>
|
|
37
38
|
</tr>
|
|
38
39
|
<tr>
|
|
39
|
-
<th scope="row">Type</th>
|
|
40
|
+
<th scope="row">{% trans "Type" %}</th>
|
|
40
41
|
<td>{{ object.get_type_display }}</td>
|
|
41
42
|
</tr>
|
|
42
43
|
<tr>
|
|
43
|
-
<th scope="row">Status</th>
|
|
44
|
+
<th scope="row">{% trans "Status" %}</th>
|
|
44
45
|
<td>{% badge object.get_status_display bg_color=object.get_status_color %}</td>
|
|
45
46
|
</tr>
|
|
46
47
|
<tr>
|
|
47
|
-
<th scope="row">Last synced</th>
|
|
48
|
+
<th scope="row">{% trans "Last synced" %}</th>
|
|
48
49
|
<td>{{ object.last_synced|placeholder }}</td>
|
|
49
50
|
</tr>
|
|
50
51
|
<tr>
|
|
51
|
-
<th scope="row">Description</th>
|
|
52
|
+
<th scope="row">{% trans "Description" %}</th>
|
|
52
53
|
<td>{{ object.description|placeholder }}</td>
|
|
53
54
|
</tr>
|
|
54
55
|
<tr>
|
|
55
|
-
<th scope="row">Base URL</th>
|
|
56
|
+
<th scope="row">{% trans "Base URL" %}</th>
|
|
56
57
|
<td>
|
|
57
58
|
<a href="{{ object.url }}">{{ object.url }}</a>
|
|
58
59
|
</td>
|
|
@@ -66,7 +67,7 @@
|
|
|
66
67
|
</div>
|
|
67
68
|
<div class="col col-md-6">
|
|
68
69
|
<div class="card">
|
|
69
|
-
<h5 class="card-header">Parameters</h5>
|
|
70
|
+
<h5 class="card-header">{% trans "Parameters" %}</h5>
|
|
70
71
|
<div class="card-body">
|
|
71
72
|
<table class="table table-hover attr-table">
|
|
72
73
|
{% for name, value in object.parameters.items %}
|
|
@@ -80,7 +81,7 @@
|
|
|
80
81
|
<button type="button" class="btn btn-sm btn-primary toggle-secret float-end" data-bs-toggle="button">Show
|
|
81
82
|
Secret</button>
|
|
82
83
|
{% else %}
|
|
83
|
-
<i>Password Hidden</i>
|
|
84
|
+
<i>{% trans "Password Hidden" %}</i>
|
|
84
85
|
{% endif %}
|
|
85
86
|
</td>
|
|
86
87
|
{% else %}
|
|
@@ -90,7 +91,7 @@
|
|
|
90
91
|
{% empty %}
|
|
91
92
|
<tr>
|
|
92
93
|
<td colspan="2" class="text-muted">
|
|
93
|
-
No parameters defined
|
|
94
|
+
{% trans "No parameters defined" %}
|
|
94
95
|
</td>
|
|
95
96
|
</tr>
|
|
96
97
|
{% endfor %}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
{% load render_table from django_tables2 %}
|
|
6
6
|
{% load perms %}
|
|
7
7
|
{% load ipfabric_netbox_helpers %}
|
|
8
|
+
{% load i18n %}
|
|
8
9
|
|
|
9
10
|
{% block extra_controls %}
|
|
10
11
|
{% if perms.ipfabric_netbox.start_sync %}
|
|
@@ -12,13 +13,13 @@
|
|
|
12
13
|
<form action="{% url 'plugins:ipfabric_netbox:ipfabricsync_sync' pk=object.pk %}" method="post">
|
|
13
14
|
{% csrf_token %}
|
|
14
15
|
<button type="submit" class="btn btn-primary">
|
|
15
|
-
<i class="mdi mdi-sync" aria-hidden="true"></i
|
|
16
|
+
<i class="mdi mdi-sync" aria-hidden="true"></i> {% trans "Adhoc Ingestion" %}
|
|
16
17
|
</button>
|
|
17
18
|
</form>
|
|
18
19
|
{% else %}
|
|
19
20
|
<span class="inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-delay="100" data-bs-placement="bottom">
|
|
20
21
|
<button class="btn btn-primary" disabled>
|
|
21
|
-
<i class="mdi mdi-sync" aria-hidden="true"></i
|
|
22
|
+
<i class="mdi mdi-sync" aria-hidden="true"></i> {% trans "Adhoc Ingestion" %}
|
|
22
23
|
</button>
|
|
23
24
|
</span>
|
|
24
25
|
{% endif %}
|
|
@@ -29,43 +30,43 @@
|
|
|
29
30
|
<div class="row mb-3">
|
|
30
31
|
<div class="col col-md-6">
|
|
31
32
|
<div class="card">
|
|
32
|
-
<h5 class="card-header">Ingestion Information</h5>
|
|
33
|
+
<h5 class="card-header">{% trans "Ingestion Information" %}</h5>
|
|
33
34
|
<div class="card-body">
|
|
34
35
|
<table class="table table-hover attr-table">
|
|
35
36
|
<tr>
|
|
36
|
-
<th scope="row">Name</th>
|
|
37
|
+
<th scope="row">{% trans "Name" %}</th>
|
|
37
38
|
<td>{{ object.name }}</td>
|
|
38
39
|
</tr>
|
|
39
40
|
<tr>
|
|
40
|
-
<th scope="row">Source</th>
|
|
41
|
+
<th scope="row">{% trans "Source" %}</th>
|
|
41
42
|
<td><a href="{% url 'plugins:ipfabric_netbox:ipfabricsource' pk=object.snapshot_data.source.pk %}">{{ object.snapshot_data.source.name }}</a></td>
|
|
42
43
|
</tr>
|
|
43
44
|
<tr>
|
|
44
|
-
<th scope="row">Snapshot</th>
|
|
45
|
+
<th scope="row">{% trans "Snapshot" %}</th>
|
|
45
46
|
<td><a href="{% url 'plugins:ipfabric_netbox:ipfabricsnapshot' pk=object.snapshot_data.pk %}">{{ object.snapshot_data.name}}</a></td>
|
|
46
47
|
</tr>
|
|
47
48
|
<tr>
|
|
48
|
-
<th scope="row">Status</th>
|
|
49
|
+
<th scope="row">{% trans "Status" %}</th>
|
|
49
50
|
<td>{% badge object.get_status_display bg_color=object.get_status_color %}</td>
|
|
50
51
|
</tr>
|
|
51
52
|
<tr>
|
|
52
|
-
<th scope="row">Last synced</th>
|
|
53
|
+
<th scope="row">{% trans "Last synced" %}</th>
|
|
53
54
|
<td>{{ object.last_synced|placeholder }}</td>
|
|
54
55
|
</tr>
|
|
55
56
|
<tr>
|
|
56
|
-
<th scope="row">Latest ingestion</th>
|
|
57
|
+
<th scope="row">{% trans "Latest ingestion" %}</th>
|
|
57
58
|
<td><div {% if object.status == 'queued' or object.status == 'syncing' %} hx-get="{% url 'plugins:ipfabric_netbox:ipfabricsync' pk=object.pk %}" hx-trigger="every 1s"{% endif %}>{% include 'ipfabric_netbox/partials/sync_last_ingestion.html' %}</div></td>
|
|
58
59
|
</tr>
|
|
59
60
|
<tr>
|
|
60
|
-
<th scope="row">Schedule</th>
|
|
61
|
+
<th scope="row">{% trans "Schedule" %}</th>
|
|
61
62
|
<td><div>{% if scheduled_job %}<a href="{% url 'core:job' pk=scheduled_job.pk %}">{{ object.scheduled }}</a>{% else %} {{ object.scheduled | placeholder }} {% endif %}</div></td>
|
|
62
63
|
</tr>
|
|
63
64
|
<tr>
|
|
64
|
-
<th scope="row">Interval</th>
|
|
65
|
+
<th scope="row">{% trans "Interval" %}</th>
|
|
65
66
|
<td><div>{{ object.interval }}</div></td>
|
|
66
67
|
</tr>
|
|
67
68
|
<tr>
|
|
68
|
-
<th scope="row">User</th>
|
|
69
|
+
<th scope="row">{% trans "User" %}</th>
|
|
69
70
|
<td><div>{{ object.user }}</div></td>
|
|
70
71
|
</tr>
|
|
71
72
|
</tr>
|
|
@@ -77,7 +78,7 @@
|
|
|
77
78
|
</div>
|
|
78
79
|
<div class="col col-md-6">
|
|
79
80
|
<div class="card">
|
|
80
|
-
<h5 class="card-header">Parameters</h5>
|
|
81
|
+
<h5 class="card-header">{% trans "Parameters" %}</h5>
|
|
81
82
|
<div class="card-body">
|
|
82
83
|
<table class="table table-hover attr-table">
|
|
83
84
|
{% for name, field in object.parameters.items %}
|
|
@@ -91,7 +92,7 @@
|
|
|
91
92
|
<a href="{% url 'plugins:ipfabric_netbox:ipfabrictransformmapgroup' pk=group.pk %}">{{ group }}</a>{% if not forloop.last %}, {% endif %}
|
|
92
93
|
{% endwith %}
|
|
93
94
|
{% empty %}
|
|
94
|
-
<span class="text-muted">No groups assigned</span>
|
|
95
|
+
<span class="text-muted">{% trans "No groups assigned" %}</span>
|
|
95
96
|
{% endfor %}
|
|
96
97
|
{{"]"}}
|
|
97
98
|
{% else %}
|
|
@@ -102,7 +103,7 @@
|
|
|
102
103
|
{% empty %}
|
|
103
104
|
<tr>
|
|
104
105
|
<td colspan="2" class="text-muted">
|
|
105
|
-
No parameters defined
|
|
106
|
+
{% trans "No parameters defined" %}
|
|
106
107
|
</td>
|
|
107
108
|
</tr>
|
|
108
109
|
{% endfor %}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
{% load helpers %}
|
|
4
4
|
{% load plugins %}
|
|
5
5
|
{% load render_table from django_tables2 %}
|
|
6
|
+
{% load i18n %}
|
|
6
7
|
|
|
7
8
|
{% block extra_controls %}
|
|
8
9
|
<a href="#"
|
|
@@ -12,7 +13,7 @@
|
|
|
12
13
|
data-bs-toggle="modal"
|
|
13
14
|
data-bs-target="#htmx-modal" disabled
|
|
14
15
|
>
|
|
15
|
-
<span class="mdi mdi-content-copy" aria-hidden="true"></span> Clone
|
|
16
|
+
<span class="mdi mdi-content-copy" aria-hidden="true"></span> {% trans "Clone" %}
|
|
16
17
|
</a>
|
|
17
18
|
{% endblock %}
|
|
18
19
|
|
|
@@ -20,23 +21,23 @@
|
|
|
20
21
|
<div class="row mb-3">
|
|
21
22
|
<div class="col col-md-6">
|
|
22
23
|
<div class="card">
|
|
23
|
-
<h5 class="card-header">Transform Map Information</h5>
|
|
24
|
+
<h5 class="card-header">{% trans "Transform Map Information" %}</h5>
|
|
24
25
|
<div class="card-body">
|
|
25
26
|
<table class="table table-hover attr-table">
|
|
26
27
|
<tr>
|
|
27
|
-
<th scope="row">Name</th>
|
|
28
|
+
<th scope="row">{% trans "Name" %}</th>
|
|
28
29
|
<td>{{ object.name }}</td>
|
|
29
30
|
</tr>
|
|
30
31
|
<tr>
|
|
31
|
-
<th scope="row">Group</th>
|
|
32
|
+
<th scope="row">{% trans "Group" %}</th>
|
|
32
33
|
<td>{{ object.group | linkify | placeholder}}</td>
|
|
33
34
|
</tr>
|
|
34
35
|
<tr>
|
|
35
|
-
<th scope="row">Source Model</th>
|
|
36
|
+
<th scope="row">{% trans "Source Model" %}</th>
|
|
36
37
|
<td>ipfabric | {{ object.source_model }}</td>
|
|
37
38
|
</tr>
|
|
38
39
|
<tr>
|
|
39
|
-
<th scope="row">Target Model</th>
|
|
40
|
+
<th scope="row">{% trans "Target Model" %}</th>
|
|
40
41
|
<td>{{ object.target_model }}</td>
|
|
41
42
|
</tr>
|
|
42
43
|
</table>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
{% extends 'generic/object_list.html' %}
|
|
2
|
+
{% load i18n %}
|
|
2
3
|
|
|
3
4
|
{% block extra_controls %}
|
|
4
5
|
<a href="#"
|
|
@@ -8,7 +9,7 @@
|
|
|
8
9
|
data-bs-toggle="modal"
|
|
9
10
|
data-bs-target="#htmx-modal"
|
|
10
11
|
>
|
|
11
|
-
<span class="mdi mdi-file-restore" aria-hidden="true"></span> Restore
|
|
12
|
+
<span class="mdi mdi-file-restore" aria-hidden="true"></span> {% trans "Restore" %}
|
|
12
13
|
</a>
|
|
13
14
|
{% endblock %}
|
|
14
15
|
|
|
@@ -3,20 +3,21 @@
|
|
|
3
3
|
{% load helpers %}
|
|
4
4
|
{% load plugins %}
|
|
5
5
|
{% load render_table from django_tables2 %}
|
|
6
|
+
{% load i18n %}
|
|
6
7
|
|
|
7
8
|
{% block content %}
|
|
8
9
|
<div class="row mb-3">
|
|
9
10
|
<div class="col col-md-6">
|
|
10
11
|
<div class="card">
|
|
11
|
-
<h5 class="card-header">Transform Map Group Information</h5>
|
|
12
|
+
<h5 class="card-header">{% trans "Transform Map Group Information" %}</h5>
|
|
12
13
|
<div class="card-body">
|
|
13
14
|
<table class="table table-hover attr-table">
|
|
14
15
|
<tr>
|
|
15
|
-
<th scope="row">Name</th>
|
|
16
|
+
<th scope="row">{% trans "Name" %}</th>
|
|
16
17
|
<td>{{ object.name }}</td>
|
|
17
18
|
</tr>
|
|
18
19
|
<tr>
|
|
19
|
-
<th scope="row">Description</th>
|
|
20
|
+
<th scope="row">{% trans "Description" %}</th>
|
|
20
21
|
<td>{{ object.description | placeholder }}</td>
|
|
21
22
|
</tr>
|
|
22
23
|
</tr>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{% load helpers %}
|
|
2
|
+
{% load i18n %}
|
|
2
3
|
<div class="card">
|
|
3
|
-
<h5 class="card-header">Progress</h5>
|
|
4
|
+
<h5 class="card-header">{% trans "Progress" %}</h5>
|
|
4
5
|
<div class="card-body">
|
|
5
6
|
{% if not job %}
|
|
6
|
-
Cannot show progress, no sync Job exists anymore.
|
|
7
|
+
{% trans "Cannot show progress, no sync Job exists anymore." %}
|
|
7
8
|
{% elif statistics %}
|
|
8
9
|
<table class="table table-hover attr-table">
|
|
9
10
|
{% for model, util in statistics.items %}
|
|
@@ -14,8 +15,8 @@
|
|
|
14
15
|
{% endfor %}
|
|
15
16
|
</table>
|
|
16
17
|
{% else %}
|
|
17
|
-
Ingestion progress pending
|
|
18
|
-
<small class="text-muted">Last updated {% now "H:i:s" %}</small>
|
|
18
|
+
{% trans "Ingestion progress pending..." %}<br>
|
|
19
|
+
<small class="text-muted">{% trans "Last updated" %} {% now "H:i:s" %}</small>
|
|
19
20
|
{% endif %}
|
|
20
21
|
</div>
|
|
21
22
|
</div>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
{% load i18n %}
|
|
1
2
|
<div class="card">
|
|
2
|
-
<h5 class="card-header">Statistics</h5>
|
|
3
|
+
<h5 class="card-header">{% trans "Statistics" %}</h5>
|
|
3
4
|
<div class="card-body">
|
|
4
5
|
<table class="table table-hover attr-table">
|
|
5
6
|
<tr>
|
|
6
|
-
<th scope="row">Created</th>
|
|
7
|
+
<th scope="row">{% trans "Created" %}</th>
|
|
7
8
|
<td>
|
|
8
9
|
{% if object.num_created %}
|
|
9
10
|
{{ object.num_created }}
|
|
@@ -13,7 +14,7 @@
|
|
|
13
14
|
</td>
|
|
14
15
|
</tr>
|
|
15
16
|
<tr>
|
|
16
|
-
<th scope="row">Updated</th>
|
|
17
|
+
<th scope="row">{% trans "Updated" %}</th>
|
|
17
18
|
<td>
|
|
18
19
|
{% if object.num_updated %}
|
|
19
20
|
{{ object.num_updated }}
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
</td>
|
|
24
25
|
</tr>
|
|
25
26
|
<tr>
|
|
26
|
-
<th scope="row">Deleted</th>
|
|
27
|
+
<th scope="row">{% trans "Deleted" %}</th>
|
|
27
28
|
<td>
|
|
28
29
|
{% if object.num_deleted %}
|
|
29
30
|
{{ object.num_deleted }}
|