nautobot 2.4.18__py3-none-any.whl → 2.4.19__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of nautobot might be problematic. Click here for more details.

Files changed (583) hide show
  1. nautobot/apps/ui.py +6 -0
  2. nautobot/circuits/tables.py +1 -1
  3. nautobot/circuits/templates/circuits/circuit_create.html +7 -7
  4. nautobot/circuits/templates/circuits/circuit_retrieve.html +1 -5
  5. nautobot/circuits/templates/circuits/circuittermination_create.html +26 -26
  6. nautobot/circuits/templates/circuits/inc/circuit_termination.html +20 -20
  7. nautobot/circuits/templates/circuits/inc/circuit_termination_header_extra_content.html +3 -3
  8. nautobot/circuits/templates/circuits/inc/circuit_termination_speed_fragment.html +7 -7
  9. nautobot/circuits/templates/circuits/providernetwork_retrieve.html +1 -3
  10. nautobot/circuits/views.py +26 -9
  11. nautobot/cloud/templates/cloud/cloudaccount_retrieve.html +1 -4
  12. nautobot/cloud/templates/cloud/cloudnetwork_retrieve.html +1 -7
  13. nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +1 -3
  14. nautobot/cloud/templates/cloud/cloudservice_retrieve.html +1 -5
  15. nautobot/cloud/views.py +45 -0
  16. nautobot/core/graphql/generators.py +5 -2
  17. nautobot/core/jobs/bulk_actions.py +48 -85
  18. nautobot/core/models/querysets.py +2 -1
  19. nautobot/core/templates/40x.html +15 -15
  20. nautobot/core/templates/500.html +21 -21
  21. nautobot/core/templates/admin/app_index.html +8 -8
  22. nautobot/core/templates/admin/base.html +104 -104
  23. nautobot/core/templates/admin/change_form.html +65 -65
  24. nautobot/core/templates/admin/change_list.html +60 -60
  25. nautobot/core/templates/admin/change_list_results.html +39 -39
  26. nautobot/core/templates/admin/config/config.html +47 -47
  27. nautobot/core/templates/admin/delete_confirmation.html +47 -47
  28. nautobot/core/templates/admin/edit_inline/stacked.html +124 -124
  29. nautobot/core/templates/admin/edit_inline/tabular.html +60 -60
  30. nautobot/core/templates/admin/includes/fieldset.html +4 -4
  31. nautobot/core/templates/admin/index.html +60 -60
  32. nautobot/core/templates/admin/prepopulated_fields_js.html +18 -18
  33. nautobot/core/templates/admin/submit_line.html +4 -4
  34. nautobot/core/templates/base_django.html +46 -46
  35. nautobot/core/templates/buttons/consolidated_bulk_action_buttons.html +8 -8
  36. nautobot/core/templates/buttons/consolidated_detail_view_action_buttons.html +8 -8
  37. nautobot/core/templates/buttons/export.html +3 -3
  38. nautobot/core/templates/components/breadcrumbs.html +5 -5
  39. nautobot/core/templates/components/button/default.html +3 -3
  40. nautobot/core/templates/components/button/dropdown.html +7 -7
  41. nautobot/core/templates/components/button/formbutton.html +4 -4
  42. nautobot/core/templates/components/panel/body_content_data_table.html +1 -1
  43. nautobot/core/templates/components/panel/body_wrapper_generic_table.html +3 -0
  44. nautobot/core/templates/components/panel/footer_content_table.html +3 -1
  45. nautobot/core/templates/components/panel/header_extra_content_table.html +10 -1
  46. nautobot/core/templates/components/tab/content_wrapper.html +1 -1
  47. nautobot/core/templates/components/tab/label_wrapper.html +1 -1
  48. nautobot/core/templates/components/tab/label_wrapper_distinct_view.html +10 -3
  49. nautobot/core/templates/generic/object_bulk_add_component.html +40 -40
  50. nautobot/core/templates/generic/object_bulk_create.html +3 -3
  51. nautobot/core/templates/generic/object_bulk_destroy.html +6 -6
  52. nautobot/core/templates/generic/object_bulk_update.html +52 -52
  53. nautobot/core/templates/generic/object_import.html +33 -33
  54. nautobot/core/templates/generic/object_list.html +267 -267
  55. nautobot/core/templates/generic/object_retrieve.html +261 -261
  56. nautobot/core/templates/graphene/graphiql.html +127 -127
  57. nautobot/core/templates/home.html +62 -62
  58. nautobot/core/templates/inc/computed_fields/panel_data.html +13 -13
  59. nautobot/core/templates/inc/created_updated.html +8 -8
  60. nautobot/core/templates/inc/custom_fields/panel_data.html +13 -13
  61. nautobot/core/templates/inc/dynamic_groups_panel.html +11 -11
  62. nautobot/core/templates/inc/footer.html +19 -19
  63. nautobot/core/templates/inc/javascript.html +1 -1
  64. nautobot/core/templates/inc/media.html +46 -46
  65. nautobot/core/templates/inc/nav_menu.html +1 -1
  66. nautobot/core/templates/inc/relationships_table_rows.html +22 -22
  67. nautobot/core/templates/inc/tenant_table_row.html +1 -1
  68. nautobot/core/templates/login.html +77 -77
  69. nautobot/core/templates/media_failure.html +38 -38
  70. nautobot/core/templates/panel_table.html +1 -1
  71. nautobot/core/templates/rest_framework/api.html +3 -3
  72. nautobot/core/templates/search.html +1 -1
  73. nautobot/core/templates/swagger_ui.html +9 -9
  74. nautobot/core/templates/utilities/confirmation_form.html +18 -18
  75. nautobot/core/templates/utilities/render_field.html +1 -1
  76. nautobot/core/templates/utilities/render_jinja2.html +43 -43
  77. nautobot/core/templates/utilities/templatetags/filter_form_modal.html +56 -56
  78. nautobot/core/templates/utilities/templatetags/utilization_graph.html +1 -1
  79. nautobot/core/templates/utilities/theme_preview.html +799 -799
  80. nautobot/core/templates/utilities/worker_status.html +122 -122
  81. nautobot/core/templates/widgets/clearable_file.html +3 -3
  82. nautobot/core/templates/widgets/sluginput.html +1 -1
  83. nautobot/core/templatetags/buttons.py +8 -2
  84. nautobot/core/templatetags/helpers.py +1 -1
  85. nautobot/core/testing/integration.py +7 -4
  86. nautobot/core/testing/views.py +24 -5
  87. nautobot/core/tests/test_breadcrumbs.py +78 -4
  88. nautobot/core/tests/test_commands.py +7 -4
  89. nautobot/core/tests/test_graphql.py +20 -5
  90. nautobot/core/tests/test_jobs.py +34 -21
  91. nautobot/core/tests/test_ui.py +175 -1
  92. nautobot/core/tests/test_utils.py +35 -0
  93. nautobot/core/tests/test_views_generic.py +43 -0
  94. nautobot/core/tests/test_views_utils.py +239 -5
  95. nautobot/core/ui/breadcrumbs.py +208 -21
  96. nautobot/core/ui/bulk_buttons.py +8 -0
  97. nautobot/core/ui/object_detail.py +138 -55
  98. nautobot/core/ui/titles.py +1 -0
  99. nautobot/core/utils/requests.py +27 -2
  100. nautobot/core/views/generic.py +41 -31
  101. nautobot/core/views/mixins.py +80 -110
  102. nautobot/core/views/utils.py +153 -1
  103. nautobot/dcim/api/serializers.py +8 -2
  104. nautobot/dcim/constants.py +1 -0
  105. nautobot/dcim/factory.py +4 -3
  106. nautobot/dcim/filters/mixins.py +1 -2
  107. nautobot/dcim/forms.py +5 -1
  108. nautobot/dcim/migrations/0074_alter_rack_u_height.py +21 -0
  109. nautobot/dcim/models/devices.py +26 -1
  110. nautobot/dcim/models/racks.py +2 -2
  111. nautobot/dcim/templates/dcim/cable.html +53 -53
  112. nautobot/dcim/templates/dcim/cable_connect.html +182 -182
  113. nautobot/dcim/templates/dcim/cable_trace.html +1 -1
  114. nautobot/dcim/templates/dcim/console_port_connection_list.html +5 -5
  115. nautobot/dcim/templates/dcim/consoleport.html +86 -86
  116. nautobot/dcim/templates/dcim/consoleserverport.html +86 -86
  117. nautobot/dcim/templates/dcim/controller_create.html +34 -34
  118. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +68 -68
  119. nautobot/dcim/templates/dcim/device/base.html +1 -104
  120. nautobot/dcim/templates/dcim/device/config.html +17 -17
  121. nautobot/dcim/templates/dcim/device/consoleports.html +1 -52
  122. nautobot/dcim/templates/dcim/device/consoleserverports.html +1 -52
  123. nautobot/dcim/templates/dcim/device/devicebays.html +1 -48
  124. nautobot/dcim/templates/dcim/device/frontports.html +1 -52
  125. nautobot/dcim/templates/dcim/device/interfaces.html +1 -56
  126. nautobot/dcim/templates/dcim/device/inventory.html +1 -48
  127. nautobot/dcim/templates/dcim/device/lldp_neighbors.html +64 -64
  128. nautobot/dcim/templates/dcim/device/modulebays.html +1 -48
  129. nautobot/dcim/templates/dcim/device/poweroutlets.html +1 -52
  130. nautobot/dcim/templates/dcim/device/powerports.html +1 -52
  131. nautobot/dcim/templates/dcim/device/rearports.html +1 -52
  132. nautobot/dcim/templates/dcim/device/status.html +66 -66
  133. nautobot/dcim/templates/dcim/device/wireless.html +1 -72
  134. nautobot/dcim/templates/dcim/device.html +4 -422
  135. nautobot/dcim/templates/dcim/device_component_add.html +25 -25
  136. nautobot/dcim/templates/dcim/device_create.html +229 -0
  137. nautobot/dcim/templates/dcim/device_edit.html +2 -227
  138. nautobot/dcim/templates/dcim/devicebay.html +41 -41
  139. nautobot/dcim/templates/dcim/devicebay_populate.html +32 -32
  140. nautobot/dcim/templates/dcim/devicetype_component_add.html +28 -28
  141. nautobot/dcim/templates/dcim/devicetype_retrieve.html +1 -3
  142. nautobot/dcim/templates/dcim/frontport.html +84 -84
  143. nautobot/dcim/templates/dcim/inc/cable_toggle_buttons.html +1 -1
  144. nautobot/dcim/templates/dcim/inc/device_interface_filter.html +8 -0
  145. nautobot/dcim/templates/dcim/inc/device_napalm_tabs.html +1 -15
  146. nautobot/dcim/templates/dcim/inc/location_hierarchy.html +22 -22
  147. nautobot/dcim/templates/dcim/interface.html +206 -206
  148. nautobot/dcim/templates/dcim/interface_connection_list.html +5 -5
  149. nautobot/dcim/templates/dcim/interfaceredundancygroupassociation_create.html +6 -6
  150. nautobot/dcim/templates/dcim/inventoryitem.html +44 -44
  151. nautobot/dcim/templates/dcim/inventoryitem_add.html +32 -32
  152. nautobot/dcim/templates/dcim/inventoryitem_edit.html +22 -22
  153. nautobot/dcim/templates/dcim/location_migrate_data_to_contact.html +46 -46
  154. nautobot/dcim/templates/dcim/location_retrieve.html +1 -7
  155. nautobot/dcim/templates/dcim/locationtype.html +1 -6
  156. nautobot/dcim/templates/dcim/locationtype_retrieve.html +1 -7
  157. nautobot/dcim/templates/dcim/module/base.html +85 -85
  158. nautobot/dcim/templates/dcim/module_interfaces.html +1 -1
  159. nautobot/dcim/templates/dcim/module_modulebays.html +1 -1
  160. nautobot/dcim/templates/dcim/module_retrieve.html +52 -52
  161. nautobot/dcim/templates/dcim/module_update.html +61 -61
  162. nautobot/dcim/templates/dcim/modulebay_destroy.html +1 -1
  163. nautobot/dcim/templates/dcim/modulebay_retrieve.html +85 -85
  164. nautobot/dcim/templates/dcim/modulebay_update.html +33 -33
  165. nautobot/dcim/templates/dcim/modulefamily_retrieve.html +1 -1
  166. nautobot/dcim/templates/dcim/moduletype_retrieve.html +140 -144
  167. nautobot/dcim/templates/dcim/platform_create.html +38 -38
  168. nautobot/dcim/templates/dcim/power_port_connection_list.html +5 -5
  169. nautobot/dcim/templates/dcim/powerfeed_retrieve.html +1 -8
  170. nautobot/dcim/templates/dcim/poweroutlet.html +85 -85
  171. nautobot/dcim/templates/dcim/powerpanel_retrieve.html +1 -8
  172. nautobot/dcim/templates/dcim/powerport.html +91 -91
  173. nautobot/dcim/templates/dcim/rack_elevation_list.html +18 -18
  174. nautobot/dcim/templates/dcim/rack_retrieve.html +264 -274
  175. nautobot/dcim/templates/dcim/rackreservation_retrieve.html +0 -3
  176. nautobot/dcim/templates/dcim/rearport.html +78 -78
  177. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +1 -5
  178. nautobot/dcim/tests/integration/test_device_bulk_operations.py +3 -2
  179. nautobot/dcim/tests/integration/test_location_bulk_operations.py +6 -2
  180. nautobot/dcim/tests/test_api.py +33 -1
  181. nautobot/dcim/tests/test_views.py +148 -4
  182. nautobot/dcim/ui.py +29 -0
  183. nautobot/dcim/urls.py +1 -109
  184. nautobot/dcim/utils.py +30 -0
  185. nautobot/dcim/views.py +1009 -531
  186. nautobot/extras/tables.py +20 -0
  187. nautobot/extras/templates/extras/computedfield_edit.html +4 -4
  188. nautobot/extras/templates/extras/configcontext_update.html +1 -1
  189. nautobot/extras/templates/extras/configcontextschema_retrieve.html +32 -32
  190. nautobot/extras/templates/extras/customfield_update.html +23 -23
  191. nautobot/extras/templates/extras/dynamicgroup_retrieve.html +38 -38
  192. nautobot/extras/templates/extras/dynamicgroup_update.html +62 -62
  193. nautobot/extras/templates/extras/gitrepository_list.html +10 -10
  194. nautobot/extras/templates/extras/gitrepository_retrieve.html +68 -68
  195. nautobot/extras/templates/extras/graphqlquery_retrieve.html +73 -73
  196. nautobot/extras/templates/extras/inc/configcontext_format.html +2 -2
  197. nautobot/extras/templates/extras/inc/job_table.html +10 -10
  198. nautobot/extras/templates/extras/inc/jobresult.html +21 -21
  199. nautobot/extras/templates/extras/inc/jobresult_js.html +6 -6
  200. nautobot/extras/templates/extras/inc/tags_panel.html +10 -10
  201. nautobot/extras/templates/extras/job.html +64 -64
  202. nautobot/extras/templates/extras/job_approval_request.html +9 -9
  203. nautobot/extras/templates/extras/job_bulk_edit.html +13 -13
  204. nautobot/extras/templates/extras/job_edit.html +45 -45
  205. nautobot/extras/templates/extras/job_list.html +4 -4
  206. nautobot/extras/templates/extras/jobresult_retrieve.html +0 -25
  207. nautobot/extras/templates/extras/marketplace.html +101 -101
  208. nautobot/extras/templates/extras/metadatatype_create.html +20 -20
  209. nautobot/extras/templates/extras/object_assign_contact_or_team.html +18 -18
  210. nautobot/extras/templates/extras/object_configcontext.html +1 -3
  211. nautobot/extras/templates/extras/objectchange.html +2 -165
  212. nautobot/extras/templates/extras/objectchange_retrieve.html +165 -0
  213. nautobot/extras/templates/extras/plugin_detail.html +41 -41
  214. nautobot/extras/templates/extras/plugins_list.html +9 -9
  215. nautobot/extras/templates/extras/plugins_tiles.html +26 -26
  216. nautobot/extras/templates/extras/relationship_edit.html +4 -4
  217. nautobot/extras/templates/extras/role_retrieve.html +13 -13
  218. nautobot/extras/templates/extras/scheduled_jobs_approval_queue_list.html +21 -21
  219. nautobot/extras/templates/extras/scheduledjob.html +128 -128
  220. nautobot/extras/templates/extras/secret_create.html +53 -53
  221. nautobot/extras/templates/extras/secretsgroup_update.html +13 -13
  222. nautobot/extras/templates/extras/templatetags/plugin_object_detail_tabs.html +3 -3
  223. nautobot/extras/templates/extras/webhook.html +79 -79
  224. nautobot/extras/tests/integration/test_relationships.py +6 -6
  225. nautobot/extras/tests/test_filters.py +1 -1
  226. nautobot/extras/tests/test_jobs.py +2 -0
  227. nautobot/extras/tests/test_views.py +3 -3
  228. nautobot/extras/urls.py +1 -3
  229. nautobot/extras/views.py +101 -27
  230. nautobot/ipam/filters.py +2 -2
  231. nautobot/ipam/migrations/0053_alter_vrfdeviceassignment_options_and_more.py +20 -0
  232. nautobot/ipam/models.py +34 -0
  233. nautobot/ipam/tables.py +3 -1
  234. nautobot/ipam/templates/ipam/inc/prefix_header_extra_content_table.html +4 -0
  235. nautobot/ipam/templates/ipam/inc/toggle_available.html +8 -8
  236. nautobot/ipam/templates/ipam/inc/vlangroup_header.html +4 -4
  237. nautobot/ipam/templates/ipam/ipaddress.html +119 -123
  238. nautobot/ipam/templates/ipam/ipaddress_assign.html +10 -10
  239. nautobot/ipam/templates/ipam/ipaddress_edit.html +1 -1
  240. nautobot/ipam/templates/ipam/ipaddress_merge.html +180 -180
  241. nautobot/ipam/templates/ipam/ipaddresstointerface_retrieve.html +48 -48
  242. nautobot/ipam/templates/ipam/prefix.html +2 -107
  243. nautobot/ipam/templates/ipam/prefix_create.html +34 -0
  244. nautobot/ipam/templates/ipam/prefix_edit.html +1 -34
  245. nautobot/ipam/templates/ipam/prefix_retrieve.html +3 -0
  246. nautobot/ipam/templates/ipam/service_retrieve.html +1 -6
  247. nautobot/ipam/templates/ipam/vlan_retrieve.html +1 -7
  248. nautobot/ipam/templates/ipam/vrf_edit.html +1 -1
  249. nautobot/ipam/tests/test_views.py +34 -0
  250. nautobot/ipam/ui.py +145 -0
  251. nautobot/ipam/urls.py +1 -46
  252. nautobot/ipam/utils/__init__.py +26 -0
  253. nautobot/ipam/views.py +219 -106
  254. nautobot/project-static/docs/404.html +11 -11
  255. nautobot/project-static/docs/apps/index.html +11 -11
  256. nautobot/project-static/docs/apps/nautobot-apps.html +11 -11
  257. nautobot/project-static/docs/assets/javascripts/{bundle.92b07e13.min.js → bundle.f55a23d4.min.js} +2 -2
  258. nautobot/project-static/docs/assets/javascripts/{bundle.92b07e13.min.js.map → bundle.f55a23d4.min.js.map} +2 -2
  259. nautobot/project-static/docs/assets/stylesheets/{main.7e37652d.min.css → main.e53b48f4.min.css} +1 -1
  260. nautobot/project-static/docs/assets/stylesheets/{main.7e37652d.min.css.map → main.e53b48f4.min.css.map} +1 -1
  261. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +11 -11
  262. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +11 -11
  263. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +11 -11
  264. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +11 -11
  265. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +11 -11
  266. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +11 -11
  267. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +11 -11
  268. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +11 -11
  269. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +11 -11
  270. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +11 -11
  271. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +11 -11
  272. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +11 -11
  273. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +11 -11
  274. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +11 -11
  275. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +11 -11
  276. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +11 -11
  277. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +11 -11
  278. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +11 -11
  279. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +11 -11
  280. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +11 -11
  281. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +2174 -1226
  282. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +11 -11
  283. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +12 -12
  284. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +72 -27
  285. nautobot/project-static/docs/development/apps/api/configuration-view.html +11 -11
  286. nautobot/project-static/docs/development/apps/api/database-backend-config.html +11 -11
  287. nautobot/project-static/docs/development/apps/api/models/django-admin.html +11 -11
  288. nautobot/project-static/docs/development/apps/api/models/global-search.html +11 -11
  289. nautobot/project-static/docs/development/apps/api/models/graphql.html +11 -11
  290. nautobot/project-static/docs/development/apps/api/models/index.html +11 -11
  291. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +11 -11
  292. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +11 -11
  293. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +11 -11
  294. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +11 -11
  295. nautobot/project-static/docs/development/apps/api/platform-features/index.html +11 -11
  296. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +11 -11
  297. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +11 -11
  298. nautobot/project-static/docs/development/apps/api/platform-features/prepopulating-data.html +11 -11
  299. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +11 -11
  300. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +11 -11
  301. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +11 -11
  302. nautobot/project-static/docs/development/apps/api/prometheus.html +11 -11
  303. nautobot/project-static/docs/development/apps/api/setup.html +11 -11
  304. nautobot/project-static/docs/development/apps/api/testing.html +11 -11
  305. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +11 -11
  306. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +11 -11
  307. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +11 -11
  308. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +11 -11
  309. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +11 -11
  310. nautobot/project-static/docs/development/apps/api/views/base-template.html +11 -11
  311. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +11 -11
  312. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +11 -11
  313. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +11 -11
  314. nautobot/project-static/docs/development/apps/api/views/index.html +11 -11
  315. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +11 -11
  316. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +11 -11
  317. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +11 -11
  318. nautobot/project-static/docs/development/apps/api/views/notes.html +11 -11
  319. nautobot/project-static/docs/development/apps/api/views/rest-api.html +11 -11
  320. nautobot/project-static/docs/development/apps/api/views/urls.html +11 -11
  321. nautobot/project-static/docs/development/apps/index.html +11 -11
  322. nautobot/project-static/docs/development/apps/migration/code-updates.html +11 -11
  323. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +11 -11
  324. nautobot/project-static/docs/development/apps/migration/from-v1.html +11 -11
  325. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +11 -11
  326. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +11 -11
  327. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +11 -11
  328. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +11 -11
  329. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +11 -11
  330. nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +11 -11
  331. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +11 -11
  332. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +11 -11
  333. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +11 -11
  334. nautobot/project-static/docs/development/apps/porting-from-netbox.html +11 -11
  335. nautobot/project-static/docs/development/core/application-registry.html +11 -11
  336. nautobot/project-static/docs/development/core/best-practices.html +11 -11
  337. nautobot/project-static/docs/development/core/bootstrap-ui.html +11 -11
  338. nautobot/project-static/docs/development/core/caching.html +11 -11
  339. nautobot/project-static/docs/development/core/controllers.html +11 -11
  340. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +11 -11
  341. nautobot/project-static/docs/development/core/generic-views.html +11 -11
  342. nautobot/project-static/docs/development/core/getting-started.html +50 -48
  343. nautobot/project-static/docs/development/core/homepage.html +11 -11
  344. nautobot/project-static/docs/development/core/index.html +11 -11
  345. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +11 -11
  346. nautobot/project-static/docs/development/core/model-checklist.html +11 -11
  347. nautobot/project-static/docs/development/core/model-features.html +11 -11
  348. nautobot/project-static/docs/development/core/natural-keys.html +11 -11
  349. nautobot/project-static/docs/development/core/navigation-menu.html +11 -11
  350. nautobot/project-static/docs/development/core/release-checklist.html +11 -11
  351. nautobot/project-static/docs/development/core/role-internals.html +11 -11
  352. nautobot/project-static/docs/development/core/settings.html +11 -11
  353. nautobot/project-static/docs/development/core/style-guide.html +15 -11
  354. nautobot/project-static/docs/development/core/templates.html +11 -11
  355. nautobot/project-static/docs/development/core/testing.html +11 -11
  356. nautobot/project-static/docs/development/core/ui-component-framework.html +11 -11
  357. nautobot/project-static/docs/development/core/user-preferences.html +11 -11
  358. nautobot/project-static/docs/development/index.html +11 -11
  359. nautobot/project-static/docs/development/jobs/getting-started.html +11 -11
  360. nautobot/project-static/docs/development/jobs/index.html +11 -11
  361. nautobot/project-static/docs/development/jobs/installation.html +11 -11
  362. nautobot/project-static/docs/development/jobs/job-extensions.html +11 -11
  363. nautobot/project-static/docs/development/jobs/job-logging.html +11 -11
  364. nautobot/project-static/docs/development/jobs/job-patterns.html +11 -11
  365. nautobot/project-static/docs/development/jobs/job-structure.html +11 -11
  366. nautobot/project-static/docs/development/jobs/migration/from-v1.html +11 -11
  367. nautobot/project-static/docs/development/jobs/testing.html +11 -11
  368. nautobot/project-static/docs/index.html +11 -11
  369. nautobot/project-static/docs/objects.inv +0 -0
  370. nautobot/project-static/docs/overview/application_stack.html +11 -11
  371. nautobot/project-static/docs/overview/design_philosophy.html +11 -11
  372. nautobot/project-static/docs/release-notes/index.html +11 -11
  373. nautobot/project-static/docs/release-notes/version-1.0.html +11 -11
  374. nautobot/project-static/docs/release-notes/version-1.1.html +11 -11
  375. nautobot/project-static/docs/release-notes/version-1.2.html +11 -11
  376. nautobot/project-static/docs/release-notes/version-1.3.html +11 -11
  377. nautobot/project-static/docs/release-notes/version-1.4.html +11 -11
  378. nautobot/project-static/docs/release-notes/version-1.5.html +11 -11
  379. nautobot/project-static/docs/release-notes/version-1.6.html +11 -11
  380. nautobot/project-static/docs/release-notes/version-2.0.html +11 -11
  381. nautobot/project-static/docs/release-notes/version-2.1.html +11 -11
  382. nautobot/project-static/docs/release-notes/version-2.2.html +11 -11
  383. nautobot/project-static/docs/release-notes/version-2.3.html +11 -11
  384. nautobot/project-static/docs/release-notes/version-2.4.html +196 -11
  385. nautobot/project-static/docs/search/search_index.json +1 -1
  386. nautobot/project-static/docs/sitemap.xml +300 -300
  387. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  388. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +11 -11
  389. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +11 -11
  390. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +11 -11
  391. nautobot/project-static/docs/user-guide/administration/configuration/index.html +11 -11
  392. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +11 -11
  393. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +11 -11
  394. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +11 -11
  395. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +89 -14
  396. nautobot/project-static/docs/user-guide/administration/guides/docker.html +11 -11
  397. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +11 -11
  398. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +11 -11
  399. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +11 -11
  400. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +11 -11
  401. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +11 -11
  402. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +11 -11
  403. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +11 -11
  404. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +11 -11
  405. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +11 -11
  406. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +11 -11
  407. nautobot/project-static/docs/user-guide/administration/installation/index.html +11 -11
  408. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +11 -11
  409. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +11 -11
  410. nautobot/project-static/docs/user-guide/administration/installation/services.html +11 -11
  411. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +11 -11
  412. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +11 -11
  413. nautobot/project-static/docs/user-guide/administration/security/index.html +11 -11
  414. nautobot/project-static/docs/user-guide/administration/security/notices.html +11 -11
  415. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +11 -11
  416. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +11 -11
  417. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +11 -11
  418. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +11 -11
  419. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +11 -11
  420. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +11 -11
  421. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +11 -11
  422. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +11 -11
  423. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +11 -11
  424. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +11 -11
  425. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +11 -11
  426. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +11 -11
  427. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +11 -11
  428. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +11 -11
  429. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +11 -11
  430. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +11 -11
  431. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +11 -11
  432. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +11 -11
  433. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +11 -11
  434. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +11 -11
  435. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +11 -11
  436. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +11 -11
  437. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +11 -11
  438. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +11 -11
  439. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +11 -11
  440. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +11 -11
  441. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +11 -11
  442. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +11 -11
  443. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +11 -11
  444. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +11 -11
  445. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +11 -11
  446. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +11 -11
  447. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +11 -11
  448. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +11 -11
  449. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +11 -11
  450. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +11 -11
  451. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +11 -11
  452. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +11 -11
  453. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +11 -11
  454. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +11 -11
  455. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +11 -11
  456. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +11 -11
  457. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +11 -11
  458. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +11 -11
  459. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +11 -11
  460. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +11 -11
  461. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +11 -11
  462. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +11 -11
  463. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +11 -11
  464. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +11 -11
  465. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +11 -11
  466. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +11 -11
  467. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +11 -11
  468. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +11 -11
  469. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +11 -11
  470. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +11 -11
  471. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +11 -11
  472. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +11 -11
  473. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +11 -11
  474. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +11 -11
  475. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +11 -11
  476. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +11 -11
  477. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +11 -11
  478. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +11 -11
  479. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +11 -11
  480. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +11 -11
  481. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +11 -11
  482. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +11 -11
  483. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +11 -11
  484. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +11 -11
  485. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +11 -11
  486. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +11 -11
  487. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +11 -11
  488. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +11 -11
  489. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +11 -11
  490. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +11 -11
  491. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +11 -11
  492. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +11 -11
  493. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +11 -11
  494. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +11 -11
  495. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +11 -11
  496. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +11 -11
  497. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +11 -11
  498. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +11 -11
  499. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +11 -11
  500. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +11 -11
  501. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +11 -11
  502. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +11 -11
  503. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +11 -11
  504. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +11 -11
  505. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +11 -11
  506. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +11 -11
  507. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +11 -11
  508. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +11 -11
  509. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +11 -11
  510. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +11 -11
  511. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +11 -11
  512. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +11 -11
  513. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +11 -11
  514. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +11 -11
  515. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +11 -11
  516. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +11 -11
  517. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +11 -11
  518. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +11 -11
  519. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +11 -11
  520. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +11 -11
  521. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +11 -11
  522. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +11 -11
  523. nautobot/project-static/docs/user-guide/index.html +11 -11
  524. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +11 -11
  525. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +11 -11
  526. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +11 -11
  527. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +11 -11
  528. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +11 -11
  529. nautobot/project-static/docs/user-guide/platform-functionality/events.html +11 -11
  530. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +11 -11
  531. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +11 -11
  532. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +11 -11
  533. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +11 -11
  534. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +11 -11
  535. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +11 -11
  536. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +11 -11
  537. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +11 -11
  538. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +11 -11
  539. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +11 -11
  540. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +11 -11
  541. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +11 -11
  542. nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +11 -11
  543. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +11 -11
  544. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +11 -11
  545. nautobot/project-static/docs/user-guide/platform-functionality/note.html +11 -11
  546. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +11 -11
  547. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +11 -11
  548. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +11 -11
  549. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +11 -11
  550. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +11 -11
  551. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +11 -11
  552. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +11 -11
  553. nautobot/project-static/docs/user-guide/platform-functionality/role.html +11 -11
  554. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +11 -11
  555. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +11 -11
  556. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +11 -11
  557. nautobot/project-static/docs/user-guide/platform-functionality/status.html +11 -11
  558. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +11 -11
  559. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +11 -11
  560. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +11 -11
  561. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +11 -11
  562. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +11 -11
  563. nautobot/tenancy/templates/tenancy/tenant.html +1 -7
  564. nautobot/tenancy/views.py +13 -0
  565. nautobot/users/templates/users/api_tokens.html +4 -4
  566. nautobot/users/templates/users/base.html +28 -28
  567. nautobot/virtualization/templates/virtualization/cluster.html +64 -64
  568. nautobot/virtualization/templates/virtualization/inc/virtualmachine_vminterface_filter.html +8 -0
  569. nautobot/virtualization/templates/virtualization/virtualmachine_component_add.html +25 -25
  570. nautobot/virtualization/templates/virtualization/virtualmachine_retrieve.html +1 -251
  571. nautobot/virtualization/templates/virtualization/vminterface.html +70 -70
  572. nautobot/virtualization/urls.py +0 -12
  573. nautobot/virtualization/views.py +158 -54
  574. nautobot/wireless/templates/wireless/wirelessnetwork_create.html +13 -13
  575. nautobot/wireless/tests/integration/test_radio_profile.py +1 -1
  576. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/METADATA +1 -1
  577. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/RECORD +581 -570
  578. nautobot/ipam/templates/ipam/prefix_ipaddresses.html +0 -11
  579. nautobot/ipam/templates/ipam/prefix_prefixes.html +0 -11
  580. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/LICENSE.txt +0 -0
  581. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/NOTICE +0 -0
  582. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/WHEEL +0 -0
  583. {nautobot-2.4.18.dist-info → nautobot-2.4.19.dist-info}/entry_points.txt +0 -0
