interface.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. {% extends '_base.html' %}
  2. {% load helpers %}
  3. {% block header %}
  4. <div class="row noprint">
  5. <div class="col-md-12">
  6. <ol class="breadcrumb">
  7. {% if interface.device %}
  8. <li><a href="{% url 'dcim:device_list' %}">Devices</a></li>
  9. {% else %}
  10. <li><a href="{% url 'virtualization:virtualmachine_list' %}">Virtual Machines</a></li>
  11. {% endif %}
  12. <li><a href="{{ interface.parent.get_absolute_url }}">{{ interface.parent }}</a></li>
  13. <li>{{ interface }}</li>
  14. </ol>
  15. </div>
  16. </div>
  17. <div class="pull-right noprint">
  18. {% if perms.dcim.change_interface %}
  19. <a href="{% if interface.device %}{% url 'dcim:interface_edit' pk=interface.pk %}{% else %}{% url 'virtualization:interface_edit' pk=interface.pk %}{% endif %}" class="btn btn-warning">
  20. <span class="fa fa-pencil" aria-hidden="true"></span> Edit this interface
  21. </a>
  22. {% endif %}
  23. {% if perms.dcim.delete_interface %}
  24. <a href="{% if interface.device %}{% url 'dcim:interface_delete' pk=interface.pk %}{% else %}{% url 'virtualization:interface_delete' pk=interface.pk %}{% endif %}" class="btn btn-danger">
  25. <span class="fa fa-trash" aria-hidden="true"></span> Delete this interface
  26. </a>
  27. {% endif %}
  28. </div>
  29. <h1>{% block title %}{{ interface.parent }} / {{ interface.name }}{% endblock %}</h1>
  30. <ul class="nav nav-tabs">
  31. <li role="presentation"{% if not active_tab %} class="active"{% endif %}>
  32. <a href="{{ interface.get_absolute_url }}">Interface</a>
  33. </li>
  34. <li role="presentation"{% if active_tab == 'changelog' %} class="active"{% endif %}>
  35. <a href="{% url 'dcim:interface_changelog' pk=interface.pk %}">Changelog</a>
  36. </li>
  37. </ul>
  38. {% endblock %}
  39. {% block content %}
  40. <div class="row">
  41. <div class="col-md-6">
  42. <div class="panel panel-default">
  43. <div class="panel-heading">
  44. <strong>Interface</strong>
  45. </div>
  46. <table class="table table-hover panel-body attr-table">
  47. <tr>
  48. <td>{% if interface.device %}Device{% else %}Virtual Machine{% endif %}</td>
  49. <td>
  50. <a href="{{ interface.parent.get_absolute_url }}">{{ interface.parent }}</a>
  51. </td>
  52. </tr>
  53. <tr>
  54. <td>Name</td>
  55. <td>{{ interface.name }}</td>
  56. </tr>
  57. <tr>
  58. <td>Type</td>
  59. <td>{{ interface.get_form_factor_display }}</td>
  60. </tr>
  61. <tr>
  62. <td>Enabled</td>
  63. <td>
  64. {% if interface.enabled %}
  65. <span class="text-success"><i class="fa fa-check"></i></span>
  66. {% else %}
  67. <span class="text-danger"><i class="fa fa-close"></i></span>
  68. {% endif %}
  69. </td>
  70. </tr>
  71. <tr>
  72. <td>LAG</td>
  73. <td>
  74. {% if interface.lag%}
  75. <a href="{{ interface.lag.get_absolute_url }}">{{ interface.lag }}</a>
  76. {% else %}
  77. <span class="text-muted">None</span>
  78. {% endif %}
  79. </td>
  80. </tr>
  81. <tr>
  82. <td>Description</td>
  83. <td>{{ interface.description|placeholder }} </td>
  84. </tr>
  85. <tr>
  86. <td>MTU</td>
  87. <td>{{ interface.mtu|placeholder }}</td>
  88. </tr>
  89. <tr>
  90. <td>MAC Address</td>
  91. <td>{{ interface.mac_address|placeholder }}</span></td>
  92. </tr>
  93. <tr>
  94. <td>802.1Q Mode</td>
  95. <td>{{ interface.get_mode_display }}</td>
  96. </tr>
  97. </table>
  98. </div>
  99. {% include 'extras/inc/tags_panel.html' with tags=interface.tags.all %}
  100. </div>
  101. <div class="col-md-6">
  102. {% if interface.is_connectable %}
  103. <div class="panel panel-default">
  104. <div class="panel-heading">
  105. <strong>Connection</strong>
  106. </div>
  107. {% if interface.cable %}
  108. <table class="table table-hover panel-body attr-table">
  109. {% if connected_interface %}
  110. <tr>
  111. <td>Device</td>
  112. <td>
  113. <a href="{{ connected_interface.parent.get_absolute_url }}">{{ connected_interface.device }}</a>
  114. </td>
  115. </tr>
  116. <tr>
  117. <td>Name</td>
  118. <td>
  119. <a href="{{ connected_interface.get_absolute_url }}">{{ connected_interface.name }}</a>
  120. </td>
  121. </tr>
  122. <tr>
  123. <td>Type</td>
  124. <td>{{ connected_interface.get_form_factor_display }}</td>
  125. </tr>
  126. <tr>
  127. <td>Enabled</td>
  128. <td>
  129. {% if connected_interface.enabled %}
  130. <span class="text-success"><i class="fa fa-check"></i></span>
  131. {% else %}
  132. <span class="text-danger"><i class="fa fa-close"></i></span>
  133. {% endif %}
  134. </td>
  135. </tr>
  136. <tr>
  137. <td>LAG</td>
  138. <td>
  139. {% if connected_interface.lag%}
  140. <a href="{{ connected_interface.lag.get_absolute_url }}">{{ connected_interface.lag }}</a>
  141. {% else %}
  142. <span class="text-muted">None</span>
  143. {% endif %}
  144. </td>
  145. </tr>
  146. <tr>
  147. <td>Description</td>
  148. <td>{{ connected_interface.description|placeholder }}</td>
  149. </tr>
  150. <tr>
  151. <td>MTU</td>
  152. <td>{{ connected_interface.mtu|placeholder }}</td>
  153. </tr>
  154. <tr>
  155. <td>MAC Address</td>
  156. <td>{{ connected_interface.mac_address|placeholder }}</td>
  157. </tr>
  158. <tr>
  159. <td>802.1Q Mode</td>
  160. <td>{{ connected_interface.get_mode_display }}</td>
  161. </tr>
  162. {% elif connected_circuittermination %}
  163. {% with ct=connected_circuittermination %}
  164. <tr>
  165. <td>Provider</td>
  166. <td><a href="{{ ct.circuit.provider.get_absolute_url }}">{{ ct.circuit.provider }}</a></td>
  167. </tr>
  168. <tr>
  169. <td>Circuit</td>
  170. <td><a href="{{ ct.circuit.get_absolute_url }}">{{ ct.circuit }}</a></td>
  171. </tr>
  172. <tr>
  173. <td>Side</td>
  174. <td>{{ ct.term_side }}</td>
  175. </tr>
  176. {% endwith %}
  177. {% endif %}
  178. <tr>
  179. <td>Cable</td>
  180. <td>
  181. <a href="{{ interface.cable.get_absolute_url }}">{{ interface.cable }}</a>
  182. <a href="{% url 'dcim:interface_trace' pk=interface.pk %}" class="btn btn-primary btn-xs" title="Trace">
  183. <i class="fa fa-share-alt" aria-hidden="true"></i>
  184. </a>
  185. </td>
  186. </tr>
  187. <tr>
  188. <td>Connection Status</td>
  189. <td>
  190. {% if interface.connection_status %}
  191. <span class="label label-success">{{ interface.get_connection_status_display }}</span>
  192. {% else %}
  193. <span class="label label-info">{{ interface.get_connection_status_display }}</span>
  194. {% endif %}
  195. </td>
  196. </tr>
  197. </table>
  198. {% else %}
  199. <div class="panel-body text-muted">
  200. Not connected
  201. </div>
  202. {% endif %}
  203. </div>
  204. {% endif %}
  205. {% if interface.is_lag %}
  206. <div class="panel panel-default">
  207. <div class="panel-heading"><strong>LAG Members</strong></div>
  208. <table class="table table-hover table-headings panel-body">
  209. <thead>
  210. <tr>
  211. <th>Parent</th>
  212. <th>Interface</th>
  213. <th>Type</th>
  214. </tr>
  215. </thead>
  216. <tbody>
  217. {% for member in interface.member_interfaces.all %}
  218. <tr>
  219. <td>
  220. <a href="{{ member.parent.get_absolute_url }}">{{ member.parent }}</a>
  221. </td>
  222. <td>
  223. <a href="{{ member.get_absolute_url }}">{{ member }}</a>
  224. </td>
  225. <td>
  226. {{ member.get_form_factor_display }}
  227. </td>
  228. </tr>
  229. {% empty %}
  230. <tr>
  231. <td colspan="3" class="text-muted">No member interfaces</td>
  232. </tr>
  233. {% endfor %}
  234. </tbody>
  235. </table>
  236. </div>
  237. {% endif %}
  238. </div>
  239. </div>
  240. <div class="row">
  241. <div class="col-md-12">
  242. {% include 'panel_table.html' with table=ipaddress_table heading="IP Addresses" %}
  243. </div>
  244. </div>
  245. <div class="row">
  246. <div class="col-md-12">
  247. {% include 'panel_table.html' with table=vlan_table heading="VLANs" %}
  248. </div>
  249. </div>
  250. {% endblock %}