nautobot 2.4.11__py3-none-any.whl → 2.4.13__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 (364) hide show
  1. nautobot/circuits/templates/circuits/circuittermination_retrieve.html +1 -114
  2. nautobot/circuits/templates/circuits/inc/circuit_termination_header_extra_content.html +1 -1
  3. nautobot/circuits/views.py +76 -6
  4. nautobot/cloud/navigation.py +1 -1
  5. nautobot/core/jobs/cleanup.py +4 -4
  6. nautobot/core/templates/components/panel/header_extra_content_table.html +12 -1
  7. nautobot/core/templates/components/panel/panel.html +4 -0
  8. nautobot/core/templates/generic/object_retrieve.html +1 -0
  9. nautobot/core/templates/inc/footer.html +4 -4
  10. nautobot/core/tests/test_utils.py +1 -177
  11. nautobot/core/tests/test_views.py +2 -2
  12. nautobot/core/ui/object_detail.py +1 -1
  13. nautobot/core/utils/module_loading.py +58 -63
  14. nautobot/dcim/filters/__init__.py +6 -0
  15. nautobot/dcim/filters/mixins.py +2 -1
  16. nautobot/dcim/migrations/0071_alter_consoleport_options_and_more.py +42 -0
  17. nautobot/dcim/models/device_components.py +10 -2
  18. nautobot/dcim/models/devices.py +28 -0
  19. nautobot/dcim/tables/devices.py +2 -0
  20. nautobot/dcim/templates/dcim/controller/base.html +1 -9
  21. nautobot/dcim/templates/dcim/controller_retrieve.html +2 -83
  22. nautobot/dcim/templates/dcim/controller_wirelessnetworks.html +2 -25
  23. nautobot/dcim/templates/dcim/device.html +1 -34
  24. nautobot/dcim/templates/dcim/rack_elevation_list.html +4 -1
  25. nautobot/dcim/templates/dcim/virtualchassis.html +2 -51
  26. nautobot/dcim/templates/dcim/virtualchassis_add.html +2 -22
  27. nautobot/dcim/templates/dcim/virtualchassis_create.html +22 -0
  28. nautobot/dcim/templates/dcim/virtualchassis_edit.html +2 -93
  29. nautobot/dcim/templates/dcim/virtualchassis_retrieve.html +51 -0
  30. nautobot/dcim/templates/dcim/virtualchassis_update.html +93 -0
  31. nautobot/dcim/tests/test_models.py +1 -0
  32. nautobot/dcim/urls.py +2 -59
  33. nautobot/dcim/views.py +180 -191
  34. nautobot/extras/datasources/git.py +2 -2
  35. nautobot/extras/jobs_ui.py +208 -0
  36. nautobot/extras/models/tags.py +4 -0
  37. nautobot/extras/tables.py +1 -1
  38. nautobot/extras/templates/extras/configcontextschema_retrieve.html +2 -2
  39. nautobot/extras/templates/extras/inc/configcontext_data.html +1 -1
  40. nautobot/extras/templates/extras/inc/configcontext_format.html +6 -0
  41. nautobot/extras/templates/extras/inc/json_data.html +1 -1
  42. nautobot/extras/templates/extras/inc/json_format.html +2 -2
  43. nautobot/extras/templates/extras/job_detail.html +1 -326
  44. nautobot/extras/templates/extras/tag_retrieve.html +1 -51
  45. nautobot/extras/views.py +83 -29
  46. nautobot/ipam/migrations/0052_alter_ipaddress_index_together_and_more.py +28 -0
  47. nautobot/ipam/models.py +13 -1
  48. nautobot/ipam/tests/test_api.py +1 -3
  49. nautobot/ipam/utils/testing.py +76 -29
  50. nautobot/project-static/docs/404.html +2 -2
  51. nautobot/project-static/docs/apps/index.html +2 -2
  52. nautobot/project-static/docs/apps/nautobot-apps.html +2 -2
  53. nautobot/project-static/docs/assets/javascripts/{bundle.13a4f30d.min.js → bundle.56ea9cef.min.js} +2 -2
  54. nautobot/project-static/docs/assets/javascripts/{bundle.13a4f30d.min.js.map → bundle.56ea9cef.min.js.map} +2 -2
  55. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +2 -2
  56. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +2 -2
  57. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +2 -2
  58. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +2 -2
  59. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +2 -2
  60. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +2 -2
  61. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +2 -2
  62. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +2 -2
  63. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +2 -2
  64. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +2 -2
  65. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +2 -2
  66. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +2 -2
  67. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +2 -2
  68. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +2 -2
  69. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +2 -2
  70. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +2 -2
  71. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +2 -2
  72. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +2 -2
  73. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +2 -2
  74. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +2 -2
  75. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +2 -2
  76. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +2 -2
  77. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +2 -2
  78. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +4 -2
  79. nautobot/project-static/docs/development/apps/api/configuration-view.html +2 -2
  80. nautobot/project-static/docs/development/apps/api/database-backend-config.html +2 -2
  81. nautobot/project-static/docs/development/apps/api/models/django-admin.html +2 -2
  82. nautobot/project-static/docs/development/apps/api/models/global-search.html +2 -2
  83. nautobot/project-static/docs/development/apps/api/models/graphql.html +2 -2
  84. nautobot/project-static/docs/development/apps/api/models/index.html +2 -2
  85. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +2 -2
  86. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +2 -2
  87. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +2 -2
  88. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +2 -2
  89. nautobot/project-static/docs/development/apps/api/platform-features/index.html +2 -2
  90. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +2 -2
  91. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +2 -2
  92. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +2 -2
  93. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +2 -2
  94. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +2 -2
  95. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +2 -2
  96. nautobot/project-static/docs/development/apps/api/prometheus.html +2 -2
  97. nautobot/project-static/docs/development/apps/api/setup.html +2 -2
  98. nautobot/project-static/docs/development/apps/api/testing.html +2 -2
  99. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +2 -2
  100. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +2 -2
  101. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +2 -2
  102. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +2 -2
  103. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +2 -2
  104. nautobot/project-static/docs/development/apps/api/views/base-template.html +2 -2
  105. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +2 -2
  106. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +2 -2
  107. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +2 -2
  108. nautobot/project-static/docs/development/apps/api/views/index.html +2 -2
  109. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +2 -2
  110. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +2 -2
  111. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +2 -2
  112. nautobot/project-static/docs/development/apps/api/views/notes.html +2 -2
  113. nautobot/project-static/docs/development/apps/api/views/rest-api.html +2 -2
  114. nautobot/project-static/docs/development/apps/api/views/urls.html +2 -2
  115. nautobot/project-static/docs/development/apps/index.html +2 -2
  116. nautobot/project-static/docs/development/apps/migration/code-updates.html +2 -2
  117. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +2 -2
  118. nautobot/project-static/docs/development/apps/migration/from-v1.html +2 -2
  119. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +2 -2
  120. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +2 -2
  121. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +2 -2
  122. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +2 -2
  123. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +2 -2
  124. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +2 -2
  125. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +2 -2
  126. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +2 -2
  127. nautobot/project-static/docs/development/apps/porting-from-netbox.html +2 -2
  128. nautobot/project-static/docs/development/core/application-registry.html +2 -2
  129. nautobot/project-static/docs/development/core/best-practices.html +2 -2
  130. nautobot/project-static/docs/development/core/bootstrap-ui.html +2 -2
  131. nautobot/project-static/docs/development/core/caching.html +2 -2
  132. nautobot/project-static/docs/development/core/controllers.html +2 -2
  133. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +2 -2
  134. nautobot/project-static/docs/development/core/generic-views.html +2 -2
  135. nautobot/project-static/docs/development/core/getting-started.html +2 -2
  136. nautobot/project-static/docs/development/core/homepage.html +2 -2
  137. nautobot/project-static/docs/development/core/index.html +2 -2
  138. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +2 -2
  139. nautobot/project-static/docs/development/core/model-checklist.html +2 -2
  140. nautobot/project-static/docs/development/core/model-features.html +2 -2
  141. nautobot/project-static/docs/development/core/natural-keys.html +2 -2
  142. nautobot/project-static/docs/development/core/navigation-menu.html +2 -2
  143. nautobot/project-static/docs/development/core/release-checklist.html +2 -2
  144. nautobot/project-static/docs/development/core/role-internals.html +2 -2
  145. nautobot/project-static/docs/development/core/settings.html +2 -2
  146. nautobot/project-static/docs/development/core/style-guide.html +2 -2
  147. nautobot/project-static/docs/development/core/templates.html +2 -2
  148. nautobot/project-static/docs/development/core/testing.html +2 -2
  149. nautobot/project-static/docs/development/core/ui-component-framework.html +2 -2
  150. nautobot/project-static/docs/development/core/user-preferences.html +2 -2
  151. nautobot/project-static/docs/development/index.html +2 -2
  152. nautobot/project-static/docs/development/jobs/getting-started.html +2 -6
  153. nautobot/project-static/docs/development/jobs/index.html +2 -2
  154. nautobot/project-static/docs/development/jobs/installation.html +2 -2
  155. nautobot/project-static/docs/development/jobs/job-extensions.html +2 -2
  156. nautobot/project-static/docs/development/jobs/job-logging.html +2 -2
  157. nautobot/project-static/docs/development/jobs/job-patterns.html +2 -2
  158. nautobot/project-static/docs/development/jobs/job-structure.html +2 -2
  159. nautobot/project-static/docs/development/jobs/migration/from-v1.html +2 -2
  160. nautobot/project-static/docs/development/jobs/testing.html +2 -2
  161. nautobot/project-static/docs/index.html +2 -2
  162. nautobot/project-static/docs/objects.inv +0 -0
  163. nautobot/project-static/docs/overview/application_stack.html +2 -2
  164. nautobot/project-static/docs/overview/design_philosophy.html +2 -2
  165. nautobot/project-static/docs/release-notes/index.html +2 -2
  166. nautobot/project-static/docs/release-notes/version-1.0.html +2 -2
  167. nautobot/project-static/docs/release-notes/version-1.1.html +2 -2
  168. nautobot/project-static/docs/release-notes/version-1.2.html +2 -2
  169. nautobot/project-static/docs/release-notes/version-1.3.html +2 -2
  170. nautobot/project-static/docs/release-notes/version-1.4.html +2 -2
  171. nautobot/project-static/docs/release-notes/version-1.5.html +2 -2
  172. nautobot/project-static/docs/release-notes/version-1.6.html +2 -2
  173. nautobot/project-static/docs/release-notes/version-2.0.html +2 -2
  174. nautobot/project-static/docs/release-notes/version-2.1.html +2 -2
  175. nautobot/project-static/docs/release-notes/version-2.2.html +2 -2
  176. nautobot/project-static/docs/release-notes/version-2.3.html +2 -2
  177. nautobot/project-static/docs/release-notes/version-2.4.html +211 -2
  178. nautobot/project-static/docs/requirements.txt +1 -1
  179. nautobot/project-static/docs/search/search_index.json +1 -1
  180. nautobot/project-static/docs/sitemap.xml +299 -299
  181. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  182. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +2 -2
  183. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +2 -2
  184. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +2 -2
  185. nautobot/project-static/docs/user-guide/administration/configuration/index.html +2 -2
  186. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +2 -2
  187. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +2 -2
  188. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +2 -2
  189. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +2 -2
  190. nautobot/project-static/docs/user-guide/administration/guides/docker.html +2 -2
  191. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +2 -2
  192. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +2 -2
  193. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +2 -2
  194. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +2 -2
  195. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +2 -2
  196. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +2 -2
  197. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +2 -2
  198. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +2 -2
  199. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +2 -2
  200. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +2 -2
  201. nautobot/project-static/docs/user-guide/administration/installation/index.html +2 -2
  202. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +2 -2
  203. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +2 -2
  204. nautobot/project-static/docs/user-guide/administration/installation/services.html +2 -2
  205. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +2 -2
  206. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +2 -2
  207. nautobot/project-static/docs/user-guide/administration/security/index.html +2 -2
  208. nautobot/project-static/docs/user-guide/administration/security/notices.html +2 -2
  209. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +2 -2
  210. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +2 -2
  211. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +2 -2
  212. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +2 -2
  213. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +2 -2
  214. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +2 -2
  215. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +2 -2
  216. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +2 -2
  217. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +2 -2
  218. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +2 -2
  219. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +2 -2
  220. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +2 -2
  221. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +2 -2
  222. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +2 -2
  223. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +2 -2
  224. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +2 -2
  225. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +2 -2
  226. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +2 -2
  227. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +2 -2
  228. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +2 -2
  229. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +2 -2
  230. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +2 -2
  231. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +2 -2
  232. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +2 -2
  233. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +2 -2
  234. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +2 -2
  235. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +2 -2
  236. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +2 -2
  237. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +2 -2
  238. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +2 -2
  239. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +2 -2
  240. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +2 -2
  241. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +2 -2
  242. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +2 -2
  243. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +2 -2
  244. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +2 -2
  245. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +2 -2
  246. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +2 -2
  247. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +2 -2
  248. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +2 -2
  249. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +2 -2
  250. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +2 -2
  251. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +2 -2
  252. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +2 -2
  253. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +2 -2
  254. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +2 -2
  255. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +2 -2
  256. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +2 -2
  257. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +2 -2
  258. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +2 -2
  259. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +2 -2
  260. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +2 -2
  261. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +2 -2
  262. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +2 -2
  263. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +2 -2
  264. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +2 -2
  265. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +2 -2
  266. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +2 -2
  267. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +2 -2
  268. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +2 -2
  269. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +2 -2
  270. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +2 -2
  271. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +2 -2
  272. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +2 -2
  273. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +2 -2
  274. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +2 -2
  275. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +2 -2
  276. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +2 -2
  277. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +2 -2
  278. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +2 -2
  279. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +2 -2
  280. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +2 -2
  281. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +2 -2
  282. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +2 -2
  283. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +2 -2
  284. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +2 -2
  285. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +2 -2
  286. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +2 -2
  287. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +2 -2
  288. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +2 -2
  289. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +2 -2
  290. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +2 -2
  291. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +2 -2
  292. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +2 -2
  293. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +2 -2
  294. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +2 -2
  295. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +2 -2
  296. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +2 -2
  297. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +2 -2
  298. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +2 -2
  299. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +2 -2
  300. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +2 -2
  301. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +2 -2
  302. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +2 -2
  303. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +2 -2
  304. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +2 -2
  305. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +2 -2
  306. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +2 -2
  307. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +2 -2
  308. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +2 -2
  309. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +2 -2
  310. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +2 -2
  311. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +3 -3
  312. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +2 -2
  313. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +2 -2
  314. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +2 -2
  315. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +2 -2
  316. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +2 -2
  317. nautobot/project-static/docs/user-guide/index.html +2 -2
  318. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +2 -2
  319. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +2 -2
  320. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +2 -2
  321. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +2 -2
  322. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +2 -2
  323. nautobot/project-static/docs/user-guide/platform-functionality/events.html +2 -2
  324. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +2 -2
  325. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +2 -2
  326. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +2 -2
  327. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +2 -2
  328. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +2 -2
  329. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +2 -2
  330. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +2 -2
  331. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +2 -2
  332. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +2 -2
  333. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +2 -2
  334. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +2 -2
  335. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +2 -2
  336. nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +2 -2
  337. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +2 -2
  338. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +2 -2
  339. nautobot/project-static/docs/user-guide/platform-functionality/note.html +2 -2
  340. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +2 -2
  341. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +2 -2
  342. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +2 -2
  343. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +2 -2
  344. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +2 -2
  345. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +2 -2
  346. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +2 -2
  347. nautobot/project-static/docs/user-guide/platform-functionality/role.html +2 -2
  348. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +2 -2
  349. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +2 -2
  350. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +2 -2
  351. nautobot/project-static/docs/user-guide/platform-functionality/status.html +2 -2
  352. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +2 -2
  353. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +2 -2
  354. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +2 -2
  355. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +2 -2
  356. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +2 -2
  357. nautobot/wireless/navigation.py +1 -1
  358. nautobot/wireless/tables.py +13 -5
  359. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/METADATA +1 -1
  360. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/RECORD +364 -357
  361. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/LICENSE.txt +0 -0
  362. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/NOTICE +0 -0
  363. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/WHEEL +0 -0
  364. {nautobot-2.4.11.dist-info → nautobot-2.4.13.dist-info}/entry_points.txt +0 -0