@@ -2,95 +2,95 @@
2
2
  {% load helpers %}
3
3
 
4
4
  {% block content_left_page %}
5
- <div class="panel panel-default">
6
- <div class="panel-heading">
7
- <strong>Webhook</strong>
8
- </div>
5
+ <div class="panel panel-default">
6
+ <div class="panel-heading">
7
+ <strong>Webhook</strong>
8
+ </div>
9
9
 
10
- <table class="table table-hover panel-body attr-table">
11
- <tr>
12
- <td>Object Type(s)</td>
13
- <td>
14
- <ul>
15
- {% for content_type in content_types %}
16
- <li>{{ content_type }}</li>
17
- {% endfor %}
18
- </ul>
19
- </td>
20
- </tr>
21
- <tr>
22
- <td>Call On:</td>
23
- <td>
24
- {{ object.type_create | render_boolean }}
25
- <span>Create</span>
10
+ <table class="table table-hover panel-body attr-table">
11
+ <tr>
12
+ <td>Object Type(s)</td>
13
+ <td>
14
+ <ul>
15
+ {% for content_type in content_types %}
16
+ <li>{{ content_type }}</li>
17
+ {% endfor %}
18
+ </ul>
19
+ </td>
20
+ </tr>
21
+ <tr>
22
+ <td>Call On:</td>
23
+ <td>
24
+ {{ object.type_create | render_boolean }}
25
+ <span>Create</span>
26
26
 
