template_code.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. CABLETERMINATION = """
  2. {% if value %}
  3. {% if value.parent_object %}
  4. <a href="{{ value.parent_object.get_absolute_url }}">{{ value.parent_object }}</a>
  5. <i class="mdi mdi-chevron-right"></i>
  6. {% endif %}
  7. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  8. {% endif %}
  9. """
  10. CABLE_LENGTH = """
  11. {% if record.length %}{{ record.length }} {{ record.get_length_unit_display }}{% endif %}
  12. """
  13. CABLE_TERMINATION_PARENT = """
  14. {% if value.device %}
  15. <a href="{{ value.device.get_absolute_url }}">{{ value.device }}</a>
  16. {% elif value.circuit %}
  17. <a href="{{ value.circuit.get_absolute_url }}">{{ value.circuit }}</a>
  18. {% elif value.power_panel %}
  19. <a href="{{ value.power_panel.get_absolute_url }}">{{ value.power_panel }}</a>
  20. {% endif %}
  21. """
  22. DEVICE_LINK = """
  23. <a href="{% url 'dcim:device' pk=record.pk %}">
  24. {{ record.name|default:'<span class="badge bg-info">Unnamed device</span>' }}
  25. </a>
  26. """
  27. DEVICEBAY_STATUS = """
  28. {% if record.installed_device_id %}
  29. <span class="badge bg-{{ record.installed_device.get_status_class }}">
  30. {{ record.installed_device.get_status_display }}
  31. </span>
  32. {% else %}
  33. <span class="badge bg-secondary">Vacant</span>
  34. {% endif %}
  35. """
  36. INTERFACE_IPADDRESSES = """
  37. <div class="table-badge-group">
  38. {% for ip in record.ip_addresses.all %}
  39. {% if ip.status != 'active' %}
  40. <a href="{{ ip.get_absolute_url }}" class="table-badge badge bg-{{ ip.get_status_class }}" data-bs-toggle="tooltip" data-bs-placement="left" title="{{ ip.get_status_display }}">{{ ip }}</a>
  41. {% else %}
  42. <a href="{{ ip.get_absolute_url }}" class="table-badge">{{ ip }}</a>
  43. {% endif %}
  44. {% endfor %}
  45. </div>
  46. """
  47. INTERFACE_TAGGED_VLANS = """
  48. {% if record.mode == 'tagged' %}
  49. {% for vlan in record.tagged_vlans.all %}
  50. <a href="{{ vlan.get_absolute_url }}">{{ vlan }}</a><br />
  51. {% endfor %}
  52. {% elif record.mode == 'tagged-all' %}
  53. All
  54. {% endif %}
  55. """
  56. POWERFEED_CABLE = """
  57. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  58. <a href="{% url 'dcim:powerfeed_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace">
  59. <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
  60. </a>
  61. """
  62. POWERFEED_CABLETERMINATION = """
  63. <a href="{{ value.parent_object.get_absolute_url }}">{{ value.parent_object }}</a>
  64. <i class="mdi mdi-chevron-right"></i>
  65. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  66. """
  67. LOCATION_ELEVATIONS = """
  68. <a href="{% url 'dcim:rack_elevation_list' %}?site={{ record.site.slug }}&location_id={{ record.pk }}" class="btn btn-sm btn-primary" title="View elevations">
  69. <i class="mdi mdi-server"></i>
  70. </a>
  71. """
  72. #
  73. # Device component buttons
  74. #
  75. CONSOLEPORT_BUTTONS = """
  76. {% if record.cable %}
  77. <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>
  78. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  79. {% if perms.dcim.delete_cable %}
  80. <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">
  81. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  82. </a>
  83. {% endif %}
  84. {% elif perms.dcim.add_cable %}
  85. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  86. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  87. <span class="dropdown">
  88. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  89. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  90. </button>
  91. <ul class="dropdown-menu dropdown-menu-end">
  92. <li><a class="dropdown-item" href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='console-server-port' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Console Server Port</a></li>
  93. <li><a class="dropdown-item" href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Front Port</a></li>
  94. <li><a class="dropdown-item" href="{% url 'dcim:consoleport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Rear Port</a></li>
  95. </ul>
  96. </span>
  97. {% else %}
  98. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  99. {% endif %}
  100. """
  101. CONSOLESERVERPORT_BUTTONS = """
  102. {% if record.cable %}
  103. <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>
  104. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  105. {% if perms.dcim.delete_cable %}
  106. <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">
  107. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  108. </a>
  109. {% endif %}
  110. {% elif perms.dcim.add_cable %}
  111. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  112. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  113. <span class="dropdown">
  114. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  115. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  116. </button>
  117. <ul class="dropdown-menu dropdown-menu-end">
  118. <li><a class="dropdown-item" href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='console-port' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Console Port</a></li>
  119. <li><a class="dropdown-item" href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Front Port</a></li>
  120. <li><a class="dropdown-item" href="{% url 'dcim:consoleserverport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Rear Port</a></li>
  121. </ul>
  122. </span>
  123. {% else %}
  124. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  125. {% endif %}
  126. """
  127. POWERPORT_BUTTONS = """
  128. {% if record.cable %}
  129. <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>
  130. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  131. {% if perms.dcim.delete_cable %}
  132. <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">
  133. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  134. </a>
  135. {% endif %}
  136. {% elif perms.dcim.add_cable %}
  137. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  138. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  139. <span class="dropdown">
  140. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  141. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  142. </button>
  143. <ul class="dropdown-menu dropdown-menu-end">
  144. <li><a class="dropdown-item" href="{% url 'dcim:powerport_connect' termination_a_id=record.pk termination_b_type='power-outlet' %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}">Power Outlet</a></li>
  145. <li><a class="dropdown-item" href="{% url 'dcim:powerport_connect' termination_a_id=record.pk termination_b_type='power-feed' %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}">Power Feed</a></li>
  146. </ul>
  147. </span>
  148. {% else %}
  149. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  150. {% endif %}
  151. """
  152. POWEROUTLET_BUTTONS = """
  153. {% if record.cable %}
  154. <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>
  155. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  156. {% if perms.dcim.delete_cable %}
  157. <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">
  158. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  159. </a>
  160. {% endif %}
  161. {% elif perms.dcim.add_cable %}
  162. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  163. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  164. {% if not record.mark_connected %}
  165. <a href="{% url 'dcim:poweroutlet_connect' termination_a_id=record.pk termination_b_type='power-port' %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" title="Connect" class="btn btn-success btn-sm">
  166. <i class="mdi mdi-ethernet-cable" aria-hidden="true"></i>
  167. </a>
  168. {% else %}
  169. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  170. {% endif %}
  171. {% endif %}
  172. """
  173. INTERFACE_BUTTONS = """
  174. {% if perms.ipam.add_ipaddress %}
  175. <a href="{% url 'ipam:ipaddress_add' %}?interface={{ record.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}" class="btn btn-sm btn-success" title="Add IP address">
  176. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  177. </a>
  178. {% endif %}
  179. {% if record.cable %}
  180. <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>
  181. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  182. {% if perms.dcim.delete_cable %}
  183. <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">
  184. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  185. </a>
  186. {% endif %}
  187. {% elif record.is_connectable and perms.dcim.add_cable %}
  188. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  189. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  190. {% if not record.mark_connected %}
  191. <span class="dropdown">
  192. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  193. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  194. </button>
  195. <ul class="dropdown-menu dropdown-menu-end">
  196. <li><a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Interface</a></li>
  197. <li><a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Front Port</a></li>
  198. <li><a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Rear Port</a></li>
  199. <li><a class="dropdown-item" href="{% url 'dcim:interface_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Circuit Termination</a></li>
  200. </ul>
  201. </span>
  202. {% else %}
  203. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  204. {% endif %}
  205. {% endif %}
  206. """
  207. FRONTPORT_BUTTONS = """
  208. {% if record.cable %}
  209. <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>
  210. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  211. {% if perms.dcim.delete_cable %}
  212. <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">
  213. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  214. </a>
  215. {% endif %}
  216. {% elif perms.dcim.add_cable %}
  217. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  218. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  219. {% if not record.mark_connected %}
  220. <span class="dropdown">
  221. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  222. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  223. </button>
  224. <ul class="dropdown-menu dropdown-menu-end">
  225. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Interface</a></li>
  226. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='console-server-port' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Console Server Port</a></li>
  227. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='console-port' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Console Port</a></li>
  228. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Front Port</a></li>
  229. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Rear Port</a></li>
  230. <li><a class="dropdown-item" href="{% url 'dcim:frontport_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}">Circuit Termination</a></li>
  231. </ul>
  232. </span>
  233. {% else %}
  234. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  235. {% endif %}
  236. {% endif %}
  237. """
  238. REARPORT_BUTTONS = """
  239. {% if record.cable %}
  240. <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>
  241. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  242. {% if perms.dcim.delete_cable %}
  243. <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">
  244. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  245. </a>
  246. {% endif %}
  247. {% elif perms.dcim.add_cable %}
  248. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  249. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  250. {% if not record.mark_connected %}
  251. <span class="dropdown">
  252. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  253. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  254. </button>
  255. <ul class="dropdown-menu dropdown-menu-end">
  256. <li><a class="dropdown-item" href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}">Interface</a></li>
  257. <li><a class="dropdown-item" href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='front-port' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}">Front Port</a></li>
  258. <li><a class="dropdown-item" href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='rear-port' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}">Rear Port</a></li>
  259. <li><a class="dropdown-item" href="{% url 'dcim:rearport_connect' termination_a_id=record.pk termination_b_type='circuit-termination' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}">Circuit Termination</a></li>
  260. </ul>
  261. </span>
  262. {% else %}
  263. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  264. {% endif %}
  265. {% endif %}
  266. """
  267. DEVICEBAY_BUTTONS = """
  268. {% if perms.dcim.change_devicebay %}
  269. {% if record.installed_device %}
  270. <a href="{% url 'dcim:devicebay_depopulate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-danger btn-sm">
  271. <i class="mdi mdi-minus-thick" aria-hidden="true" title="Remove device"></i>
  272. </a>
  273. {% else %}
  274. <a href="{% url 'dcim:devicebay_populate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-success btn-sm">
  275. <i class="mdi mdi-plus-thick" aria-hidden="true" title="Install device"></i>
  276. </a>
  277. {% endif %}
  278. {% endif %}
  279. """