nautobot/ipam/models.py CHANGED
@@ -170,6 +170,9 @@ class VRF(PrimaryModel):
170
170
  # where multiple different-RD VRFs with the same name may already exist.
171
171
  # ["namespace", "name"],
172
172
  ]
173
+ index_together = [
174
+ ["namespace", "name", "rd"],
175
+ ]
173
176
  verbose_name = "VRF"
174
177
  verbose_name_plural = "VRFs"
175
178
 
@@ -409,7 +412,12 @@ class VRFPrefixAssignment(BaseModel):
409
412
  super().clean()
410
413
 
411
414
  if self.prefix.namespace != self.vrf.namespace:
412
- raise ValidationError({"prefix": "Prefix must be in same namespace as VRF"})
415
+ raise ValidationError(
416
+ {
417
+ "prefix": f"Prefix (namespace {self.prefix.namespace}) must be in same namespace as "
418
+ "VRF (namespace {self.vrf.namespace})"
419
+ }
420
+ )
413
421
 
414
422
 
415
423
  @extras_features(
@@ -589,6 +597,7 @@ class Prefix(PrimaryModel):
589
597
  index_together = [
590
598
  ["network", "broadcast", "prefix_length"],
591
599
  ["namespace", "network", "broadcast", "prefix_length"],
600
+ ["namespace", "ip_version", "network", "prefix_length"],
592
601
  ]
593
602
  unique_together = ["namespace", "network", "prefix_length"]
594
603
  verbose_name_plural = "prefixes"
@@ -1250,6 +1259,9 @@ class IPAddress(PrimaryModel):
1250
1259
  verbose_name = "IP address"
1251
1260
  verbose_name_plural = "IP addresses"
1252
1261
  unique_together = ["parent", "host"]
1262
+ index_together = [
1263
+ ["ip_version", "host", "mask_length"],
1264
+ ]
1253
1265
 
1254
1266
  def __init__(self, *args, address=None, namespace=None, **kwargs):
1255
1267
  super().__init__(*args, **kwargs)
@@ -316,9 +316,7 @@ class VRFPrefixAssignmentTest(APIViewTestCases.APIViewTestCase):
316
316
  response, "The fields vrf, prefix must make a unique set.", status_code=status.HTTP_400_BAD_REQUEST
317
317
  )