27
- <span style="margin-left: 2rem;">{{ object.type_update | render_boolean }}</span>
28
- <span>Update</span>
27
+ <span style="margin-left: 2rem;">{{ object.type_update | render_boolean }}</span>
28
+ <span>Update</span>
29
29
 
30
- <span style="margin-left: 2rem;">{{ object.type_delete | render_boolean }}</span>
31
- <span>Delete </span>
32
- </td>
33
- </tr>
34
- <tr>
35
- <td>Enabled</td>
36
- <td>{{ object.enabled | render_boolean }}</td>
37
- </tr>
38
- </table>
30
+ <span style="margin-left: 2rem;">{{ object.type_delete | render_boolean }}</span>
31
+ <span>Delete </span>
32
+ </td>
33
+ </tr>
34
+ <tr>
35
+ <td>Enabled</td>
36
+ <td>{{ object.enabled | render_boolean }}</td>
37
+ </tr>
38
+ </table>
39
39
 
40
- </div>
40
+ </div>
41
41
 
42
- <div class="panel panel-default">
43
- <div class="panel-heading">
44
- <strong>HTTP</strong>
45
- </div>
46
- <table class="table table-hover panel-body attr-table">
47
- <tr>
48
- <td>HTTP Method</td>
49
- <td><span>{{ object.http_method }}</span></td>
50
- </tr>
51
- <tr>
52
- <td>HTTP Content Type</td>
53
- <td><span>{{ object.http_content_type }}</span></td>
54
- </tr>
55
- <tr>
56
- <td>Payload URL</td>
57
- <td><span>{{ object.payload_url }}</span></td>
58
- </tr>
59
- <tr>
60
- <td>Additional Headers</td>
61
- <td><span>{% if object.additional_headers %} <pre>{{ object.additional_headers }}</pre> {% else %} {{ None }} {% endif %}</span></td>
62
- </tr>
63
- </table>
42
+ <div class="panel panel-default">
43
+ <div class="panel-heading">
44
+ <strong>HTTP</strong>
64
45
  </div>
