ipaddress.html 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. {% extends 'generic/object.html' %}
  2. {% load helpers %}
  3. {% load plugins %}
  4. {% load render_table from django_tables2 %}
  5. {% block breadcrumbs %}
  6. {{ block.super }}
  7. {% if object.vrf %}
  8. <li class="breadcrumb-item"><a href="{% url 'ipam:ipaddress_list' %}?vrf_id={{ object.vrf.pk }}">{{ object.vrf }}</a></li>
  9. {% endif %}
  10. {% endblock %}
  11. {% block content %}
  12. <div class="row">
  13. <div class="col col-md-4">
  14. <div class="card">
  15. <h5 class="card-header">
  16. IP Address
  17. </h5>
  18. <div class="card-body">
  19. <table class="table table-hover attr-table">
  20. <tr>
  21. <th scope="row">Family</th>
  22. <td>IPv{{ object.family }}</td>
  23. </tr>
  24. <tr>
  25. <th scope="row">VRF</th>
  26. <td>
  27. {% if object.vrf %}
  28. <a href="{% url 'ipam:vrf' pk=object.vrf.pk %}">{{ object.vrf }}</a>
  29. {% else %}
  30. <span>Global</span>
  31. {% endif %}
  32. </td>
  33. </tr>
  34. <tr>
  35. <th scope="row">Tenant</th>
  36. <td>
  37. {% if object.tenant %}
  38. {% if object.tenant.group %}
  39. <a href="{{ object.tenant.group.get_absolute_url }}">{{ object.tenant.group }}</a> /
  40. {% endif %}
  41. <a href="{{ object.tenant.get_absolute_url }}">{{ object.tenant }}</a>
  42. {% else %}
  43. <span class="text-muted">None</span>
  44. {% endif %}
  45. </td>
  46. </tr>
  47. <tr>
  48. <th scope="row">Status</th>
  49. <td>
  50. <span class="badge bg-{{ object.get_status_class }}">{{ object.get_status_display }}</span>
  51. </td>
  52. </tr>
  53. <tr>
  54. <th scope="row">Role</th>
  55. <td>
  56. {% if object.role %}
  57. <a href="{% url 'ipam:ipaddress_list' %}?role={{ object.role }}">{{ object.get_role_display }}</a>
  58. {% else %}
  59. <span class="text-muted">None</span>
  60. {% endif %}
  61. </td>
  62. </tr>
  63. <tr>
  64. <th scope="row">DNS Name</th>
  65. <td>{{ object.dns_name|placeholder }}</td>
  66. </tr>
  67. <tr>
  68. <th scope="row">Description</th>
  69. <td>{{ object.description|placeholder }}</td>
  70. </tr>
  71. <tr>
  72. <th scope="row">Assignment</th>
  73. <td>
  74. {% if object.assigned_object %}
  75. {% if object.assigned_object.parent_object %}
  76. <a href="{{ object.assigned_object.parent_object.get_absolute_url }}">{{ object.assigned_object.parent_object }}</a> /
  77. {% endif %}
  78. <a href="{{ object.assigned_object.get_absolute_url }}">{{ object.assigned_object }}
  79. {% else %}
  80. <span class="text-muted">&mdash;</span>
  81. {% endif %}
  82. </td>
  83. </tr>
  84. <tr>
  85. <th scope="row">NAT (inside)</th>
  86. <td>
  87. {% if object.nat_inside %}
  88. <a href="{% url 'ipam:ipaddress' pk=object.nat_inside.pk %}">{{ object.nat_inside }}</a>
  89. {% if object.nat_inside.assigned_object %}
  90. (<a href="{{ object.nat_inside.assigned_object.parent_object.get_absolute_url }}">{{ object.nat_inside.assigned_object.parent_object }}</a>)
  91. {% endif %}
  92. {% else %}
  93. <span class="text-muted">None</span>
  94. {% endif %}
  95. </td>
  96. </tr>
  97. <tr>
  98. <th scope="row">NAT (outside)</th>
  99. <td>
  100. {% if object.nat_outside %}
  101. <a href="{% url 'ipam:ipaddress' pk=object.nat_outside.pk %}">{{ object.nat_outside }}</a>
  102. {% else %}
  103. <span class="text-muted">None</span>
  104. {% endif %}
  105. </td>
  106. </tr>
  107. </table>
  108. </div>
  109. </div>
  110. {% include 'inc/panels/custom_fields.html' %}
  111. {% plugin_left_page object %}
  112. </div>
  113. <div class="col col-md-8">
  114. {% include 'inc/panel_table.html' with table=parent_prefixes_table heading='Parent Prefixes' %}
  115. {% if duplicate_ips_table.rows %}
  116. {# Custom version of panel_table.html #}
  117. <div class="card border-danger">
  118. <h5 class="card-header">
  119. <span class="text-danger">Duplicate IP Addresses</span>
  120. {% if more_duplicate_ips %}
  121. <div class="float-end">
  122. <a type="button" class="btn btn-primary btn-sm"
  123. {% if object.vrf %}
  124. href="{% url 'ipam:ipaddress_list' %}?address={{ object.address.ip }}&vrf_id={{ object.vrf.pk }}"
  125. {% else %}
  126. href="{% url 'ipam:ipaddress_list' %}?address={{ object.address.ip }}&vrf_id=null"
  127. {% endif %}
  128. >Show all</a>
  129. </div>
  130. {% endif %}
  131. </h5>
  132. <div class="card-body">
  133. {% render_table duplicate_ips_table 'inc/table.html' %}
  134. </div>
  135. </div>
  136. {% endif %}
  137. <div class="my-3">
  138. {% include 'inc/panel_table.html' with table=related_ips_table heading='Related IP Addresses' %}
  139. </div>
  140. {% plugin_right_page object %}
  141. </div>
  142. </div>
  143. <div class="row my-3">
  144. <div class="col col-md-4">
  145. {% include 'inc/panels/tags.html' %}
  146. </div>
  147. </div>
  148. <div class="row">
  149. <div class="col col-md-12">
  150. {% plugin_full_width_page object %}
  151. </div>
  152. </div>
  153. {% endblock %}