318
318
  response = self.client.post(self._get_list_url(), wrong_namespace_create_data, format="json", **self.header)
319
- self.assertContains(
320
- response, "Prefix must be in same namespace as VRF", status_code=status.HTTP_400_BAD_REQUEST
321
- )
319
+ self.assertContains(response, "must be in same namespace as", status_code=status.HTTP_400_BAD_REQUEST)
322
320
  response = self.client.post(self._get_list_url(), missing_field_create_data, format="json", **self.header)
323
321
  self.assertContains(response, "This field may not be null.", status_code=status.HTTP_400_BAD_REQUEST)
324
322
 
@@ -5,6 +5,8 @@ import random
5
5
  from django.apps import apps
6
6
  from netaddr import IPNetwork
7
7
 
8
+ from nautobot.ipam.models import get_default_namespace
9
+
8
10
  # Calculate the probabilities to use for the maybe_subdivide() function defined below.
9
11
 
10
12
  # Frequency of IPv4 (leaf, network) Prefixes by each given mask length in a "realistic" data set.
@@ -113,40 +115,73 @@ def create_prefixes_and_ips(initial_subnet: str, apps=apps, seed="Nautobot"): #
113
115
  status_active, _ = Status.objects.get_or_create(name="Active", defaults={"slug": "active"})