46
+ <table class="table table-hover panel-body attr-table">
47
+ <tr>
48
+ <td>HTTP Method</td>
49
+ <td><span>{{ object.http_method }}</span></td>
50
+ </tr>
51
+ <tr>
52
+ <td>HTTP Content Type</td>
53
+ <td><span>{{ object.http_content_type }}</span></td>
54
+ </tr>
55
+ <tr>
56
+ <td>Payload URL</td>
57
+ <td><span>{{ object.payload_url }}</span></td>
58
+ </tr>
59
+ <tr>
60
+ <td>Additional Headers</td>
61
+ <td><span>{% if object.additional_headers %} <pre>{{ object.additional_headers }}</pre> {% else %} {{ None }} {% endif %}</span></td>
62
+ </tr>
63
+ </table>
64
+ </div>
65
65
 
66
- <div class="panel panel-default">
67
- <div class="panel-heading">
68
- <strong>Security</strong>
69
- </div>
70
- <table class="table table-hover panel-body attr-table">
71
- <tr>
72
- <td>Secret</td>
73
- <td>{{ object.secret | placeholder }}</td>
74
- </tr>
75
- <tr>
76
- <td>SSL Verification</td>
77
- <td>{{ object.ssl_verification | render_boolean }}</td>
78
- </tr>
79
- <tr>
80
- <td>CA File Path</td>
81
- <td><span>{{ object.ca_file_path | placeholder }}</span></td>
82
- </tr>
83
- </table>
66
+ <div class="panel panel-default">
67
+ <div class="panel-heading">
68
+ <strong>Security</strong>
84
69
  </div>
