template_code.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. CABLETERMINATION = """
  2. {% if value %}
  3. <a href="{{ value.parent.get_absolute_url }}">{{ value.parent }}</a>
  4. <i class="mdi mdi-chevron-right"></i>
  5. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  6. {% else %}
  7. &mdash;
  8. {% endif %}
  9. """
  10. CABLE_LENGTH = """
  11. {% if record.length %}{{ record.length }} {{ record.get_length_unit_display }}{% else %}&mdash;{% 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. {% for ip in record.ip_addresses.all %}
  38. <a href="{{ ip.get_absolute_url }}">{{ ip }}</a><br />
  39. {% endfor %}
  40. """
  41. INTERFACE_TAGGED_VLANS = """
  42. {% if record.mode == 'tagged' %}
  43. {% for vlan in record.tagged_vlans.all %}
  44. <a href="{{ vlan.get_absolute_url }}">{{ vlan }}</a><br />
  45. {% endfor %}
  46. {% elif record.mode == 'tagged-all' %}
  47. All
  48. {% else %}
  49. &mdash;
  50. {% endif %}
  51. """
  52. MPTT_LINK = """
  53. {% for i in record.get_ancestors %}
  54. <i class="mdi mdi-circle-small"></i>
  55. {% endfor %}
  56. <a href="{{ record.get_absolute_url }}">{{ record.name }}</a>
  57. """
  58. POWERFEED_CABLE = """
  59. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  60. <a href="{% url 'dcim:powerfeed_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace">
  61. <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
  62. </a>
  63. """
  64. POWERFEED_CABLETERMINATION = """
  65. <a href="{{ value.parent.get_absolute_url }}">{{ value.parent }}</a>
  66. <i class="mdi mdi-chevron-right"></i>
  67. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  68. """
  69. RACKGROUP_ELEVATIONS = """
  70. <a href="{% url 'dcim:rack_elevation_list' %}?site={{ record.site.slug }}&group_id={{ record.pk }}" class="btn btn-sm btn-primary" title="View elevations">
  71. <i class="mdi mdi-server"></i>
  72. </a>
  73. """
  74. UTILIZATION_GRAPH = """
  75. {% load helpers %}
  76. {% utilization_graph value %}
  77. """
  78. #
  79. # Device component buttons
  80. #
  81. CONSOLEPORT_BUTTONS = """
  82. {% if record.cable %}
  83. <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>
  84. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  85. {% if perms.dcim.delete_cable %}
  86. <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">
  87. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  88. </a>
  89. {% endif %}
  90. {% elif perms.dcim.add_cable %}
  91. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  92. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  93. <span class="dropdown">
  94. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  95. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  96. </button>
  97. <ul class="dropdown-menu dropdown-menu-end">
  98. <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>
  99. <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>
  100. <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>
  101. </ul>
  102. </span>
  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. {% endif %}
  128. """
  129. POWERPORT_BUTTONS = """
  130. {% if record.cable %}
  131. <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>
  132. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  133. {% if perms.dcim.delete_cable %}
  134. <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">
  135. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  136. </a>
  137. {% endif %}
  138. {% elif perms.dcim.add_cable %}
  139. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  140. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  141. <span class="dropdown">
  142. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  143. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  144. </button>
  145. <ul class="dropdown-menu dropdown-menu-end">
  146. <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>
  147. <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>
  148. </ul>
  149. </span>
  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. <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">
  165. <i class="mdi mdi-ethernet-cable" aria-hidden="true"></i>
  166. </a>
  167. {% endif %}
  168. """
  169. INTERFACE_BUTTONS = """
  170. {% if perms.ipam.add_ipaddress %}
  171. <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">
  172. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  173. </a>
  174. {% endif %}
  175. {% if record.cable %}
  176. <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>
  177. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  178. {% if perms.dcim.delete_cable %}
  179. <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">
  180. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  181. </a>
  182. {% endif %}
  183. {% elif record.is_connectable and perms.dcim.add_cable %}
  184. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  185. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  186. <span class="dropdown">
  187. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  188. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  189. </button>
  190. <ul class="dropdown-menu dropdown-menu-end">
  191. <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>
  192. <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>
  193. <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>
  194. <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>
  195. </ul>
  196. </span>
  197. {% endif %}
  198. """
  199. FRONTPORT_BUTTONS = """
  200. {% if record.cable %}
  201. <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>
  202. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  203. {% if perms.dcim.delete_cable %}
  204. <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">
  205. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  206. </a>
  207. {% endif %}
  208. {% elif perms.dcim.add_cable %}
  209. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  210. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  211. <span class="dropdown">
  212. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  213. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  214. </button>
  215. <ul class="dropdown-menu dropdown-menu-end">
  216. <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>
  217. <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>
  218. <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>
  219. <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>
  220. <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>
  221. <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>
  222. </ul>
  223. </span>
  224. {% endif %}
  225. """
  226. REARPORT_BUTTONS = """
  227. {% if record.cable %}
  228. <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>
  229. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  230. {% if perms.dcim.delete_cable %}
  231. <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">
  232. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  233. </a>
  234. {% endif %}
  235. {% elif perms.dcim.add_cable %}
  236. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  237. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  238. <span class="dropdown">
  239. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  240. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  241. </button>
  242. <ul class="dropdown-menu dropdown-menu-end">
  243. <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>
  244. <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>
  245. <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>
  246. <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>
  247. </ul>
  248. </span>
  249. {% endif %}
  250. """
  251. DEVICEBAY_BUTTONS = """
  252. {% if perms.dcim.change_devicebay %}
  253. {% if record.installed_device %}
  254. <a href="{% url 'dcim:devicebay_depopulate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-danger btn-sm">
  255. <i class="mdi mdi-minus-thick" aria-hidden="true" title="Remove device"></i>
  256. </a>
  257. {% else %}
  258. <a href="{% url 'dcim:devicebay_populate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-success btn-sm">
  259. <i class="mdi mdi-plus-thick" aria-hidden="true" title="Install device"></i>
  260. </a>
  261. {% endif %}
  262. {% endif %}
  263. """