netbox-cisco-ise 0.1.0__py3-none-any.whl → 0.1.2__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.
- netbox_cisco_ise/__init__.py +1 -1
- netbox_cisco_ise/templates/netbox_cisco_ise/endpoint_tab.html +219 -0
- netbox_cisco_ise/templates/netbox_cisco_ise/nad_tab.html +196 -0
- netbox_cisco_ise/templates/netbox_cisco_ise/settings.html +225 -0
- netbox_cisco_ise/views.py +3 -1
- {netbox_cisco_ise-0.1.0.dist-info → netbox_cisco_ise-0.1.2.dist-info}/METADATA +3 -3
- netbox_cisco_ise-0.1.2.dist-info/RECORD +13 -0
- netbox_cisco_ise-0.1.0.dist-info/RECORD +0 -10
- {netbox_cisco_ise-0.1.0.dist-info → netbox_cisco_ise-0.1.2.dist-info}/WHEEL +0 -0
- {netbox_cisco_ise-0.1.0.dist-info → netbox_cisco_ise-0.1.2.dist-info}/licenses/LICENSE +0 -0
- {netbox_cisco_ise-0.1.0.dist-info → netbox_cisco_ise-0.1.2.dist-info}/top_level.txt +0 -0
netbox_cisco_ise/__init__.py
CHANGED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
{% extends 'dcim/device/base.html' %}
|
|
2
|
+
{% load helpers %}
|
|
3
|
+
|
|
4
|
+
{% block content %}
|
|
5
|
+
<div class="row">
|
|
6
|
+
<div class="col-12">
|
|
7
|
+
{% if error %}
|
|
8
|
+
<div class="alert alert-warning">
|
|
9
|
+
<i class="mdi mdi-alert"></i> {{ error }}
|
|
10
|
+
</div>
|
|
11
|
+
{% elif ise_data %}
|
|
12
|
+
<div class="row">
|
|
13
|
+
<!-- Session Status Card -->
|
|
14
|
+
<div class="col-md-4 mb-3">
|
|
15
|
+
<div class="card h-100">
|
|
16
|
+
<div class="card-header">
|
|
17
|
+
<h5 class="card-title mb-0">
|
|
18
|
+
<i class="mdi mdi-lan-connect"></i> Session Status
|
|
19
|
+
</h5>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="card-body text-center">
|
|
22
|
+
{% if session_data.connected %}
|
|
23
|
+
<div class="p-3 mb-2 bg-success rounded">
|
|
24
|
+
<span class="text-white fs-3 fw-bold">
|
|
25
|
+
<i class="mdi mdi-check-circle"></i> Connected
|
|
26
|
+
</span>
|
|
27
|
+
</div>
|
|
28
|
+
{% if session_data.framed_ip_address %}
|
|
29
|
+
<div class="mt-2">
|
|
30
|
+
<span class="text-muted">IP Address:</span>
|
|
31
|
+
<code class="ms-2">{{ session_data.framed_ip_address }}</code>
|
|
32
|
+
</div>
|
|
33
|
+
{% endif %}
|
|
34
|
+
{% if session_data.authorization_profile %}
|
|
35
|
+
<div class="mt-1">
|
|
36
|
+
<span class="text-muted">Authorization:</span>
|
|
37
|
+
<span class="badge bg-info text-dark ms-2">{{ session_data.authorization_profile }}</span>
|
|
38
|
+
</div>
|
|
39
|
+
{% endif %}
|
|
40
|
+
{% if session_data.acct_session_time %}
|
|
41
|
+
<div class="mt-1 text-muted small">
|
|
42
|
+
Session time: {{ session_data.acct_session_time }} seconds
|
|
43
|
+
</div>
|
|
44
|
+
{% endif %}
|
|
45
|
+
{% else %}
|
|
46
|
+
<div class="p-3 mb-2 bg-secondary rounded">
|
|
47
|
+
<span class="text-white fs-3 fw-bold">
|
|
48
|
+
<i class="mdi mdi-lan-disconnect"></i> Disconnected
|
|
49
|
+
</span>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="mt-2 text-muted">
|
|
52
|
+
No active session found
|
|
53
|
+
</div>
|
|
54
|
+
{% endif %}
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<!-- Endpoint Identity Card -->
|
|
60
|
+
<div class="col-md-4 mb-3">
|
|
61
|
+
<div class="card h-100">
|
|
62
|
+
<div class="card-header">
|
|
63
|
+
<h5 class="card-title mb-0">
|
|
64
|
+
<i class="mdi mdi-account-badge"></i> Endpoint Identity
|
|
65
|
+
</h5>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="card-body">
|
|
68
|
+
<table class="table table-sm table-borderless mb-0">
|
|
69
|
+
<tr>
|
|
70
|
+
<th class="text-muted" style="width: 40%">MAC Address:</th>
|
|
71
|
+
<td><code>{{ ise_data.mac_address }}</code></td>
|
|
72
|
+
</tr>
|
|
73
|
+
<tr>
|
|
74
|
+
<th class="text-muted">Profile:</th>
|
|
75
|
+
<td>{{ ise_data.profile_name|default:"N/A" }}</td>
|
|
76
|
+
</tr>
|
|
77
|
+
<tr>
|
|
78
|
+
<th class="text-muted">Identity Group:</th>
|
|
79
|
+
<td>{{ ise_data.group_name|default:"N/A" }}</td>
|
|
80
|
+
</tr>
|
|
81
|
+
<tr>
|
|
82
|
+
<th class="text-muted">Static Assignment:</th>
|
|
83
|
+
<td>
|
|
84
|
+
{% if ise_data.static_group_assignment %}
|
|
85
|
+
<span class="badge bg-success text-white">Yes</span>
|
|
86
|
+
{% else %}
|
|
87
|
+
<span class="badge bg-secondary text-white">No</span>
|
|
88
|
+
{% endif %}
|
|
89
|
+
</td>
|
|
90
|
+
</tr>
|
|
91
|
+
{% if ise_data.portal_user %}
|
|
92
|
+
<tr>
|
|
93
|
+
<th class="text-muted">Portal User:</th>
|
|
94
|
+
<td>{{ ise_data.portal_user }}</td>
|
|
95
|
+
</tr>
|
|
96
|
+
{% endif %}
|
|
97
|
+
</table>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
<!-- Connection Details Card -->
|
|
103
|
+
<div class="col-md-4 mb-3">
|
|
104
|
+
<div class="card h-100">
|
|
105
|
+
<div class="card-header">
|
|
106
|
+
<h5 class="card-title mb-0">
|
|
107
|
+
<i class="mdi mdi-router-wireless"></i> Connection Details
|
|
108
|
+
</h5>
|
|
109
|
+
</div>
|
|
110
|
+
<div class="card-body">
|
|
111
|
+
{% if session_data.connected %}
|
|
112
|
+
<table class="table table-sm table-borderless mb-0">
|
|
113
|
+
{% if session_data.nas_ip_address %}
|
|
114
|
+
<tr>
|
|
115
|
+
<th class="text-muted" style="width: 40%">Connected To:</th>
|
|
116
|
+
<td><code>{{ session_data.nas_ip_address }}</code></td>
|
|
117
|
+
</tr>
|
|
118
|
+
{% endif %}
|
|
119
|
+
{% if session_data.nas_port_id %}
|
|
120
|
+
<tr>
|
|
121
|
+
<th class="text-muted">Port:</th>
|
|
122
|
+
<td>{{ session_data.nas_port_id }}</td>
|
|
123
|
+
</tr>
|
|
124
|
+
{% endif %}
|
|
125
|
+
{% if session_data.vlan %}
|
|
126
|
+
<tr>
|
|
127
|
+
<th class="text-muted">VLAN:</th>
|
|
128
|
+
<td>{{ session_data.vlan }}</td>
|
|
129
|
+
</tr>
|
|
130
|
+
{% endif %}
|
|
131
|
+
{% if session_data.ssid %}
|
|
132
|
+
<tr>
|
|
133
|
+
<th class="text-muted">SSID:</th>
|
|
134
|
+
<td>{{ session_data.ssid }}</td>
|
|
135
|
+
</tr>
|
|
136
|
+
{% endif %}
|
|
137
|
+
{% if session_data.auth_method %}
|
|
138
|
+
<tr>
|
|
139
|
+
<th class="text-muted">Auth Method:</th>
|
|
140
|
+
<td>{{ session_data.auth_method }}</td>
|
|
141
|
+
</tr>
|
|
142
|
+
{% endif %}
|
|
143
|
+
{% if session_data.security_group %}
|
|
144
|
+
<tr>
|
|
145
|
+
<th class="text-muted">Security Group:</th>
|
|
146
|
+
<td><span class="badge bg-primary text-white">{{ session_data.security_group }}</span></td>
|
|
147
|
+
</tr>
|
|
148
|
+
{% endif %}
|
|
149
|
+
</table>
|
|
150
|
+
{% else %}
|
|
151
|
+
<div class="text-center text-muted py-4">
|
|
152
|
+
<i class="mdi mdi-lan-disconnect mdi-48px"></i>
|
|
153
|
+
<p class="mt-2">No active connection</p>
|
|
154
|
+
</div>
|
|
155
|
+
{% endif %}
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<!-- Custom Attributes -->
|
|
162
|
+
{% if ise_data.custom_attributes %}
|
|
163
|
+
<div class="row">
|
|
164
|
+
<div class="col-12 mb-3">
|
|
165
|
+
<div class="card">
|
|
166
|
+
<div class="card-header">
|
|
167
|
+
<h5 class="card-title mb-0">
|
|
168
|
+
<i class="mdi mdi-tag-multiple"></i> Custom Attributes
|
|
169
|
+
</h5>
|
|
170
|
+
</div>
|
|
171
|
+
<div class="card-body">
|
|
172
|
+
<table class="table table-sm table-hover">
|
|
173
|
+
<thead>
|
|
174
|
+
<tr>
|
|
175
|
+
<th>Attribute</th>
|
|
176
|
+
<th>Value</th>
|
|
177
|
+
</tr>
|
|
178
|
+
</thead>
|
|
179
|
+
<tbody>
|
|
180
|
+
{% for key, value in ise_data.custom_attributes.items %}
|
|
181
|
+
<tr>
|
|
182
|
+
<td>{{ key }}</td>
|
|
183
|
+
<td>{{ value }}</td>
|
|
184
|
+
</tr>
|
|
185
|
+
{% endfor %}
|
|
186
|
+
</tbody>
|
|
187
|
+
</table>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
{% endif %}
|
|
193
|
+
|
|
194
|
+
<!-- Cache indicator and external link -->
|
|
195
|
+
<div class="mt-3 d-flex justify-content-between align-items-center">
|
|
196
|
+
<div>
|
|
197
|
+
{% if ise_data.cached %}
|
|
198
|
+
<span class="text-muted small">
|
|
199
|
+
<i class="mdi mdi-cached"></i> Data from cache
|
|
200
|
+
</span>
|
|
201
|
+
{% endif %}
|
|
202
|
+
</div>
|
|
203
|
+
<div>
|
|
204
|
+
{% if ise_url %}
|
|
205
|
+
<a href="{{ ise_url }}" target="_blank" class="btn btn-outline-primary btn-sm">
|
|
206
|
+
<i class="mdi mdi-open-in-new"></i> Open Cisco ISE
|
|
207
|
+
</a>
|
|
208
|
+
{% endif %}
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
|
|
212
|
+
{% else %}
|
|
213
|
+
<div class="alert alert-info">
|
|
214
|
+
<i class="mdi mdi-information"></i> No endpoint data available from ISE.
|
|
215
|
+
</div>
|
|
216
|
+
{% endif %}
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
{% endblock %}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
{% extends 'dcim/device/base.html' %}
|
|
2
|
+
{% load helpers %}
|
|
3
|
+
|
|
4
|
+
{% block content %}
|
|
5
|
+
<div class="row">
|
|
6
|
+
<div class="col-12">
|
|
7
|
+
{% if error %}
|
|
8
|
+
<div class="alert alert-warning">
|
|
9
|
+
<i class="mdi mdi-alert"></i> {{ error }}
|
|
10
|
+
</div>
|
|
11
|
+
{% elif ise_data %}
|
|
12
|
+
<div class="row">
|
|
13
|
+
<!-- NAD Registration Status Card -->
|
|
14
|
+
<div class="col-md-4 mb-3">
|
|
15
|
+
<div class="card h-100">
|
|
16
|
+
<div class="card-header">
|
|
17
|
+
<h5 class="card-title mb-0">
|
|
18
|
+
<i class="mdi mdi-check-decagram"></i> ISE Registration
|
|
19
|
+
</h5>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="card-body text-center">
|
|
22
|
+
<div class="p-3 mb-2 bg-success rounded">
|
|
23
|
+
<span class="text-white fs-3 fw-bold">
|
|
24
|
+
<i class="mdi mdi-check-circle"></i> Registered
|
|
25
|
+
</span>
|
|
26
|
+
</div>
|
|
27
|
+
{% if ise_data.name %}
|
|
28
|
+
<div class="mt-2">
|
|
29
|
+
<span class="text-muted">NAD Name:</span>
|
|
30
|
+
<strong class="ms-2">{{ ise_data.name }}</strong>
|
|
31
|
+
</div>
|
|
32
|
+
{% endif %}
|
|
33
|
+
{% if ise_data.profile_name %}
|
|
34
|
+
<div class="mt-1">
|
|
35
|
+
<span class="text-muted">Profile:</span>
|
|
36
|
+
<span class="badge bg-info text-dark ms-2">{{ ise_data.profile_name }}</span>
|
|
37
|
+
</div>
|
|
38
|
+
{% endif %}
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<!-- Device Details Card -->
|
|
44
|
+
<div class="col-md-4 mb-3">
|
|
45
|
+
<div class="card h-100">
|
|
46
|
+
<div class="card-header">
|
|
47
|
+
<h5 class="card-title mb-0">
|
|
48
|
+
<i class="mdi mdi-router"></i> Device Details
|
|
49
|
+
</h5>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="card-body">
|
|
52
|
+
<table class="table table-sm table-borderless mb-0">
|
|
53
|
+
{% if ise_data.ip_addresses %}
|
|
54
|
+
<tr>
|
|
55
|
+
<th class="text-muted" style="width: 40%">IP Address(es):</th>
|
|
56
|
+
<td>
|
|
57
|
+
{% for ip in ise_data.ip_addresses %}
|
|
58
|
+
<code>{{ ip }}</code>{% if not forloop.last %}, {% endif %}
|
|
59
|
+
{% endfor %}
|
|
60
|
+
</td>
|
|
61
|
+
</tr>
|
|
62
|
+
{% endif %}
|
|
63
|
+
{% if ise_data.model_name %}
|
|
64
|
+
<tr>
|
|
65
|
+
<th class="text-muted">Model:</th>
|
|
66
|
+
<td>{{ ise_data.model_name }}</td>
|
|
67
|
+
</tr>
|
|
68
|
+
{% endif %}
|
|
69
|
+
{% if ise_data.software_version %}
|
|
70
|
+
<tr>
|
|
71
|
+
<th class="text-muted">Software:</th>
|
|
72
|
+
<td>{{ ise_data.software_version }}</td>
|
|
73
|
+
</tr>
|
|
74
|
+
{% endif %}
|
|
75
|
+
{% if ise_data.description %}
|
|
76
|
+
<tr>
|
|
77
|
+
<th class="text-muted">Description:</th>
|
|
78
|
+
<td>{{ ise_data.description }}</td>
|
|
79
|
+
</tr>
|
|
80
|
+
{% endif %}
|
|
81
|
+
{% if ise_data.coA_port %}
|
|
82
|
+
<tr>
|
|
83
|
+
<th class="text-muted">CoA Port:</th>
|
|
84
|
+
<td>{{ ise_data.coA_port }}</td>
|
|
85
|
+
</tr>
|
|
86
|
+
{% endif %}
|
|
87
|
+
</table>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<!-- Authentication Settings Card -->
|
|
93
|
+
<div class="col-md-4 mb-3">
|
|
94
|
+
<div class="card h-100">
|
|
95
|
+
<div class="card-header">
|
|
96
|
+
<h5 class="card-title mb-0">
|
|
97
|
+
<i class="mdi mdi-shield-key"></i> Authentication Settings
|
|
98
|
+
</h5>
|
|
99
|
+
</div>
|
|
100
|
+
<div class="card-body">
|
|
101
|
+
<table class="table table-sm table-borderless mb-0">
|
|
102
|
+
<tr>
|
|
103
|
+
<th class="text-muted" style="width: 50%">RADIUS:</th>
|
|
104
|
+
<td>
|
|
105
|
+
{% if ise_data.authentication_settings.radius_enabled %}
|
|
106
|
+
<span class="badge bg-success text-white">Enabled</span>
|
|
107
|
+
{% else %}
|
|
108
|
+
<span class="badge bg-warning text-dark">Disabled</span>
|
|
109
|
+
{% endif %}
|
|
110
|
+
</td>
|
|
111
|
+
</tr>
|
|
112
|
+
<tr>
|
|
113
|
+
<th class="text-muted">TACACS+:</th>
|
|
114
|
+
<td>
|
|
115
|
+
{% if ise_data.tacacs_settings.enabled %}
|
|
116
|
+
<span class="badge bg-success text-white">Enabled</span>
|
|
117
|
+
{% else %}
|
|
118
|
+
<span class="badge bg-warning text-dark">Disabled</span>
|
|
119
|
+
{% endif %}
|
|
120
|
+
</td>
|
|
121
|
+
</tr>
|
|
122
|
+
<tr>
|
|
123
|
+
<th class="text-muted">TrustSec:</th>
|
|
124
|
+
<td>
|
|
125
|
+
{% if ise_data.trustsec_enabled %}
|
|
126
|
+
<span class="badge bg-success text-white">Enabled</span>
|
|
127
|
+
{% else %}
|
|
128
|
+
<span class="badge bg-warning text-dark">Disabled</span>
|
|
129
|
+
{% endif %}
|
|
130
|
+
</td>
|
|
131
|
+
</tr>
|
|
132
|
+
{% if ise_data.snmp_settings.version %}
|
|
133
|
+
<tr>
|
|
134
|
+
<th class="text-muted">SNMP:</th>
|
|
135
|
+
<td>{{ ise_data.snmp_settings.version }}</td>
|
|
136
|
+
</tr>
|
|
137
|
+
{% endif %}
|
|
138
|
+
</table>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<!-- Network Device Groups -->
|
|
145
|
+
{% if ise_data.groups %}
|
|
146
|
+
<div class="row">
|
|
147
|
+
<div class="col-12 mb-3">
|
|
148
|
+
<div class="card">
|
|
149
|
+
<div class="card-header">
|
|
150
|
+
<h5 class="card-title mb-0">
|
|
151
|
+
<i class="mdi mdi-folder-network"></i> Network Device Groups
|
|
152
|
+
</h5>
|
|
153
|
+
</div>
|
|
154
|
+
<div class="card-body">
|
|
155
|
+
<div class="row">
|
|
156
|
+
{% for category, value in ise_data.groups.items %}
|
|
157
|
+
<div class="col-md-3 col-sm-6 mb-2">
|
|
158
|
+
<div class="border rounded p-2">
|
|
159
|
+
<div class="text-muted small">{{ category }}</div>
|
|
160
|
+
<div class="fw-bold">{{ value }}</div>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
{% endfor %}
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
{% endif %}
|
|
170
|
+
|
|
171
|
+
<!-- Cache indicator and external link -->
|
|
172
|
+
<div class="mt-3 d-flex justify-content-between align-items-center">
|
|
173
|
+
<div>
|
|
174
|
+
{% if ise_data.cached %}
|
|
175
|
+
<span class="text-muted small">
|
|
176
|
+
<i class="mdi mdi-cached"></i> Data from cache
|
|
177
|
+
</span>
|
|
178
|
+
{% endif %}
|
|
179
|
+
</div>
|
|
180
|
+
<div>
|
|
181
|
+
{% if ise_url %}
|
|
182
|
+
<a href="{{ ise_url }}" target="_blank" class="btn btn-outline-primary btn-sm">
|
|
183
|
+
<i class="mdi mdi-open-in-new"></i> Open Cisco ISE
|
|
184
|
+
</a>
|
|
185
|
+
{% endif %}
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
{% else %}
|
|
190
|
+
<div class="alert alert-info">
|
|
191
|
+
<i class="mdi mdi-information"></i> This device is not registered as a Network Access Device in ISE.
|
|
192
|
+
</div>
|
|
193
|
+
{% endif %}
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
{% endblock %}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
{% extends 'generic/object.html' %}
|
|
2
|
+
{% load form_helpers %}
|
|
3
|
+
|
|
4
|
+
{% block title %}Cisco ISE Settings{% endblock %}
|
|
5
|
+
|
|
6
|
+
{% block header %}
|
|
7
|
+
<h1 class="pt-2"><i class="mdi mdi-shield-account"></i> Cisco ISE Settings</h1>
|
|
8
|
+
{% endblock %}
|
|
9
|
+
|
|
10
|
+
{% block content %}
|
|
11
|
+
<div class="row">
|
|
12
|
+
<div class="col-md-8">
|
|
13
|
+
<div class="card">
|
|
14
|
+
<div class="card-header">
|
|
15
|
+
<h5 class="card-title mb-0">
|
|
16
|
+
<i class="mdi mdi-server-network"></i> Current Configuration
|
|
17
|
+
</h5>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="card-body">
|
|
20
|
+
<table class="table table-hover">
|
|
21
|
+
<tr>
|
|
22
|
+
<th style="width: 200px;">ISE URL</th>
|
|
23
|
+
<td>
|
|
24
|
+
{% if config.ise_url %}
|
|
25
|
+
<code>{{ config.ise_url }}</code>
|
|
26
|
+
{% else %}
|
|
27
|
+
<span class="text-danger">Not configured</span>
|
|
28
|
+
{% endif %}
|
|
29
|
+
</td>
|
|
30
|
+
</tr>
|
|
31
|
+
<tr>
|
|
32
|
+
<th>Username</th>
|
|
33
|
+
<td>
|
|
34
|
+
{% if config.ise_username %}
|
|
35
|
+
<code>{{ config.ise_username }}</code>
|
|
36
|
+
{% else %}
|
|
37
|
+
<span class="text-danger">Not configured</span>
|
|
38
|
+
{% endif %}
|
|
39
|
+
</td>
|
|
40
|
+
</tr>
|
|
41
|
+
<tr>
|
|
42
|
+
<th>Password</th>
|
|
43
|
+
<td>
|
|
44
|
+
{% if config.ise_password %}
|
|
45
|
+
<span class="text-success">********</span>
|
|
46
|
+
{% else %}
|
|
47
|
+
<span class="text-danger">Not configured</span>
|
|
48
|
+
{% endif %}
|
|
49
|
+
</td>
|
|
50
|
+
</tr>
|
|
51
|
+
<tr>
|
|
52
|
+
<th>Timeout</th>
|
|
53
|
+
<td>{{ config.timeout|default:30 }} seconds</td>
|
|
54
|
+
</tr>
|
|
55
|
+
<tr>
|
|
56
|
+
<th>Cache Timeout</th>
|
|
57
|
+
<td>{{ config.cache_timeout|default:60 }} seconds</td>
|
|
58
|
+
</tr>
|
|
59
|
+
<tr>
|
|
60
|
+
<th>Verify SSL</th>
|
|
61
|
+
<td>
|
|
62
|
+
{% if config.verify_ssl %}
|
|
63
|
+
<span class="badge bg-success text-white">Enabled</span>
|
|
64
|
+
{% else %}
|
|
65
|
+
<span class="badge bg-warning text-dark">Disabled</span>
|
|
66
|
+
{% endif %}
|
|
67
|
+
</td>
|
|
68
|
+
</tr>
|
|
69
|
+
</table>
|
|
70
|
+
|
|
71
|
+
<!-- Device Mappings -->
|
|
72
|
+
<h6 class="mt-4 mb-3"><i class="mdi mdi-map"></i> Device Mappings</h6>
|
|
73
|
+
{% if config.device_mappings %}
|
|
74
|
+
<table class="table table-sm table-hover">
|
|
75
|
+
<thead>
|
|
76
|
+
<tr>
|
|
77
|
+
<th>Manufacturer</th>
|
|
78
|
+
<th>Device Type</th>
|
|
79
|
+
<th>Lookup Method</th>
|
|
80
|
+
</tr>
|
|
81
|
+
</thead>
|
|
82
|
+
<tbody>
|
|
83
|
+
{% for mapping in config.device_mappings %}
|
|
84
|
+
<tr>
|
|
85
|
+
<td><code>{{ mapping.manufacturer|default:"*" }}</code></td>
|
|
86
|
+
<td><code>{{ mapping.device_type|default:"*" }}</code></td>
|
|
87
|
+
<td>
|
|
88
|
+
{% if mapping.lookup == "endpoint" %}
|
|
89
|
+
<span class="badge bg-info text-dark">Endpoint</span>
|
|
90
|
+
<small class="text-muted">(MAC lookup via ERS API)</small>
|
|
91
|
+
{% else %}
|
|
92
|
+
<span class="badge bg-primary text-white">NAD</span>
|
|
93
|
+
<small class="text-muted">(IP/hostname via ERS API)</small>
|
|
94
|
+
{% endif %}
|
|
95
|
+
</td>
|
|
96
|
+
</tr>
|
|
97
|
+
{% endfor %}
|
|
98
|
+
</tbody>
|
|
99
|
+
</table>
|
|
100
|
+
{% else %}
|
|
101
|
+
<div class="alert alert-warning">
|
|
102
|
+
<i class="mdi mdi-alert"></i> No device mappings configured. The Cisco ISE tab will not appear on any devices.
|
|
103
|
+
</div>
|
|
104
|
+
{% endif %}
|
|
105
|
+
|
|
106
|
+
<!-- Test Connection Button -->
|
|
107
|
+
<div class="mt-3 mb-3">
|
|
108
|
+
<button type="button" class="btn btn-primary" id="test-connection-btn">
|
|
109
|
+
<i class="mdi mdi-play"></i> Test Connection
|
|
110
|
+
</button>
|
|
111
|
+
<div id="test-result" class="mt-2"></div>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
<!-- Configuration Help -->
|
|
117
|
+
<div class="card mt-3 mb-3">
|
|
118
|
+
<div class="card-header">
|
|
119
|
+
<h5 class="card-title mb-0">
|
|
120
|
+
<i class="mdi mdi-help-circle"></i> Configuration Help
|
|
121
|
+
</h5>
|
|
122
|
+
</div>
|
|
123
|
+
<div class="card-body">
|
|
124
|
+
<p>Add to <code>configuration.py</code>:</p>
|
|
125
|
+
<pre class="bg-body-secondary p-2 rounded" style="font-size: 0.8rem;"><code>PLUGINS = ['netbox_cisco_ise']
|
|
126
|
+
|
|
127
|
+
PLUGINS_CONFIG = {
|
|
128
|
+
'netbox_cisco_ise': {
|
|
129
|
+
'ise_url': 'https://ise.example.com',
|
|
130
|
+
'ise_username': 'ersadmin',
|
|
131
|
+
'ise_password': 'your-password',
|
|
132
|
+
'timeout': 30,
|
|
133
|
+
'cache_timeout': 60,
|
|
134
|
+
'verify_ssl': False,
|
|
135
|
+
# Device mappings control which devices show the tab
|
|
136
|
+
# manufacturer/device_type are regex patterns
|
|
137
|
+
# lookup types:
|
|
138
|
+
# "nad" - IP/hostname (for switches, routers, WLCs)
|
|
139
|
+
# "endpoint" - MAC address (for wireless clients)
|
|
140
|
+
'device_mappings': [
|
|
141
|
+
{'manufacturer': 'cisco', 'lookup': 'nad'},
|
|
142
|
+
{'manufacturer': 'vocera', 'lookup': 'endpoint'},
|
|
143
|
+
],
|
|
144
|
+
}
|
|
145
|
+
}</code></pre>
|
|
146
|
+
<a href="https://github.com/sieteunoseis/netbox-cisco-ise" target="_blank" class="btn btn-outline-secondary btn-sm">
|
|
147
|
+
<i class="mdi mdi-github"></i> View Documentation
|
|
148
|
+
</a>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<div class="col-md-4">
|
|
154
|
+
<div class="card">
|
|
155
|
+
<div class="card-header">
|
|
156
|
+
<h5 class="card-title mb-0">
|
|
157
|
+
<i class="mdi mdi-information"></i> About
|
|
158
|
+
</h5>
|
|
159
|
+
</div>
|
|
160
|
+
<div class="card-body">
|
|
161
|
+
<p>
|
|
162
|
+
This plugin displays Cisco ISE (Identity Services Engine)
|
|
163
|
+
data on Device pages in NetBox.
|
|
164
|
+
</p>
|
|
165
|
+
<p>
|
|
166
|
+
<strong>Network Access Devices</strong> (NAD lookup):
|
|
167
|
+
</p>
|
|
168
|
+
<ul>
|
|
169
|
+
<li>ISE registration status</li>
|
|
170
|
+
<li>IP addresses & model info</li>
|
|
171
|
+
<li>RADIUS/TACACS+ settings</li>
|
|
172
|
+
<li>Network device groups</li>
|
|
173
|
+
</ul>
|
|
174
|
+
<p>
|
|
175
|
+
<strong>Endpoints</strong> (MAC lookup):
|
|
176
|
+
</p>
|
|
177
|
+
<ul>
|
|
178
|
+
<li>Session status & details</li>
|
|
179
|
+
<li>Profiling information</li>
|
|
180
|
+
<li>Identity group membership</li>
|
|
181
|
+
<li>Custom attributes</li>
|
|
182
|
+
</ul>
|
|
183
|
+
<p class="text-muted small mb-0">
|
|
184
|
+
Version 0.1.0
|
|
185
|
+
</p>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<script>
|
|
192
|
+
// Test Connection
|
|
193
|
+
document.getElementById('test-connection-btn').addEventListener('click', function() {
|
|
194
|
+
var btn = this;
|
|
195
|
+
var resultDiv = document.getElementById('test-result');
|
|
196
|
+
|
|
197
|
+
btn.disabled = true;
|
|
198
|
+
btn.innerHTML = '<i class="mdi mdi-loading mdi-spin"></i> Testing...';
|
|
199
|
+
resultDiv.innerHTML = '';
|
|
200
|
+
|
|
201
|
+
fetch('{% url "plugins:netbox_cisco_ise:test_connection" %}', {
|
|
202
|
+
method: 'POST',
|
|
203
|
+
headers: {
|
|
204
|
+
'X-CSRFToken': '{{ csrf_token }}',
|
|
205
|
+
'Content-Type': 'application/json'
|
|
206
|
+
}
|
|
207
|
+
})
|
|
208
|
+
.then(response => response.json())
|
|
209
|
+
.then(data => {
|
|
210
|
+
if (data.success) {
|
|
211
|
+
resultDiv.innerHTML = '<div class="alert alert-success"><i class="mdi mdi-check-circle"></i> ' + data.message + '</div>';
|
|
212
|
+
} else {
|
|
213
|
+
resultDiv.innerHTML = '<div class="alert alert-danger"><i class="mdi mdi-alert-circle"></i> ' + data.error + '</div>';
|
|
214
|
+
}
|
|
215
|
+
})
|
|
216
|
+
.catch(error => {
|
|
217
|
+
resultDiv.innerHTML = '<div class="alert alert-danger"><i class="mdi mdi-alert-circle"></i> Request failed: ' + error + '</div>';
|
|
218
|
+
})
|
|
219
|
+
.finally(() => {
|
|
220
|
+
btn.disabled = false;
|
|
221
|
+
btn.innerHTML = '<i class="mdi mdi-play"></i> Test Connection';
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
</script>
|
|
225
|
+
{% endblock %}
|
netbox_cisco_ise/views.py
CHANGED
|
@@ -134,7 +134,9 @@ class DeviceISEView(generic.ObjectView):
|
|
|
134
134
|
|
|
135
135
|
def get(self, request, pk):
|
|
136
136
|
"""Handle GET request for the ISE tab."""
|
|
137
|
-
device = Device.objects.
|
|
137
|
+
device = Device.objects.select_related(
|
|
138
|
+
'device_type__manufacturer'
|
|
139
|
+
).prefetch_related('interfaces').get(pk=pk)
|
|
138
140
|
|
|
139
141
|
client = get_client()
|
|
140
142
|
config = settings.PLUGINS_CONFIG.get("netbox_cisco_ise", {})
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: netbox-cisco-ise
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: NetBox plugin for Cisco ISE integration - endpoint tracking, NAD management, and session visibility
|
|
5
5
|
Author-email: sieteunoseis <jeremy.worden@gmail.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -32,7 +32,7 @@ Dynamic: license-file
|
|
|
32
32
|
|
|
33
33
|
# NetBox Cisco ISE Plugin
|
|
34
34
|
|
|
35
|
-
<img src="docs/icon.png" alt="NetBox Cisco ISE Plugin" width="100" align="right">
|
|
35
|
+
<img src="https://raw.githubusercontent.com/sieteunoseis/netbox-cisco-ise/main/docs/icon.png" alt="NetBox Cisco ISE Plugin" width="100" align="right">
|
|
36
36
|
|
|
37
37
|
A NetBox plugin that integrates Cisco Identity Services Engine (ISE) with NetBox, displaying endpoint details, network device (NAD) information, and active session data.
|
|
38
38
|
|
|
@@ -75,7 +75,7 @@ A NetBox plugin that integrates Cisco Identity Services Engine (ISE) with NetBox
|
|
|
75
75
|
|
|
76
76
|
## Installation
|
|
77
77
|
|
|
78
|
-
### From PyPI (
|
|
78
|
+
### From PyPI (recommended)
|
|
79
79
|
|
|
80
80
|
```bash
|
|
81
81
|
pip install netbox-cisco-ise
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
netbox_cisco_ise/__init__.py,sha256=t9Qytd6-ihq47KQZCZUV_a9xRF-VNSoWSzHEv1j9tB8,2156
|
|
2
|
+
netbox_cisco_ise/ise_client.py,sha256=zUMakBU6lmSi-digrMxr6JKAbqyvBAPWz4l1eD8iDa8,16228
|
|
3
|
+
netbox_cisco_ise/navigation.py,sha256=mMN4EyzZl6ehoqflLeYy7logt39wpCN2TEsPfqn1VtI,507
|
|
4
|
+
netbox_cisco_ise/urls.py,sha256=3tJHJyEQXYZ2WXw4zq1kds7xpgyHl1-HwVHlgtJA84E,304
|
|
5
|
+
netbox_cisco_ise/views.py,sha256=h0Yeo1xn1duPC1njgilq8aVbuFvSGfW8lIqERIwbe0w,8855
|
|
6
|
+
netbox_cisco_ise/templates/netbox_cisco_ise/endpoint_tab.html,sha256=aS7R0oTjkUmqlP7i2zfrFhYs9F-LknJgcomGGK60u7w,9868
|
|
7
|
+
netbox_cisco_ise/templates/netbox_cisco_ise/nad_tab.html,sha256=Y5rCGyoSqzRmfridJp2BmC3HkPGRhvWdZ3Mp-C81qYk,8783
|
|
8
|
+
netbox_cisco_ise/templates/netbox_cisco_ise/settings.html,sha256=ZsnJ_AclJUDa-h7vJTd5Clh7pc3OOBx6Tf9Y_bx3oIE,8953
|
|
9
|
+
netbox_cisco_ise-0.1.2.dist-info/licenses/LICENSE,sha256=KmjHs19UP3vo7K2IWXkq3JDKG9PatSbqeLPwu3o2k7g,10761
|
|
10
|
+
netbox_cisco_ise-0.1.2.dist-info/METADATA,sha256=CEP13iSkwoI30XQxrxdIRbJ5eupziKs1AsQocL6k_Ag,8859
|
|
11
|
+
netbox_cisco_ise-0.1.2.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
12
|
+
netbox_cisco_ise-0.1.2.dist-info/top_level.txt,sha256=LMP1ppZRzqtdaMGzz53KgacW_PEwyLSM9wwIMuBvJ00,17
|
|
13
|
+
netbox_cisco_ise-0.1.2.dist-info/RECORD,,
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
netbox_cisco_ise/__init__.py,sha256=i2HcznblQ7qWGki5GzdHVwVTT7jHoS5xoL9YI3aeqZw,2156
|
|
2
|
-
netbox_cisco_ise/ise_client.py,sha256=zUMakBU6lmSi-digrMxr6JKAbqyvBAPWz4l1eD8iDa8,16228
|
|
3
|
-
netbox_cisco_ise/navigation.py,sha256=mMN4EyzZl6ehoqflLeYy7logt39wpCN2TEsPfqn1VtI,507
|
|
4
|
-
netbox_cisco_ise/urls.py,sha256=3tJHJyEQXYZ2WXw4zq1kds7xpgyHl1-HwVHlgtJA84E,304
|
|
5
|
-
netbox_cisco_ise/views.py,sha256=01EzP1D2asecQr3rQAqTfXKOcgj4ra0o4_T5aAlos7I,8758
|
|
6
|
-
netbox_cisco_ise-0.1.0.dist-info/licenses/LICENSE,sha256=KmjHs19UP3vo7K2IWXkq3JDKG9PatSbqeLPwu3o2k7g,10761
|
|
7
|
-
netbox_cisco_ise-0.1.0.dist-info/METADATA,sha256=XrCMQAnyxOKxaFBPfieuQZlrRaJjXIUzeRZdfBObgDs,8793
|
|
8
|
-
netbox_cisco_ise-0.1.0.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
9
|
-
netbox_cisco_ise-0.1.0.dist-info/top_level.txt,sha256=LMP1ppZRzqtdaMGzz53KgacW_PEwyLSM9wwIMuBvJ00,17
|
|
10
|
-
netbox_cisco_ise-0.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|