70
+ <table class="table table-hover panel-body attr-table">
71
+ <tr>
72
+ <td>Secret</td>
73
+ <td>{{ object.secret | placeholder }}</td>
74
+ </tr>
75
+ <tr>
76
+ <td>SSL Verification</td>
77
+ <td>{{ object.ssl_verification | render_boolean }}</td>
78
+ </tr>
79
+ <tr>
80
+ <td>CA File Path</td>
81
+ <td><span>{{ object.ca_file_path | placeholder }}</span></td>
82
+ </tr>
83
+ </table>
84
+ </div>
85
85
  {% endblock content_left_page %}
86
86
 
87
87
  {% block content_right_page %}
88
- <div class="panel panel-default">
89
- <div class="panel-heading">
90
- <strong>Body Template</strong>
91
- </div>
92
- <div class="panel-body">
93
- {% if object.body_template %} <pre>{{ object.body_template }}</pre> {% else %} {{ None }} {% endif %}
94
- </div>
88
+ <div class="panel panel-default">
89
+ <div class="panel-heading">
90
+ <strong>Body Template</strong>
91
+ </div>
92
+ <div class="panel-body">
93
+ {% if object.body_template %} <pre>{{ object.body_template }}</pre> {% else %} {{ None }} {% endif %}
95
94
  </div>