114
116
 
115
117
  for i in range(1, 11):
116
- Tenant.objects.create(name=f"{initial_subnet} Tenant {i}")
117
- VRF.objects.create(name=f"{initial_subnet} VRF {i}", enforce_unique=False) # TODO should some enforce_unique?
118
+ Tenant.objects.get_or_create(name=f"{initial_subnet} Tenant {i}")
119
+ if hasattr(VRF, "enforce_unique"):
120
+ VRF.objects.get_or_create(
121
+ name=f"{initial_subnet} VRF {i}",
122
+ enforce_unique=False, # TODO should some enforce_unique?
123
+ )
124
+ else:
125
+ VRF.objects.get_or_create(name=f"{initial_subnet} VRF {i}")
118
126
 
119
127
  all_tenants = list(Tenant.objects.all())
120
- all_vrfs = list(VRF.objects.all())
128
+ if hasattr(VRF, "namespace"):
129
+ all_vrfs = list(VRF.objects.filter(namespace=get_default_namespace()))
130
+ else:
131
+ all_vrfs = list(VRF.objects.all())
132
+
133
+ create_prefixes(initial_subnet, all_tenants, all_vrfs, status_active, Prefix)
134
+ create_ips(initial_subnet, all_tenants, all_vrfs, status_active, IPAddress)
121
135
 
