template_code.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. LINKTERMINATION = """
  2. {% for termination in value %}
  3. {% if termination.parent_object %}
  4. <a href="{{ termination.parent_object.get_absolute_url }}">{{ termination.parent_object }}</a>
  5. <i class="mdi mdi-chevron-right"></i>
  6. {% endif %}
  7. <a href="{{ termination.get_absolute_url }}">{{ termination }}</a>{% if not forloop.last %},{% endif %}
  8. {% empty %}
  9. {{ ''|placeholder }}
  10. {% endfor %}
  11. """
  12. CABLE_LENGTH = """
  13. {% load helpers %}
  14. {% if record.length %}{{ record.length|simplify_decimal }} {{ record.length_unit }}{% endif %}
  15. """
  16. DEVICE_LINK = """
  17. <a href="{% url 'dcim:device' pk=record.pk %}">
  18. {{ record.name|default:'<span class="badge bg-info">Unnamed device</span>' }}
  19. </a>
  20. """
  21. DEVICEBAY_STATUS = """
  22. {% if record.installed_device_id %}
  23. <span class="badge bg-{{ record.installed_device.get_status_color }}">
  24. {{ record.installed_device.get_status_display }}
  25. </span>
  26. {% else %}
  27. <span class="badge bg-secondary">Vacant</span>
  28. {% endif %}
  29. """
  30. INTERFACE_IPADDRESSES = """
  31. <div class="table-badge-group">
  32. {% for ip in record.ip_addresses.all %}
  33. {% if ip.status != 'active' %}
  34. <a href="{{ ip.get_absolute_url }}" class="table-badge badge bg-{{ ip.get_status_color }}" data-bs-toggle="tooltip" data-bs-placement="left" title="{{ ip.get_status_display }}">{{ ip }}</a>
  35. {% else %}
  36. <a href="{{ ip.get_absolute_url }}" class="table-badge">{{ ip }}</a>
  37. {% endif %}
  38. {% endfor %}
  39. </div>
  40. """
  41. INTERFACE_FHRPGROUPS = """
  42. <div class="table-badge-group">
  43. {% for assignment in value.all %}
  44. <a href="{{ assignment.group.get_absolute_url }}">{{ assignment.group.get_protocol_display }}: {{ assignment.group.group_id }}</a>
  45. {% endfor %}
  46. </div>
  47. """
  48. INTERFACE_TAGGED_VLANS = """
  49. {% if record.mode == 'tagged' %}
  50. {% for vlan in record.tagged_vlans.all %}
  51. <a href="{{ vlan.get_absolute_url }}">{{ vlan }}</a><br />
  52. {% endfor %}
  53. {% elif record.mode == 'tagged-all' %}
  54. All
  55. {% endif %}
  56. """
  57. INTERFACE_WIRELESS_LANS = """
  58. {% for wlan in record.wireless_lans.all %}
  59. <a href="{{ wlan.get_absolute_url }}">{{ wlan }}</a><br />
  60. {% endfor %}
  61. """
  62. POWERFEED_CABLE = """
  63. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  64. <a href="{% url 'dcim:powerfeed_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace">
  65. <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
  66. </a>
  67. """
  68. POWERFEED_CABLETERMINATION = """
  69. <a href="{{ value.parent_object.get_absolute_url }}">{{ value.parent_object }}</a>
  70. <i class="mdi mdi-chevron-right"></i>
  71. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  72. """
  73. LOCATION_BUTTONS = """
  74. <a href="{% url 'dcim:rack_elevation_list' %}?site={{ record.site.slug }}&location_id={{ record.pk }}" class="btn btn-sm btn-primary" title="View elevations">
  75. <i class="mdi mdi-server"></i>
  76. </a>
  77. """
  78. #
  79. # Device component templatebuttons
  80. #
  81. MODULAR_COMPONENT_TEMPLATE_BUTTONS = """
  82. {% load helpers %}
  83. {% if perms.dcim.add_inventoryitemtemplate and record.device_type_id %}
  84. <a href="{% url 'dcim:inventoryitemtemplate_add' %}?device_type={{ record.device_type_id }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={{ request.path }}" title="Add inventory item" class="btn btn-primary btn-sm">
  85. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  86. </a>
  87. {% endif %}
  88. """
  89. #
  90. # Device component buttons
  91. #
  92. CONSOLEPORT_BUTTONS = """
  93. {% if perms.dcim.add_inventoryitem %}
  94. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device_id }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-sm btn-success" title="Add inventory item">
  95. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  96. </a>
  97. {% endif %}
  98. {% if record.cable %}
  99. <a href="{% url 'dcim:consoleport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  100. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  101. {% if perms.dcim.delete_cable %}
  102. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  103. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  104. </a>
  105. {% endif %}
  106. {% elif perms.dcim.add_cable %}
  107. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  108. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  109. <span class="dropdown">
  110. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  111. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  112. </button>
  113. <ul class="dropdown-menu dropdown-menu-end">
  114. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleserverport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Console Server Port</a></li>
  115. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleport&a_terminations={{ record.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Front Port</a></li>
  116. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleport&a_terminations={{ record.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Rear Port</a></li>
  117. </ul>
  118. </span>
  119. {% else %}
  120. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  121. {% endif %}
  122. """
  123. CONSOLESERVERPORT_BUTTONS = """
  124. {% if perms.dcim.add_inventoryitem %}
  125. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device_id }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-sm btn-success" title="Add inventory item">
  126. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  127. </a>
  128. {% endif %}
  129. {% if record.cable %}
  130. <a href="{% url 'dcim:consoleserverport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  131. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  132. {% if perms.dcim.delete_cable %}
  133. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  134. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  135. </a>
  136. {% endif %}
  137. {% elif perms.dcim.add_cable %}
  138. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  139. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  140. <span class="dropdown">
  141. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  142. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  143. </button>
  144. <ul class="dropdown-menu dropdown-menu-end">
  145. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleserverport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Console Port</a></li>
  146. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleserverport&a_terminations={{ record.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Front Port</a></li>
  147. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleserverport&a_terminations={{ record.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Rear Port</a></li>
  148. </ul>
  149. </span>
  150. {% else %}
  151. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  152. {% endif %}
  153. """
  154. POWERPORT_BUTTONS = """
  155. {% if perms.dcim.add_inventoryitem %}
  156. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device_id }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-sm btn-primary" title="Add inventory item">
  157. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  158. </a>
  159. {% endif %}
  160. {% if record.cable %}
  161. <a href="{% url 'dcim:powerport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  162. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  163. {% if perms.dcim.delete_cable %}
  164. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  165. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  166. </a>
  167. {% endif %}
  168. {% elif perms.dcim.add_cable %}
  169. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  170. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  171. <span class="dropdown">
  172. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  173. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  174. </button>
  175. <ul class="dropdown-menu dropdown-menu-end">
  176. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.powerport&a_terminations={{ record.pk }}&b_terminations_type=dcim.poweroutlet&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_powerports' pk=object.pk %}">Power Outlet</a></li>
  177. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.powerport&a_terminations={{ record.pk }}&b_terminations_type=dcim.powerfeed&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_powerports' pk=object.pk %}">Power Feed</a></li>
  178. </ul>
  179. </span>
  180. {% else %}
  181. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  182. {% endif %}
  183. """
  184. POWEROUTLET_BUTTONS = """
  185. {% if perms.dcim.add_inventoryitem %}
  186. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device_id }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-sm btn-primary" title="Add inventory item">
  187. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  188. </a>
  189. {% endif %}
  190. {% if record.cable %}
  191. <a href="{% url 'dcim:poweroutlet_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  192. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  193. {% if perms.dcim.delete_cable %}
  194. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  195. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  196. </a>
  197. {% endif %}
  198. {% elif perms.dcim.add_cable %}
  199. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  200. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  201. {% if not record.mark_connected %}
  202. <a href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.poweroutlet&a_terminations={{ record.pk }}&b_terminations_type=dcim.powerport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" title="Connect" class="btn btn-success btn-sm">
  203. <i class="mdi mdi-ethernet-cable" aria-hidden="true"></i>
  204. </a>
  205. {% else %}
  206. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  207. {% endif %}
  208. {% endif %}
  209. """
  210. INTERFACE_BUTTONS = """
  211. {% if perms.dcim.edit_interface %}
  212. <span class="dropdown">
  213. <button type="button" class="btn btn-primary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="Add">
  214. <span class="mdi mdi-plus-thick" aria-hidden="true"></span>
  215. </button>
  216. <ul class="dropdown-menu dropdown-menu-end">
  217. {% if perms.ipam.add_ipaddress %}
  218. <li><a class="dropdown-item" href="{% url 'ipam:ipaddress_add' %}?interface={{ record.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">IP Address</a></li>
  219. {% endif %}
  220. {% if perms.dcim.add_inventoryitem %}
  221. <li><a class="dropdown-item" href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device_id }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Inventory Item</a></li>
  222. {% endif %}
  223. {% if perms.dcim.add_interface %}
  224. <li><a class="dropdown-item" href="{% url 'dcim:interface_add' %}?device={{ record.device_id }}&parent={{ record.pk }}&name_pattern={{ record.name }}.&type=virtual&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Child Interface</a></li>
  225. {% endif %}
  226. {% if perms.ipam.add_l2vpntermination %}
  227. <li><a class="dropdown-item" href="{% url 'ipam:l2vpntermination_add' %}?device={{ object.pk }}&interface={{ record.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">L2VPN Termination</a></li>
  228. {% endif %}
  229. {% if perms.ipam.add_fhrpgroupassignment %}
  230. <li><a class="dropdown-item" href="{% url 'ipam:fhrpgroupassignment_add' %}?interface_type={{ record|content_type_id }}&interface_id={{ record.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Assign FHRP Group</a></li>
  231. {% endif %}
  232. </ul>
  233. </span>
  234. {% endif %}
  235. {% if record.link %}
  236. <a href="{% url 'dcim:interface_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  237. {% endif %}
  238. {% if record.cable %}
  239. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  240. {% if perms.dcim.delete_cable %}
  241. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  242. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  243. </a>
  244. {% endif %}
  245. {% elif record.wireless_link %}
  246. {% if perms.wireless.delete_wirelesslink %}
  247. <a href="{% url 'wireless:wirelesslink_delete' pk=record.wireless_link.pk %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}" title="Delete wireless link" class="btn btn-danger btn-sm">
  248. <i class="mdi mdi-wifi-off" aria-hidden="true"></i>
  249. </a>
  250. {% endif %}
  251. {% elif record.is_wired and perms.dcim.add_cable %}
  252. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  253. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  254. {% if not record.mark_connected %}
  255. <span class="dropdown">
  256. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="Connect cable">
  257. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  258. </button>
  259. <ul class="dropdown-menu dropdown-menu-end">
  260. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.interface&a_terminations={{ record.pk }}&b_terminations_type=dcim.interface&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Interface</a></li>
  261. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.interface&a_terminations={{ record.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Front Port</a></li>
  262. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.interface&a_terminations={{ record.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Rear Port</a></li>
  263. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.interface&a_terminations={{ record.pk }}&b_terminations_type=circuits.circuittermination&termination_b_site={{ object.site.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Circuit Termination</a></li>
  264. </ul>
  265. </span>
  266. {% else %}
  267. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  268. {% endif %}
  269. {% elif record.is_wireless and perms.wireless.add_wirelesslink %}
  270. <a href="{% url 'wireless:wirelesslink_add' %}?site_a={{ record.device.site.pk }}&location_a={{ record.device.location.pk }}&device_a={{ record.device_id }}&interface_a={{ record.pk }}&site_b={{ record.device.site.pk }}&location_b={{ record.device.location.pk }}" class="btn btn-success btn-sm">
  271. <span class="mdi mdi-wifi-plus" aria-hidden="true"></span>
  272. </a>
  273. {% endif %}
  274. """
  275. FRONTPORT_BUTTONS = """
  276. {% if perms.dcim.add_inventoryitem %}
  277. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device_id }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-sm btn-primary" title="Add inventory item">
  278. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  279. </a>
  280. {% endif %}
  281. {% if record.cable %}
  282. <a href="{% url 'dcim:frontport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  283. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  284. {% if perms.dcim.delete_cable %}
  285. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  286. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  287. </a>
  288. {% endif %}
  289. {% elif perms.dcim.add_cable %}
  290. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  291. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  292. {% if not record.mark_connected %}
  293. <span class="dropdown">
  294. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  295. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  296. </button>
  297. <ul class="dropdown-menu dropdown-menu-end">
  298. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=dcim.interface&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Interface</a></li>
  299. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleserverport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Console Server Port</a></li>
  300. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Console Port</a></li>
  301. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Front Port</a></li>
  302. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Rear Port</a></li>
  303. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=circuits.circuittermination&termination_b_site={{ object.site.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Circuit Termination</a></li>
  304. </ul>
  305. </span>
  306. {% else %}
  307. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  308. {% endif %}
  309. {% endif %}
  310. """
  311. REARPORT_BUTTONS = """
  312. {% if perms.dcim.add_inventoryitem %}
  313. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device_id }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-sm btn-primary" title="Add inventory item">
  314. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  315. </a>
  316. {% endif %}
  317. {% if record.cable %}
  318. <a href="{% url 'dcim:rearport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  319. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  320. {% if perms.dcim.delete_cable %}
  321. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  322. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  323. </a>
  324. {% endif %}
  325. {% elif perms.dcim.add_cable %}
  326. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  327. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  328. {% if not record.mark_connected %}
  329. <span class="dropdown">
  330. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  331. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  332. </button>
  333. <ul class="dropdown-menu dropdown-menu-end">
  334. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=dcim.interface&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Interface</a></li>
  335. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleserverport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Console Server Port</a></li>
  336. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Console Port</a></li>
  337. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Front Port</a></li>
  338. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Rear Port</a></li>
  339. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=circuits.circuittermination&termination_b_site={{ object.site.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Circuit Termination</a></li>
  340. </ul>
  341. </span>
  342. {% else %}
  343. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  344. {% endif %}
  345. {% endif %}
  346. """
  347. DEVICEBAY_BUTTONS = """
  348. {% if perms.dcim.change_devicebay %}
  349. {% if record.installed_device %}
  350. <a href="{% url 'dcim:devicebay_depopulate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-danger btn-sm">
  351. <i class="mdi mdi-server-minus" aria-hidden="true" title="Remove device"></i>
  352. </a>
  353. {% else %}
  354. <a href="{% url 'dcim:devicebay_populate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-success btn-sm">
  355. <i class="mdi mdi-server-plus" aria-hidden="true" title="Install device"></i>
  356. </a>
  357. {% endif %}
  358. {% endif %}
  359. """
  360. MODULEBAY_BUTTONS = """
  361. {% if perms.dcim.add_module %}
  362. {% if record.installed_module %}
  363. <a href="{% url 'dcim:module_delete' pk=record.installed_module.pk %}?return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-danger btn-sm">
  364. <i class="mdi mdi-server-minus" aria-hidden="true" title="Remove module"></i>
  365. </a>
  366. {% else %}
  367. <a href="{% url 'dcim:module_add' %}?device={{ record.device_id }}&module_bay={{ record.pk }}&manufacturer={{ object.device_type.manufacturer_id }}&return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-success btn-sm">
  368. <i class="mdi mdi-server-plus" aria-hidden="true" title="Install module"></i>
  369. </a>
  370. {% endif %}
  371. {% endif %}
  372. """