95
+ </div>
96
96
  {% endblock content_right_page %}
@@ -34,7 +34,7 @@ class RelationshipsTestCase(SeleniumTestCase):
34
34
  device = create_test_device()
35
35
  power_panel = PowerPanel.objects.create(
36
36
  location=device.location,
37
- name="Test Power Panel",
37
+ name="Test-Power-Panel",
38
38
  )
39
39
  power_panel_ct = ContentType.objects.get_for_model(PowerPanel)
40
40
  device_content_type = ContentType.objects.get_for_model(Device)
@@ -53,11 +53,11 @@ class RelationshipsTestCase(SeleniumTestCase):
53
53
  # Visit the device detail page
54
54
  self.browser.visit(f"{self.live_server_url}{reverse('dcim:device', kwargs={'pk': device.pk})}")
55
55
  # Check the relationship appears in the primary information tab
56
- self.assertTrue(self.browser.is_text_present("power panel"))
57
- self.assertTrue(self.browser.is_text_present("Power Panel"))
56
+ self.assertTrue(self.browser.is_text_present("Test-Power-Panel")) # related object
57
+ self.assertTrue(self.browser.is_text_present("Power Panel")) # relationship label
58
58
  # Check the relationship does NOT appear in the advanced tab
59
59
  self.browser.links.find_by_partial_text("Advanced")[0].click()
60
- self.assertFalse(self.browser.is_text_present("power panel"))
60
+ self.assertFalse(self.browser.is_text_present("Test-Power-Panel"))
61
61
  self.assertFalse(self.browser.is_text_present("Power Panel"))
62
62
  # Set the custom_field to only show in the advanced tab
63
63
  relationship.advanced_ui = True
@@ -65,9 +65,9 @@ class RelationshipsTestCase(SeleniumTestCase):
65
65
  # Visit the device detail page
66
66
  self.browser.visit(f"{self.live_server_url}{reverse('dcim:device', kwargs={'pk': device.pk})}")
67
67
  # Check the relationship does NOT appear in the primary information tab
68
- self.assertFalse(self.browser.is_text_present("power panel"))
68
+ self.assertFalse(self.browser.is_text_present("Test-Power-Panel"))
69
69
  self.assertFalse(self.browser.is_text_present("Power Panel"))
70
70
  # Check the relationship appears in the advanced tab
71
71
  self.browser.links.find_by_partial_text("Advanced")[0].click()
72
- self.assertTrue(self.browser.is_text_present("power panel"))
72
+ self.assertTrue(self.browser.is_text_present("Test-Power-Panel"))
73
73
  self.assertTrue(self.browser.is_text_present("Power Panel"))
@@ -911,7 +911,7 @@ class JobFilterSetTestCase(FilterTestCases.FilterTestCase):
911
911
 
912
912
  def test_hidden(self):
913
913
  params = {"hidden": True}
914
- self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
914
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
915
915
 
916
916
  def test_read_only(self):
917
917
  params = {"read_only": True}
@@ -352,6 +352,7 @@ class JobTransactionTest(TransactionTestCase):
352
352
  "BulkEditObjects",
353
353
  content_type=job_ct.id,
354
354
  edit_all=False,
355
+ pk_list=pk_list,
355
356
  filter_query_params={},
