template_code.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  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. <a
  40. class="table-badge{% if ip.status != 'active' %} badge bg-{{ ip.get_status_class }}{% elif ip.role %} badge bg-{{ ip.get_role_class }}{% endif %}"
  41. href="{{ ip.get_absolute_url }}"
  42. {% if ip.status != 'active'%}data-bs-toggle="tooltip" data-bs-placement="left" title="{{ ip.get_status_display }}"
  43. {% elif ip.role %}data-bs-toggle="tooltip" data-bs-placement="left" title="{{ ip.get_role_display }}"
  44. {% endif %}
  45. >
  46. {{ ip }}
  47. </a>
  48. {% endfor %}
  49. </div>
  50. """
  51. INTERFACE_TAGGED_VLANS = """
  52. {% if record.mode == 'tagged' %}
  53. {% for vlan in record.tagged_vlans.all %}
  54. <a href="{{ vlan.get_absolute_url }}">{{ vlan }}</a><br />
  55. {% endfor %}
  56. {% elif record.mode == 'tagged-all' %}
  57. All
  58. {% endif %}
  59. """
  60. POWERFEED_CABLE = """
  61. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  62. <a href="{% url 'dcim:powerfeed_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace">
  63. <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
  64. </a>
  65. """
  66. POWERFEED_CABLETERMINATION = """
  67. <a href="{{ value.parent_object.get_absolute_url }}">{{ value.parent_object }}</a>
  68. <i class="mdi mdi-chevron-right"></i>
  69. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  70. """
  71. LOCATION_ELEVATIONS = """
  72. <a href="{% url 'dcim:rack_elevation_list' %}?site={{ record.site.slug }}&location_id={{ record.pk }}" class="btn btn-sm btn-primary" title="View elevations">
  73. <i class="mdi mdi-server"></i>
  74. </a>
  75. """
  76. #
  77. # Device component buttons
  78. #
  79. CONSOLEPORT_BUTTONS = """
  80. {% if record.cable %}
  81. <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>
  82. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  83. {% if perms.dcim.delete_cable %}
  84. <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">
  85. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  86. </a>
  87. {% endif %}
  88. {% elif perms.dcim.add_cable %}
  89. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  90. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  91. <span class="dropdown">
  92. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  93. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  94. </button>
  95. <ul class="dropdown-menu dropdown-menu-end">
  96. <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>
  97. <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>
  98. <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>
  99. </ul>
  100. </span>
  101. {% else %}
  102. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  103. {% endif %}
  104. """
  105. CONSOLESERVERPORT_BUTTONS = """
  106. {% if record.cable %}
  107. <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>
  108. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  109. {% if perms.dcim.delete_cable %}
  110. <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">
  111. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  112. </a>
  113. {% endif %}
  114. {% elif perms.dcim.add_cable %}
  115. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  116. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  117. <span class="dropdown">
  118. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  119. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  120. </button>
  121. <ul class="dropdown-menu dropdown-menu-end">
  122. <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>
  123. <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>
  124. <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>
  125. </ul>
  126. </span>
  127. {% else %}
  128. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  129. {% endif %}
  130. """
  131. POWERPORT_BUTTONS = """
  132. {% if record.cable %}
  133. <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>
  134. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  135. {% if perms.dcim.delete_cable %}
  136. <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">
  137. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  138. </a>
  139. {% endif %}
  140. {% elif perms.dcim.add_cable %}
  141. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  142. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  143. <span class="dropdown">
  144. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  145. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  146. </button>
  147. <ul class="dropdown-menu dropdown-menu-end">
  148. <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>
  149. <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>
  150. </ul>
  151. </span>
  152. {% else %}
  153. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  154. {% endif %}
  155. """
  156. POWEROUTLET_BUTTONS = """
  157. {% if record.cable %}
  158. <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>
  159. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  160. {% if perms.dcim.delete_cable %}
  161. <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">
  162. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  163. </a>
  164. {% endif %}
  165. {% elif perms.dcim.add_cable %}
  166. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  167. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  168. {% if not record.mark_connected %}
  169. <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">
  170. <i class="mdi mdi-ethernet-cable" aria-hidden="true"></i>
  171. </a>
  172. {% else %}
  173. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  174. {% endif %}
  175. {% endif %}
  176. """
  177. INTERFACE_BUTTONS = """
  178. {% if perms.ipam.add_ipaddress %}
  179. <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">
  180. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  181. </a>
  182. {% endif %}
  183. {% if record.cable %}
  184. <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>
  185. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  186. {% if perms.dcim.delete_cable %}
  187. <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">
  188. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  189. </a>
  190. {% endif %}
  191. {% elif record.is_connectable and perms.dcim.add_cable %}
  192. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  193. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  194. {% if not record.mark_connected %}
  195. <span class="dropdown">
  196. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  197. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  198. </button>
  199. <ul class="dropdown-menu dropdown-menu-end">
  200. <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>
  201. <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>
  202. <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>
  203. <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>
  204. </ul>
  205. </span>
  206. {% else %}
  207. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  208. {% endif %}
  209. {% endif %}
  210. """
  211. FRONTPORT_BUTTONS = """
  212. {% if record.cable %}
  213. <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>
  214. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  215. {% if perms.dcim.delete_cable %}
  216. <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">
  217. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  218. </a>
  219. {% endif %}
  220. {% elif perms.dcim.add_cable %}
  221. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  222. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  223. {% if not record.mark_connected %}
  224. <span class="dropdown">
  225. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  226. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  227. </button>
  228. <ul class="dropdown-menu dropdown-menu-end">
  229. <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>
  230. <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>
  231. <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>
  232. <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>
  233. <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>
  234. <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>
  235. </ul>
  236. </span>
  237. {% else %}
  238. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  239. {% endif %}
  240. {% endif %}
  241. """
  242. REARPORT_BUTTONS = """
  243. {% if record.cable %}
  244. <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>
  245. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  246. {% if perms.dcim.delete_cable %}
  247. <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">
  248. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  249. </a>
  250. {% endif %}
  251. {% elif 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">
  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:rearport_connect' termination_a_id=record.pk termination_b_type='interface' %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}">Interface</a></li>
  261. <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>
  262. <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>
  263. <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>
  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. {% endif %}
  270. """
  271. DEVICEBAY_BUTTONS = """
  272. {% if perms.dcim.change_devicebay %}
  273. {% if record.installed_device %}
  274. <a href="{% url 'dcim:devicebay_depopulate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-danger btn-sm">
  275. <i class="mdi mdi-minus-thick" aria-hidden="true" title="Remove device"></i>
  276. </a>
  277. {% else %}
  278. <a href="{% url 'dcim:devicebay_populate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-success btn-sm">
  279. <i class="mdi mdi-plus-thick" aria-hidden="true" title="Install device"></i>
  280. </a>
  281. {% endif %}
  282. {% endif %}
  283. """