136
+
137
+ def create_prefixes(initial_subnet, all_tenants, all_vrfs, status_active, Prefix):
122
138
  print(f"Creating Prefixes to subdivide {initial_subnet}")
123
139
  unique_prefix_count = 0
124
140
  duplicate_prefix_count = 0
125
141
  for subnet in maybe_subdivide(IPNetwork(initial_subnet)):
126
142
  if random.random() < 0.95: # noqa: S311 # suspicious-non-cryptographic-random-usage
127
143
  # 95% chance to create any given Prefix
128
- Prefix.objects.create(
129
- network=str(subnet.network),
130
- broadcast=str(subnet.broadcast if subnet.broadcast else subnet[-1]),
131
- prefix_length=subnet.prefixlen,
132
- status=status_active,
133
- tenant=maybe_random_instance(all_tenants),
134
- vrf=maybe_random_instance(all_vrfs),
135
- )
136
- unique_prefix_count += 1
137
- while random.random() < 0.1: # noqa: S311 # suspicious-non-cryptographic-random-usage
138
- # 10% repeating chance to create a duplicate(s) of this Prefix
139
- Prefix.objects.create(
144
+ vrf = maybe_random_instance(all_vrfs)
145
+ if hasattr(Prefix, "vrf"):
146
+ Prefix.objects.get_or_create(
140
147
  network=str(subnet.network),
141
148
  broadcast=str(subnet.broadcast if subnet.broadcast else subnet[-1]),
142
149
  prefix_length=subnet.prefixlen,
143
150
  status=status_active,
144
151
  tenant=maybe_random_instance(all_tenants),
145
- vrf=maybe_random_instance(all_vrfs),
152
+ vrf=vrf,
146
153
  )
147
- duplicate_prefix_count += 1
154
+ else:
155
+ prefix, _ = Prefix.objects.get_or_create(
156
+ network=str(subnet.network),
157
+ broadcast=str(subnet.broadcast if subnet.broadcast else subnet[-1]),
158
+ prefix_length=subnet.prefixlen,
159
+ status=status_active,
160
+ tenant=maybe_random_instance(all_tenants),
161
+ )
162
+ if vrf is not None:
163
+ vrf.add_prefix(prefix)
164
+
165
+ unique_prefix_count += 1
166
+ if hasattr(Prefix, "vrf"):
167
+ while random.random() < 0.1: # noqa: S311 # suspicious-non-cryptographic-random-usage
168
+ # 10% repeating chance to create a duplicate(s) of this Prefix
169
+ Prefix.objects.create(
170
+ network=str(subnet.network),
171
+ broadcast=str(subnet.broadcast if subnet.broadcast else subnet[-1]),
172
+ prefix_length=subnet.prefixlen,
173
+ status=status_active,
174
+ tenant=maybe_random_instance(all_tenants),
175
+ vrf=maybe_random_instance(all_vrfs),
176
+ )
177
+ duplicate_prefix_count += 1
178
+ else:
179
+ # TODO: create prefixes in different namespaces?
180
+ pass
148
181
  print(f"Created {unique_prefix_count} unique Prefixes and {duplicate_prefix_count} duplicates")
149
182
 
183
+
184
+ def create_ips(initial_subnet, all_tenants, all_vrfs, status_active, IPAddress):
150
185
  print(f"Creating IPAddresses within {initial_subnet}")
151
186
  unique_ip_count = 0
152
187
  duplicate_ip_count = 0
@@ -154,17 +189,7 @@ def create_prefixes_and_ips(initial_subnet: str, apps=apps, seed="Nautobot"): #
154
189
  if random.random() < 0.05: # noqa: S311 # suspicious-non-cryptographic-random-usage
155
190
  # 5% chance to create any given IP address
156
191
  network = IPNetwork(ip)
157
- IPAddress.objects.create(
158
- host=str(network.ip),
159
- broadcast=str(network.broadcast if network.broadcast else network[-1]),
160
- prefix_length=network.prefixlen,
161
- status=status_active,
162
- tenant=maybe_random_instance(all_tenants),
163
- vrf=maybe_random_instance(all_vrfs),
164
- )
165
- unique_ip_count += 1
166
- while random.random() < 0.1: # noqa: S311 # suspicious-non-cryptographic-random-usage
167
- # 10% repeating chance to create a duplicate(s) of this IP
192
+ if hasattr(IPAddress, "prefix_length"):
168
193
  IPAddress.objects.create(
169
194
  host=str(network.ip),
170
195
  broadcast=str(network.broadcast if network.broadcast else network[-1]),
@@ -173,5 +198,27 @@ def create_prefixes_and_ips(initial_subnet: str, apps=apps, seed="Nautobot"): #
173
198
  tenant=maybe_random_instance(all_tenants),
174
199
  vrf=maybe_random_instance(all_vrfs),
175
200
  )
176
- duplicate_ip_count += 1
201
+ else:
202
+ IPAddress.objects.create(
203
+ host=str(network.ip),
204
+ mask_length=network.prefixlen,
205
+ status=status_active,
206
+ tenant=maybe_random_instance(all_tenants),
207
+ )
208
+ unique_ip_count += 1
209
+ if hasattr(IPAddress, "prefix_length"):
210
+ while random.random() < 0.1: # noqa: S311 # suspicious-non-cryptographic-random-usage
211
+ # 10% repeating chance to create a duplicate(s) of this IP
212
+ IPAddress.objects.create(
213
+ host=str(network.ip),
214
+ broadcast=str(network.broadcast if network.broadcast else network[-1]),
215
+ prefix_length=network.prefixlen,
216
+ status=status_active,
217
+ tenant=maybe_random_instance(all_tenants),
218
+ vrf=maybe_random_instance(all_vrfs),
219
+ )
220
+ duplicate_ip_count += 1
221
+ else:
222
+ # TODO: create duplicate IPs in other namespaces?
223
+ pass
177
224
  print(f"Created {unique_ip_count} unique IPAddresses and {duplicate_ip_count} duplicates")
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
  <link rel="icon" href="/projects/core/en/stable/assets/favicon.ico">
15
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.14">
15
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.15">
16
16
 
17
17
 
18
18
 
@@ -10148,7 +10148,7 @@
10148
10148
  <script id="__config" type="application/json">{"base": "/projects/core/en/stable/", "features": ["content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "/projects/core/en/stable/assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
10149
10149
 
10150
10150
 
10151
- <script src="/projects/core/en/stable/assets/javascripts/bundle.13a4f30d.min.js"></script>
10151
+ <script src="/projects/core/en/stable/assets/javascripts/bundle.56ea9cef.min.js"></script>
10152
10152
 
10153
10153
 
10154
10154
  </body>
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
  <link rel="icon" href="../assets/favicon.ico">
21
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.14">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.15">
22
22
 
23
23
 
24
24
 
@@ -10316,7 +10316,7 @@
10316
10316
  <script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
10317
10317
 
10318
10318
 
10319
- <script src="../assets/javascripts/bundle.13a4f30d.min.js"></script>
10319
+ <script src="../assets/javascripts/bundle.56ea9cef.min.js"></script>
10320
10320
 
10321
10321
 
10322
10322
  <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
  <link rel="icon" href="../assets/favicon.ico">
19
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.14">
19
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.15">
20
20
 
21
21
 
22
22
 
@@ -10249,7 +10249,7 @@
10249
10249
  <script id="__config" type="application/json">{"base": "..", "features": ["content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
10250
10250
 
10251
10251
 
10252
- <script src="../assets/javascripts/bundle.13a4f30d.min.js"></script>
10252
+ <script src="../assets/javascripts/bundle.56ea9cef.min.js"></script>
10253
10253
 
10254
10254
 
10255
10255
  <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});