356
357
  form_data={
357
358
  "pk": pk_list,
@@ -395,6 +396,7 @@ class JobTransactionTest(TransactionTestCase):
395
396
  "BulkEditObjects",
396
397
  content_type=job_ct.id,
397
398
  edit_all=False,
399
+ pk_list=pk_list,
398
400
  filter_query_params={},
399
401
  form_data={
400
402
  "pk": pk_list,
@@ -4324,8 +4324,8 @@ class RoleTestCase(ViewTestCases.OrganizationalObjectViewTestCase, ViewTestCases
4324
4324
  if content_type not in role_content_types:
4325
4325
  if result == "Contact Associations":
4326
4326
  # AssociationContact Table in the contact tab should be there.
4327
- self.assertIn(
4328
- f'<strong>{result}</strong>\n <div class="pull-right noprint">\n',
4327
+ self.assertInHTML(
4328
+ f'<strong>{result}</strong><div class="pull-right noprint">',
4329
4329
  response_body,
4330
4330
  )
4331
4331
  # ContactAssociationTable related to this role instances should not be there.
@@ -4336,4 +4336,4 @@ class RoleTestCase(ViewTestCases.OrganizationalObjectViewTestCase, ViewTestCases
4336
4336
  else:
4337
4337
  self.assertNotIn(f"<strong>{result}</strong>", response_body)
4338
4338
  else:
4339
- self.assertIn(f"<strong>{result}</strong>", response_body)
4339
+ self.assertInHTML(f"<strong>{result}</strong>", response_body)
nautobot/extras/urls.py CHANGED
@@ -27,6 +27,7 @@ router.register("job-hooks", views.JobHookUIViewSet)
27
27
  router.register("job-queues", views.JobQueueUIViewSet)
28
28
  router.register("job-results", views.JobResultUIViewSet)
29
29
  router.register("metadata-types", views.MetadataTypeUIViewSet)
30
+ router.register("object-changes", views.ObjectChangeUIViewSet)
30
31
  router.register("notes", views.NoteUIViewSet)
31
32
  router.register("object-metadata", views.ObjectMetadataUIViewSet)
32
33
  router.register("relationship-associations", views.RelationshipAssociationUIViewSet)
@@ -42,9 +43,6 @@ router.register("teams", views.TeamUIViewSet)
42
43
  router.register("webhooks", views.WebhookUIViewSet)
43
44
 
44
45
  urlpatterns = [
45
- # Change logging
46
- path("object-changes/", views.ObjectChangeListView.as_view(), name="objectchange_list"),
47
- path("object-changes/<uuid:pk>/", views.ObjectChangeView.as_view(), name="objectchange"),
48
46
  # Config context schema
49
47
  path(
50
48
  "config-context-schemas/<uuid:pk>/validation/",
nautobot/extras/views.py CHANGED
@@ -11,6 +11,7 @@ from django.db.models import Q
11
11
  from django.forms.utils import pretty_name
12
12
  from django.http import Http404, HttpResponse, HttpResponseForbidden
13
13
  from django.shortcuts import get_object_or_404, redirect, render
14
+ from django.template.defaultfilters import urlencode
14
15
  from django.template.loader import get_template, TemplateDoesNotExist
15
16
  from django.urls import reverse
16
17
  from django.urls.exceptions import NoReverseMatch
@@ -35,7 +36,14 @@ from nautobot.core.models.utils import pretty_print_query, serialize_object_v2
35
36
  from nautobot.core.tables import ButtonsColumn
36
37
  from nautobot.core.templatetags import helpers
37
38
  from nautobot.core.ui import object_detail
38
- from nautobot.core.ui.breadcrumbs import Breadcrumbs, ModelBreadcrumbItem
39
+ from nautobot.core.ui.breadcrumbs import (
40
+ BaseBreadcrumbItem,
41
+ Breadcrumbs,
42
+ context_object_attr,
43
+ InstanceParentBreadcrumbItem,
44
+ ModelBreadcrumbItem,
45
+ ViewNameBreadcrumbItem,
46
+ )
39
47
  from nautobot.core.ui.choices import SectionChoices
40
48
  from nautobot.core.ui.titles import Titles
41
49
  from nautobot.core.utils.config import get_settings_or_config
@@ -2138,6 +2146,37 @@ class JobResultUIViewSet(
2138
2146
  table_class = tables.JobResultTable
2139
2147
  queryset = JobResult.objects.all()
2140
2148
  action_buttons = ()
2149
+ breadcrumbs = Breadcrumbs(
2150
+ items={
2151
+ "detail": [
2152
+ ModelBreadcrumbItem(),
2153
+ # if result.job_model is not None
2154
+ BaseBreadcrumbItem(
2155
+ label=context_object_attr("job_model.grouping", context_key="result"),
2156
+ should_render=lambda c: c["result"].job_model is not None,
2157
+ ),
2158
+ InstanceParentBreadcrumbItem(
2159
+ instance_key="result",
2160
+ parent_key="job_model",
2161
+ parent_lookup_key="name",
2162
+ should_render=lambda c: c["result"].job_model is not None,
2163
+ ),
2164
+ # elif job in context
2165
+ ViewNameBreadcrumbItem(
2166
+ view_name="extras:jobresult_list",
2167
+ label=context_object_attr("class_path", context_key="job"),
2168
+ reverse_query_params=lambda c: {"name": urlencode(c["job"].class_path)},
2169
+ should_render=lambda c: c["result"].job_model is None and c["job"] is not None,
2170
+ ),
2171
+ # else
2172
+ BaseBreadcrumbItem(
2173
+ label=context_object_attr("name", context_key="result"),
2174
+ should_render=lambda c: c["result"].job_model is None and c["job"] is None,
2175
+ ),
2176
+ ]
2177
+ },
2178
+ detail_item_label=context_object_attr("date_created"),
2179
+ )
2141
2180
 
2142
2181
  def get_extra_context(self, request, instance):
2143
2182
  context = super().get_extra_context(request, instance)
@@ -2227,18 +2266,16 @@ class JobButtonUIViewSet(NautobotUIViewSet):
2227
2266
  #
2228
2267
  # Change logging
2229
2268
  #
2230
-
2231
-
2232
- class ObjectChangeListView(generic.ObjectListView):
2269
+ class ObjectChangeUIViewSet(ObjectDetailViewMixin, ObjectListViewMixin):
2270
+ filterset_class = filters.ObjectChangeFilterSet
2271
+ filterset_form_class = forms.ObjectChangeFilterForm
2233
2272
  queryset = ObjectChange.objects.all()
2234
- filterset = filters.ObjectChangeFilterSet
2235
- filterset_form = forms.ObjectChangeFilterForm
2236
- table = tables.ObjectChangeTable
2237
- template_name = "extras/objectchange_list.html"
2273
+ serializer_class = serializers.ObjectChangeSerializer
2274
+ table_class = tables.ObjectChangeTable
2238
2275
  action_buttons = ("export",)
2239
2276
 
2240
2277
  # 2.0 TODO: Remove this remapping and solve it at the `BaseFilterSet` as it is addressing a breaking change.
2241
- def get(self, request, **kwargs):
2278
+ def get(self, request, *args, **kwargs):
2242
2279
  # Remappings below allow previous queries of time_before and time_after to use
2243
2280
  # newer methods specifying the lookup method.
2244
2281
 
@@ -2254,26 +2291,34 @@ class ObjectChangeListView(generic.ObjectListView):
2254
2291
  request.GET.update({"time__lte": request.GET.get("time_before")})
2255
2292
  request.GET._mutable = False
2256
2293
 
2257
- return super().get(request=request, **kwargs)
2294
+ return super().get(request=request, *args, **kwargs)
2258
2295
 
2296
+ def get_extra_context(self, request, instance):
2297
+ """
2298
+ Adds snapshot diff and related changes table for the object change detail view.
2299
+ """
2300
+ context = super().get_extra_context(request, instance)
2259
2301
 
2260
- class ObjectChangeView(generic.ObjectView):
2261
- queryset = ObjectChange.objects.all()
2302
+ if self.action == "retrieve":
2303
+ related_changes = instance.get_related_changes(user=request.user).filter(request_id=instance.request_id)
2304
+ related_changes_table = tables.ObjectChangeTable(
2305
+ data=related_changes[:50], # Limit for performance
2306
+ orderable=False,
2307
+ )
2308
+ snapshots = instance.get_snapshots()
2262
2309
 
2263
- def get_extra_context(self, request, instance):
2264
- related_changes = instance.get_related_changes(user=request.user).filter(request_id=instance.request_id)
2265
- related_changes_table = tables.ObjectChangeTable(data=related_changes[:50], orderable=False)
2310
+ context.update(
2311
+ {
2312
+ "diff_added": snapshots["differences"]["added"],
2313
+ "diff_removed": snapshots["differences"]["removed"],
2314
+ "next_change": instance.get_next_change(request.user),
2315
+ "prev_change": instance.get_prev_change(request.user),
2316
+ "related_changes_table": related_changes_table,
2317
+ "related_changes_count": related_changes.count(),
2318
+ }
2319
+ )
2266
2320
 
2267
- snapshots = instance.get_snapshots()
2268
- return {
2269
- "diff_added": snapshots["differences"]["added"],
2270
- "diff_removed": snapshots["differences"]["removed"],
2271
- "next_change": instance.get_next_change(request.user),
2272
- "prev_change": instance.get_prev_change(request.user),
2273
- "related_changes_table": related_changes_table,
2274
- "related_changes_count": related_changes.count(),
2275
- **super().get_extra_context(request, instance),
2276
- }
2321
+ return context
2277
2322
 
2278
2323
 
2279
2324
  class ObjectChangeLogView(generic.GenericView):
@@ -2454,8 +2499,36 @@ class NoteUIViewSet(
2454
2499
  ),
2455
2500
  )
2456
2501
 
2457
- def alter_obj(self, obj, request, url_args, url_kwargs):
2458
- obj.user = request.user
2502
+ def form_save(self, form, commit=True, *args, **kwargs):
2503
+ """
2504
+ Save the form instance while ensuring the Note's `user` and `user_name` fields
2505
+ are correctly populated.
2506
+
2507
+ Args:
2508
+ form (Form): The validated form instance to be saved.
2509
+ commit (bool): If True, save the instance to the database immediately.
2510
+ *args, **kwargs: Additional arguments to maintain compatibility with
2511
+ the parent method signature.
2512
+
2513
+ Returns:
2514
+ Note: The saved or unsaved Note instance with `user` and `user_name` set.
2515
+
2516
+ Behavior:
2517
+ - Sets `user` to the currently authenticated user.
2518
+ - Sets `user_name` to the username of the authenticated user.
2519
+ - Saves the instance if `commit=True`.
2520
+ """
2521
+ # Get instance without committing to DB
2522
+ obj = super().form_save(form, commit=False, *args, **kwargs)
2523
+
2524
+ # Assign user info (only authenticated users can create notes)
2525
+ obj.user = self.request.user
2526
+ obj.user_name = self.request.user.get_username()
2527
+
2528
+ # Save to DB if commit is True
2529
+ if commit:
2530
+ obj.save()
2531
+
2459
2532
  return obj
2460
2533
 
2461
2534
 
@@ -2710,6 +2783,7 @@ class SecretUIViewSet(
2710
2783
  table_title="Groups containing this secret",
2711
2784
  table_class=tables.SecretsGroupTable,
2712
2785
  table_attribute="secrets_groups",
2786
+ distinct=True,
2713
2787
  related_field_name="secrets",
2714
2788
  footer_content_template_path=None,
2715
2789
  ),
nautobot/ipam/filters.py CHANGED
@@ -144,7 +144,7 @@ class VRFFilterSet(NautobotFilterSet, StatusModelFilterSetMixin, TenancyModelFil
144
144
 
145
145
  class Meta:
146
146
  model = VRF
147
- fields = ["id", "name", "rd", "tags"]
147
+ fields = ["id", "name", "rd", "tags", "description"]
148
148
 
149
149
 
150
150
  class VRFDeviceAssignmentFilterSet(NautobotFilterSet):
@@ -503,7 +503,7 @@ class IPAddressFilterSet(
503
503
 
504
504
  class Meta:
505
505
  model = IPAddress
506
- fields = ["id", "dns_name", "type", "tags", "mask_length", "nat_inside"]
506
+ fields = ["id", "dns_name", "type", "tags", "mask_length", "nat_inside", "description"]
507
507
 
508
508
  def generate_query__has_interface_assignments(self, value):
509
509
  """Helper method used by DynamicGroups and by _assigned_to_interface method."""
@@ -0,0 +1,20 @@
1
+ # Generated by Django 4.2.23 on 2025-09-17 16:07
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ ("ipam", "0052_alter_ipaddress_index_together_and_more"),
9
+ ]
10
+
11
+ operations = [
12
+ migrations.AlterModelOptions(
13
+ name="vrfdeviceassignment",
14
+ options={"verbose_name": "VRF-device assignment"},
15
+ ),
16
+ migrations.AlterModelOptions(
17
+ name="vrfprefixassignment",
18
+ options={"verbose_name": "VRF-prefix assignment"},
19
+ ),
20
+ ]
nautobot/ipam/models.py CHANGED
@@ -350,6 +350,7 @@ class VRFDeviceAssignment(BaseModel):
350
350
  is_metadata_associable_model = False
351
351
 
352
352
  class Meta:
353
+ verbose_name = "VRF-device assignment"
353
354
  unique_together = [
354
355
  ["vrf", "device"],
355
356
  ["vrf", "virtual_machine"],
@@ -404,6 +405,7 @@ class VRFPrefixAssignment(BaseModel):
404
405
  is_metadata_associable_model = False
405
406
 
406
407
  class Meta:
408
+ verbose_name = "VRF-prefix assignment"
407
409
  unique_together = ["vrf", "prefix"]
408
410
 
409
411
  def __str__(self):
@@ -882,6 +884,38 @@ class Prefix(PrimaryModel):
882
884
  )
883
885
  self.locations.set([value])
884
886
 
887
+ @property
888
+ def default_ancestors(self):
889
+ """
890
+ Return this prefix's ancestors in default order.
891
+
892
+ This is equivalent to calling `ancestors()` with default
893
+ arguments: ordered from larger to smaller prefix lengths,
894
+ excluding the prefix itself.
895
+ """
896
+ return self.ancestors()
897
+
898
+ @property
899
+ def default_descendants(self):
900
+ """
901
+ Return this prefix's descendants in default order.
902
+
903
+ This is equivalent to calling `descendants()` with
904
+ default arguments: all subnets, excluding the prefix itself.
905
+ """
906
+ return self.descendants()
907
+
908
+ @property
909
+ def all_ips(self):
910
+ """
911
+ All IP addresses contained within this prefix, including
912
+ those in descendant prefixes.
913
+
914
+ This is a property alias for `get_all_ips()` and may be
915
+ preferred in new code for readability.
916
+ """
917
+ return self.get_all_ips()
918
+
885
919
  def reparent_subnets(self):
886
920
  """
887
921
  Handle changes to the parentage of other Prefixes as a consequence of this Prefix's creation or update.
nautobot/ipam/tables.py CHANGED
@@ -854,6 +854,7 @@ class ServiceTable(BaseTable):
854
854
  parent = tables.LinkColumn(order_by=("device", "virtual_machine"))
855
855
  ports = tables.TemplateColumn(template_code="{{ record.port_list }}", verbose_name="Ports")
856
856
  tags = TagColumn(url_name="ipam:service_list")
857
+ actions = ButtonsColumn(Service, buttons=["changelog", "edit", "delete"])
857
858
 
858
859
  class Meta(BaseTable.Meta):
859
860
  model = Service
@@ -866,5 +867,6 @@ class ServiceTable(BaseTable):
866
867
  "ip_addresses",
867
868
  "description",
868
869
  "tags",
870
+ "actions",
869
871
  )
870
- default_columns = ("pk", "name", "parent", "protocol", "ports", "description")
872
+ default_columns = ("pk", "name", "parent", "protocol", "ports", "description", "actions")
@@ -0,0 +1,4 @@
1
+ {% extends "components/panel/header_extra_content_table.html" %}
2
+ {% block panel_buttons %}
3
+ {% include "ipam/inc/toggle_available.html" %}
4
+ {% endblock panel_buttons %}
@@ -1,11 +1,11 @@
1
1
  {% load helpers %}
2
2
  {% if show_available is not None %}
3
- <div class="btn-group" role="group">
4
- <a href="{{ request.path }}{% legacy_querystring request show_available='true' %}" class="btn btn-default{% if show_available %} active disabled{% endif %}">
5
- <i class="mdi mdi-eye-outline"></i> Show available
6
- </a>
7
- <a href="{{ request.path }}{% legacy_querystring request show_available='false' %}" class="btn btn-default{% if not show_available %} active disabled{% endif %}">
8
- <i class="mdi mdi-eye-off-outline"></i> Hide available
9
- </a>
10
- </div>
3
+ <div class="btn-group" role="group">
4
+ <a href="{{ request.path }}{% legacy_querystring request show_available='true' %}" class="btn btn-default btn-xs{% if show_available %} active disabled{% endif %}">
5
+ <i class="mdi mdi-eye-outline"></i> Show available
6
+ </a>
7
+ <a href="{{ request.path }}{% legacy_querystring request show_available='false' %}" class="btn btn-default btn-xs{% if not show_available %} active disabled{% endif %}">
8
+ <i class="mdi mdi-eye-off-outline"></i> Hide available
9
+ </a>
10
+ </div>
11
11
  {% endif %}
@@ -5,10 +5,10 @@
5
5
  </a>
6
6
  {% endif %}
7
7
  {% if perms.ipam.change_vlangroup %}
8
- <a href="{% url 'ipam:vlangroup_edit' pk=object.pk %}" class="btn btn-warning">
9
- <span class="mdi mdi-pencil" aria-hidden="true"></span>
10
- Edit this VLAN Group
11
- </a>
8
+ <a href="{% url 'ipam:vlangroup_edit' pk=object.pk %}" class="btn btn-warning">
9
+ <span class="mdi mdi-pencil" aria-hidden="true"></span>
10
+ Edit this VLAN Group
11
+ </a>
12
12
  {% endif %}
13
13
  </div>
14
14
  <h1>{{ object }}</h1>