nautobot 2.4.9__py3-none-any.whl → 2.4.11__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 (433) hide show
  1. nautobot/cloud/tests/test_views.py +13 -1
  2. nautobot/cloud/views.py +39 -9
  3. nautobot/core/api/parsers.py +56 -2
  4. nautobot/core/celery/__init__.py +21 -0
  5. nautobot/core/celery/encoders.py +3 -0
  6. nautobot/core/forms/forms.py +4 -1
  7. nautobot/core/jobs/bulk_actions.py +8 -8
  8. nautobot/core/jobs/cleanup.py +11 -0
  9. nautobot/core/management/commands/generate_test_data.py +2 -1
  10. nautobot/core/models/__init__.py +2 -0
  11. nautobot/core/templates/generic/object_retrieve.html +1 -1
  12. nautobot/core/testing/mixins.py +19 -1
  13. nautobot/core/testing/views.py +104 -8
  14. nautobot/core/tests/test_csv.py +92 -1
  15. nautobot/core/tests/test_jinja_filters.py +59 -0
  16. nautobot/core/tests/test_jobs.py +20 -4
  17. nautobot/core/tests/test_utils.py +193 -0
  18. nautobot/core/tests/test_views.py +73 -0
  19. nautobot/core/tests/test_views_utils.py +53 -2
  20. nautobot/core/ui/object_detail.py +4 -0
  21. nautobot/core/urls.py +2 -2
  22. nautobot/core/utils/lookup.py +4 -2
  23. nautobot/core/utils/module_loading.py +86 -58
  24. nautobot/core/views/__init__.py +21 -0
  25. nautobot/core/views/generic.py +2 -12
  26. nautobot/core/views/mixins.py +19 -1
  27. nautobot/core/views/renderers.py +4 -13
  28. nautobot/core/views/utils.py +16 -0
  29. nautobot/dcim/api/serializers.py +13 -0
  30. nautobot/dcim/api/urls.py +1 -0
  31. nautobot/dcim/api/views.py +20 -0
  32. nautobot/dcim/apps.py +1 -0
  33. nautobot/dcim/factory.py +11 -0
  34. nautobot/dcim/filters/__init__.py +110 -0
  35. nautobot/dcim/forms.py +205 -19
  36. nautobot/dcim/migrations/0070_modulefamily_models.py +92 -0
  37. nautobot/dcim/models/__init__.py +2 -0
  38. nautobot/dcim/models/device_component_templates.py +18 -0
  39. nautobot/dcim/models/device_components.py +25 -1
  40. nautobot/dcim/models/devices.py +68 -0
  41. nautobot/dcim/navigation.py +16 -0
  42. nautobot/dcim/tables/__init__.py +2 -0
  43. nautobot/dcim/tables/devices.py +48 -0
  44. nautobot/dcim/tables/devicetypes.py +35 -1
  45. nautobot/dcim/tables/template_code.py +2 -0
  46. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +1 -90
  47. nautobot/dcim/templates/dcim/inc/cable_toggle_buttons.html +1 -1
  48. nautobot/dcim/templates/dcim/interfaceredundancygroup_retrieve.html +1 -63
  49. nautobot/dcim/templates/dcim/location.html +2 -249
  50. nautobot/dcim/templates/dcim/location_edit.html +2 -38
  51. nautobot/dcim/templates/dcim/location_retrieve.html +249 -0
  52. nautobot/dcim/templates/dcim/location_update.html +38 -0
  53. nautobot/dcim/templates/dcim/module_update.html +1 -0
  54. nautobot/dcim/templates/dcim/modulebay_retrieve.html +93 -1
  55. nautobot/dcim/templates/dcim/modulefamily_retrieve.html +31 -0
  56. nautobot/dcim/templates/dcim/moduletype_retrieve.html +6 -0
  57. nautobot/dcim/templates/dcim/powerfeed_retrieve.html +1 -160
  58. nautobot/dcim/tests/test_api.py +35 -0
  59. nautobot/dcim/tests/test_filters.py +102 -3
  60. nautobot/dcim/tests/test_models.py +146 -0
  61. nautobot/dcim/tests/test_views.py +70 -97
  62. nautobot/dcim/urls.py +4 -22
  63. nautobot/dcim/views.py +439 -153
  64. nautobot/extras/api/views.py +9 -2
  65. nautobot/extras/context_managers.py +2 -2
  66. nautobot/extras/datasources/git.py +11 -3
  67. nautobot/extras/forms/forms.py +9 -5
  68. nautobot/extras/jobs.py +4 -2
  69. nautobot/extras/models/customfields.py +2 -0
  70. nautobot/extras/models/datasources.py +13 -8
  71. nautobot/extras/models/groups.py +18 -0
  72. nautobot/extras/models/jobs.py +19 -0
  73. nautobot/extras/models/metadata.py +2 -0
  74. nautobot/extras/models/models.py +4 -0
  75. nautobot/extras/models/secrets.py +7 -0
  76. nautobot/extras/plugins/__init__.py +3 -0
  77. nautobot/extras/secrets/__init__.py +14 -0
  78. nautobot/extras/tables.py +40 -3
  79. nautobot/extras/templates/extras/configcontext.html +2 -220
  80. nautobot/extras/templates/extras/configcontext_edit.html +2 -50
  81. nautobot/extras/templates/extras/configcontext_retrieve.html +2 -0
  82. nautobot/extras/templates/extras/configcontext_update.html +50 -0
  83. nautobot/extras/templates/extras/configcontextschema.html +2 -48
  84. nautobot/extras/templates/extras/configcontextschema_edit.html +2 -19
  85. nautobot/extras/templates/extras/configcontextschema_retrieve.html +48 -0
  86. nautobot/extras/templates/extras/configcontextschema_update.html +19 -0
  87. nautobot/extras/templates/extras/inc/configcontext_data.html +1 -0
  88. nautobot/extras/templates/extras/inc/json_data.html +1 -1
  89. nautobot/extras/templates/extras/inc/json_format.html +2 -2
  90. nautobot/extras/templates/extras/job_edit.html +12 -6
  91. nautobot/extras/templates/extras/tag.html +2 -52
  92. nautobot/extras/templates/extras/tag_edit.html +2 -15
  93. nautobot/extras/templates/extras/tag_retrieve.html +52 -0
  94. nautobot/extras/templates/extras/tag_update.html +15 -0
  95. nautobot/extras/templates/extras/team_retrieve.html +2 -2
  96. nautobot/extras/tests/test_api.py +15 -15
  97. nautobot/extras/tests/test_context_managers.py +20 -0
  98. nautobot/extras/tests/test_filters.py +4 -4
  99. nautobot/extras/tests/test_jobs.py +23 -10
  100. nautobot/extras/tests/test_models.py +45 -8
  101. nautobot/extras/tests/test_plugins.py +6 -3
  102. nautobot/extras/tests/test_views.py +66 -11
  103. nautobot/extras/urls.py +4 -134
  104. nautobot/extras/views.py +113 -158
  105. nautobot/ipam/models.py +51 -4
  106. nautobot/ipam/tables.py +19 -0
  107. nautobot/ipam/templates/ipam/vlan.html +2 -84
  108. nautobot/ipam/templates/ipam/vlan_edit.html +2 -24
  109. nautobot/ipam/templates/ipam/vlan_retrieve.html +84 -0
  110. nautobot/ipam/templates/ipam/vlan_update.html +24 -0
  111. nautobot/ipam/tests/test_views.py +5 -0
  112. nautobot/ipam/urls.py +1 -21
  113. nautobot/ipam/views.py +45 -70
  114. nautobot/project-static/docs/404.html +31 -8
  115. nautobot/project-static/docs/apps/index.html +31 -8
  116. nautobot/project-static/docs/apps/nautobot-apps.html +31 -8
  117. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +31 -8
  118. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +31 -8
  119. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +31 -8
  120. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +31 -8
  121. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +31 -8
  122. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +31 -8
  123. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +31 -8
  124. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +31 -8
  125. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +31 -8
  126. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +31 -8
  127. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +31 -8
  128. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +31 -8
  129. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +31 -8
  130. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +31 -8
  131. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +31 -8
  132. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +31 -8
  133. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +31 -8
  134. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +31 -8
  135. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +31 -8
  136. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +120 -8
  137. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +31 -8
  138. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +31 -8
  139. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +31 -8
  140. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +31 -8
  141. nautobot/project-static/docs/development/apps/api/configuration-view.html +31 -8
  142. nautobot/project-static/docs/development/apps/api/database-backend-config.html +31 -8
  143. nautobot/project-static/docs/development/apps/api/models/django-admin.html +31 -8
  144. nautobot/project-static/docs/development/apps/api/models/global-search.html +31 -8
  145. nautobot/project-static/docs/development/apps/api/models/graphql.html +31 -8
  146. nautobot/project-static/docs/development/apps/api/models/index.html +31 -8
  147. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +40 -8
  148. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +31 -8
  149. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +31 -8
  150. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +31 -8
  151. nautobot/project-static/docs/development/apps/api/platform-features/index.html +31 -8
  152. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +31 -8
  153. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +31 -8
  154. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +31 -8
  155. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +70 -46
  156. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +31 -8
  157. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +31 -8
  158. nautobot/project-static/docs/development/apps/api/prometheus.html +31 -8
  159. nautobot/project-static/docs/development/apps/api/setup.html +31 -8
  160. nautobot/project-static/docs/development/apps/api/testing.html +31 -8
  161. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +31 -8
  162. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +31 -8
  163. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +31 -8
  164. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +31 -8
  165. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +31 -8
  166. nautobot/project-static/docs/development/apps/api/views/base-template.html +31 -8
  167. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +31 -8
  168. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +31 -8
  169. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +31 -8
  170. nautobot/project-static/docs/development/apps/api/views/index.html +31 -8
  171. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +31 -8
  172. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +31 -8
  173. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +31 -8
  174. nautobot/project-static/docs/development/apps/api/views/notes.html +31 -8
  175. nautobot/project-static/docs/development/apps/api/views/rest-api.html +31 -8
  176. nautobot/project-static/docs/development/apps/api/views/urls.html +31 -8
  177. nautobot/project-static/docs/development/apps/index.html +31 -8
  178. nautobot/project-static/docs/development/apps/migration/code-updates.html +31 -8
  179. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +31 -8
  180. nautobot/project-static/docs/development/apps/migration/from-v1.html +31 -8
  181. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +31 -8
  182. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +31 -8
  183. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +31 -8
  184. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +31 -8
  185. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +31 -8
  186. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +31 -8
  187. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +31 -8
  188. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +31 -8
  189. nautobot/project-static/docs/development/apps/porting-from-netbox.html +31 -8
  190. nautobot/project-static/docs/development/core/application-registry.html +31 -8
  191. nautobot/project-static/docs/development/core/best-practices.html +31 -8
  192. nautobot/project-static/docs/development/core/bootstrap-ui.html +31 -8
  193. nautobot/project-static/docs/development/core/caching.html +31 -8
  194. nautobot/project-static/docs/development/core/controllers.html +31 -8
  195. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +31 -8
  196. nautobot/project-static/docs/development/core/generic-views.html +31 -8
  197. nautobot/project-static/docs/development/core/getting-started.html +31 -8
  198. nautobot/project-static/docs/development/core/homepage.html +31 -8
  199. nautobot/project-static/docs/development/core/index.html +31 -8
  200. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +31 -8
  201. nautobot/project-static/docs/development/core/model-checklist.html +31 -8
  202. nautobot/project-static/docs/development/core/model-features.html +31 -8
  203. nautobot/project-static/docs/development/core/natural-keys.html +31 -8
  204. nautobot/project-static/docs/development/core/navigation-menu.html +31 -8
  205. nautobot/project-static/docs/development/core/release-checklist.html +31 -8
  206. nautobot/project-static/docs/development/core/role-internals.html +31 -8
  207. nautobot/project-static/docs/development/core/settings.html +31 -8
  208. nautobot/project-static/docs/development/core/style-guide.html +31 -8
  209. nautobot/project-static/docs/development/core/templates.html +31 -8
  210. nautobot/project-static/docs/development/core/testing.html +31 -8
  211. nautobot/project-static/docs/development/core/ui-component-framework.html +31 -8
  212. nautobot/project-static/docs/development/core/user-preferences.html +31 -8
  213. nautobot/project-static/docs/development/index.html +31 -8
  214. nautobot/project-static/docs/development/jobs/getting-started.html +35 -8
  215. nautobot/project-static/docs/development/jobs/index.html +31 -8
  216. nautobot/project-static/docs/development/jobs/installation.html +31 -8
  217. nautobot/project-static/docs/development/jobs/job-extensions.html +31 -8
  218. nautobot/project-static/docs/development/jobs/job-logging.html +31 -8
  219. nautobot/project-static/docs/development/jobs/job-patterns.html +31 -8
  220. nautobot/project-static/docs/development/jobs/job-structure.html +31 -8
  221. nautobot/project-static/docs/development/jobs/migration/from-v1.html +31 -8
  222. nautobot/project-static/docs/development/jobs/testing.html +31 -8
  223. nautobot/project-static/docs/index.html +31 -8
  224. nautobot/project-static/docs/insert-analytics.sh +36 -0
  225. nautobot/project-static/docs/objects.inv +0 -0
  226. nautobot/project-static/docs/overview/application_stack.html +31 -8
  227. nautobot/project-static/docs/overview/design_philosophy.html +31 -8
  228. nautobot/project-static/docs/release-notes/index.html +31 -8
  229. nautobot/project-static/docs/release-notes/version-1.0.html +31 -8
  230. nautobot/project-static/docs/release-notes/version-1.1.html +31 -8
  231. nautobot/project-static/docs/release-notes/version-1.2.html +31 -8
  232. nautobot/project-static/docs/release-notes/version-1.3.html +31 -8
  233. nautobot/project-static/docs/release-notes/version-1.4.html +31 -8
  234. nautobot/project-static/docs/release-notes/version-1.5.html +31 -8
  235. nautobot/project-static/docs/release-notes/version-1.6.html +328 -8
  236. nautobot/project-static/docs/release-notes/version-2.0.html +31 -8
  237. nautobot/project-static/docs/release-notes/version-2.1.html +31 -8
  238. nautobot/project-static/docs/release-notes/version-2.2.html +31 -8
  239. nautobot/project-static/docs/release-notes/version-2.3.html +31 -8
  240. nautobot/project-static/docs/release-notes/version-2.4.html +353 -8
  241. nautobot/project-static/docs/search/search_index.json +1 -1
  242. nautobot/project-static/docs/sitemap.xml +302 -298
  243. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  244. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +31 -8
  245. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +31 -8
  246. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +31 -8
  247. nautobot/project-static/docs/user-guide/administration/configuration/index.html +31 -8
  248. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +31 -8
  249. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +31 -8
  250. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +31 -8
  251. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +31 -8
  252. nautobot/project-static/docs/user-guide/administration/guides/docker.html +31 -8
  253. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +31 -8
  254. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +31 -8
  255. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +31 -8
  256. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +31 -8
  257. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +31 -8
  258. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +31 -8
  259. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +31 -8
  260. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +31 -8
  261. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +31 -8
  262. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +31 -8
  263. nautobot/project-static/docs/user-guide/administration/installation/index.html +31 -8
  264. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +31 -8
  265. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +31 -8
  266. nautobot/project-static/docs/user-guide/administration/installation/services.html +31 -8
  267. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +31 -8
  268. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +31 -8
  269. nautobot/project-static/docs/user-guide/administration/security/index.html +31 -9
  270. nautobot/project-static/docs/user-guide/administration/security/notices.html +144 -9
  271. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +31 -8
  272. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +31 -8
  273. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +31 -8
  274. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +31 -8
  275. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +31 -8
  276. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +31 -8
  277. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +31 -8
  278. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +31 -8
  279. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +31 -8
  280. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +31 -8
  281. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +31 -8
  282. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +31 -8
  283. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +31 -8
  284. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +31 -8
  285. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +31 -8
  286. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +31 -8
  287. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +31 -8
  288. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +31 -8
  289. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +31 -8
  290. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +31 -8
  291. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +31 -8
  292. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +31 -8
  293. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +31 -8
  294. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +31 -8
  295. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +31 -8
  296. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +31 -8
  297. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +31 -8
  298. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +31 -8
  299. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +31 -8
  300. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +31 -8
  301. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +31 -8
  302. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +31 -8
  303. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +31 -8
  304. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +31 -8
  305. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +43 -20
  306. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +31 -8
  307. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +31 -8
  308. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +31 -8
  309. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +31 -8
  310. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +31 -8
  311. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +31 -8
  312. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +31 -8
  313. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +31 -8
  314. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +31 -8
  315. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +31 -8
  316. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +35 -8
  317. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +35 -8
  318. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +35 -8
  319. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +10261 -0
  320. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +34 -11
  321. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +31 -8
  322. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +31 -8
  323. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +31 -8
  324. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +31 -8
  325. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +31 -8
  326. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +31 -8
  327. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +31 -8
  328. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +31 -8
  329. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +31 -8
  330. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +31 -8
  331. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +31 -8
  332. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +31 -8
  333. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +31 -8
  334. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +31 -8
  335. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +31 -8
  336. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +31 -8
  337. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +31 -8
  338. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +31 -8
  339. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +31 -8
  340. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +31 -8
  341. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +31 -8
  342. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +31 -8
  343. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +31 -8
  344. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +31 -8
  345. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +31 -8
  346. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +31 -8
  347. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +31 -8
  348. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +31 -8
  349. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +31 -8
  350. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +31 -8
  351. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +31 -8
  352. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +31 -8
  353. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +31 -8
  354. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +31 -8
  355. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +31 -8
  356. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +31 -8
  357. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +31 -8
  358. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +31 -8
  359. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +31 -8
  360. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +31 -8
  361. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +31 -8
  362. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +31 -8
  363. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +31 -8
  364. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +31 -8
  365. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +31 -8
  366. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +31 -8
  367. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +31 -8
  368. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +31 -8
  369. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +31 -8
  370. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +31 -8
  371. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +31 -8
  372. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +31 -8
  373. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +41 -15
  374. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +31 -8
  375. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +31 -8
  376. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +31 -8
  377. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +31 -8
  378. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +31 -8
  379. nautobot/project-static/docs/user-guide/index.html +31 -8
  380. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +31 -8
  381. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +31 -8
  382. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +31 -8
  383. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +31 -8
  384. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +31 -8
  385. nautobot/project-static/docs/user-guide/platform-functionality/events.html +31 -8
  386. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +31 -8
  387. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +31 -8
  388. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +37 -9
  389. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +31 -8
  390. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +31 -8
  391. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +31 -8
  392. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +31 -8
  393. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +31 -8
  394. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +31 -8
  395. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +31 -8
  396. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +31 -8
  397. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +31 -8
  398. nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +31 -8
  399. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +31 -8
  400. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +31 -8
  401. nautobot/project-static/docs/user-guide/platform-functionality/note.html +31 -8
  402. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +31 -8
  403. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +31 -8
  404. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +31 -8
  405. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +31 -8
  406. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +31 -8
  407. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +31 -8
  408. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +31 -8
  409. nautobot/project-static/docs/user-guide/platform-functionality/role.html +31 -8
  410. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +31 -8
  411. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +31 -8
  412. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +31 -8
  413. nautobot/project-static/docs/user-guide/platform-functionality/status.html +31 -8
  414. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +31 -8
  415. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +31 -8
  416. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +31 -8
  417. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +31 -8
  418. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +31 -8
  419. nautobot/tenancy/tables.py +2 -0
  420. nautobot/users/models.py +4 -0
  421. nautobot/virtualization/models.py +4 -0
  422. nautobot/virtualization/tests/test_views.py +1 -1
  423. nautobot/wireless/forms.py +0 -1
  424. nautobot/wireless/models.py +1 -1
  425. nautobot/wireless/tables.py +7 -0
  426. {nautobot-2.4.9.dist-info → nautobot-2.4.11.dist-info}/METADATA +4 -4
  427. {nautobot-2.4.9.dist-info → nautobot-2.4.11.dist-info}/RECORD +433 -418
  428. /nautobot/dcim/templates/dcim/{platform_edit.html → platform_create.html} +0 -0
  429. /nautobot/extras/test_jobs/{pass.py → pass_job.py} +0 -0
  430. {nautobot-2.4.9.dist-info → nautobot-2.4.11.dist-info}/LICENSE.txt +0 -0
  431. {nautobot-2.4.9.dist-info → nautobot-2.4.11.dist-info}/NOTICE +0 -0
  432. {nautobot-2.4.9.dist-info → nautobot-2.4.11.dist-info}/WHEEL +0 -0
  433. {nautobot-2.4.9.dist-info → nautobot-2.4.11.dist-info}/entry_points.txt +0 -0
@@ -1,84 +1,2 @@
1
- {% extends 'generic/object_retrieve.html' %}
2
- {% load helpers %}
3
-
4
- {% block extra_breadcrumbs %}
5
- {% if object.vlan_group %}
6
- <li><a href="{% url 'ipam:vlan_list' %}?vlan_group={{ object.vlan_group.name }}">{{ object.vlan_group }}</a></li>
7
- {% endif %}
8
- {% endblock extra_breadcrumbs %}
9
-
10
- {% block extra_nav_tabs %}
11
- <li role="presentation"{% if active_tab == 'interfaces' %} class="active"{% endif %}>
12
- <a href="{% url 'ipam:vlan_interfaces' pk=object.pk %}">Device Interfaces <span class="badge">{{ object.get_interfaces.count }}</span></a>
13
- </li>
14
- <li role="presentation"{% if active_tab == 'vminterfaces' %} class="active"{% endif %}>
15
- <a href="{% url 'ipam:vlan_vminterfaces' pk=object.pk %}">VM Interfaces <span class="badge">{{ object.get_vminterfaces.count }}</span></a>
16
- </li>
17
- {% endblock extra_nav_tabs %}
18
-
19
- {% block content_left_page %}
20
- <div class="panel panel-default">
21
- <div class="panel-heading">
22
- <strong>VLAN</strong>
23
- </div>
24
- <table class="table table-hover panel-body attr-table">
25
- <tr>
26
- <td>Locations</td>
27
- <td>
28
- {% for location in object.locations.all %}
29
- {{ location|hyperlinked_object }}<br>
30
- {% empty %}
31
- <span class="text-muted">None</span>
32
- {% endfor %}
33
- </td>
34
- </tr>
35
- <tr>
36
- <td>VLAN Group</td>
37
- <td>{{ object.vlan_group|hyperlinked_object }}</td>
38
- </tr>
39
- <tr>
40
- <td>VLAN ID</td>
41
- <td>{{ object.vid }}</td>
42
- </tr>
43
- <tr>
44
- <td>Name</td>
45
- <td>{{ object.name }}</td>
46
- </tr>
47
- {% include 'inc/tenant_table_row.html' %}
48
- <tr>
49
- <td>Status</td>
50
- <td>
51
- {{ object.status| hyperlinked_object_with_color }}
52
- </td>
53
- </tr>
54
- <tr>
55
- <td>Role</td>
56
- <td>{{ object.role | hyperlinked_object_with_color }}</td>
57
- </tr>
58
- <tr>
59
- <td>Description</td>
60
- <td>{{ object.description|placeholder }}</td>
61
- </tr>
62
- </table>
63
- </div>
64
- {% endblock content_left_page %}
65
-
66
- {% block content_full_width_page %}
67
- <div class="panel panel-default">
68
- <div class="panel-heading">
69
- <strong>Prefixes</strong>
70
- </div>
71
- {% include 'responsive_table.html' with table=prefix_table %}
72
- {% if perms.ipam.add_prefix %}
73
- <div class="panel-footer text-right noprint">
74
- <a href="{% url 'ipam:prefix_add' %}?{% if object.tenant %}tenant={{ object.tenant.pk }}{% endif %}&vlan={{ object.pk }}{% for loc in object.locations.all %}&locations={{ loc.pk }}{% endfor %}" class="btn btn-primary btn-xs">
75
- <span class="mdi mdi-plus-thick" aria-hidden="true"></span>
76
- Add a prefix
77
- </a>
78
- </div>
79
- {% endif %}
80
- </div>
81
- {% if prefix_table.paginator.num_pages > 1 %}
82
- {% include "inc/paginator.html" with paginator=prefix_table.paginator page=prefix_table.page %}
83
- {% endif %}
84
- {% endblock content_full_width_page %}
1
+ {% extends 'ipam/vlan_retrieve.html' %}
2
+ {% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
@@ -1,24 +1,2 @@
1
- {% extends 'generic/object_create.html' %}
2
- {% load form_helpers %}
3
-
4
- {% block form %}
5
- <div class="panel panel-default">
6
- <div class="panel-heading"><strong>VLAN</strong></div>
7
- <div class="panel-body">
8
- {% render_field form.vid %}
9
- {% render_field form.name %}
10
- {% render_field form.status %}
11
- {% render_field form.role %}
12
- {% render_field form.description %}
13
- </div>
14
- </div>
15
- <div class="panel panel-default">
16
- <div class="panel-heading"><strong>Assignment</strong></div>
17
- <div class="panel-body">
18
- {% render_field form.locations %}
19
- {% render_field form.vlan_group %}
20
- </div>
21
- </div>
22
- {% include 'inc/tenancy_form_panel.html' %}
23
- {% include 'inc/extras_features_edit_form_fields.html' %}
24
- {% endblock %}
1
+ {% extends 'ipam/vlan_update.html' %}
2
+ {% comment %}3.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
@@ -0,0 +1,84 @@
1
+ {% extends 'generic/object_retrieve.html' %}
2
+ {% load helpers %}
3
+
4
+ {% block extra_breadcrumbs %}
5
+ {% if object.vlan_group %}
6
+ <li><a href="{% url 'ipam:vlan_list' %}?vlan_group={{ object.vlan_group.name }}">{{ object.vlan_group }}</a></li>
7
+ {% endif %}
8
+ {% endblock extra_breadcrumbs %}
9
+
10
+ {% block extra_nav_tabs %}
11
+ <li role="presentation"{% if active_tab == 'interfaces' %} class="active"{% endif %}>
12
+ <a href="{% url 'ipam:vlan_interfaces' pk=object.pk %}">Device Interfaces <span class="badge">{{ object.get_interfaces.count }}</span></a>
13
+ </li>
14
+ <li role="presentation"{% if active_tab == 'vminterfaces' %} class="active"{% endif %}>
15
+ <a href="{% url 'ipam:vlan_vminterfaces' pk=object.pk %}">VM Interfaces <span class="badge">{{ object.get_vminterfaces.count }}</span></a>
16
+ </li>
17
+ {% endblock extra_nav_tabs %}
18
+
19
+ {% block content_left_page %}
20
+ <div class="panel panel-default">
21
+ <div class="panel-heading">
22
+ <strong>VLAN</strong>
23
+ </div>
24
+ <table class="table table-hover panel-body attr-table">
25
+ <tr>
26
+ <td>Locations</td>
27
+ <td>
28
+ {% for location in object.locations.all %}
29
+ {{ location|hyperlinked_object }}<br>
30
+ {% empty %}
31
+ <span class="text-muted">None</span>
32
+ {% endfor %}
33
+ </td>
34
+ </tr>
35
+ <tr>
36
+ <td>VLAN Group</td>
37
+ <td>{{ object.vlan_group|hyperlinked_object }}</td>
38
+ </tr>
39
+ <tr>
40
+ <td>VLAN ID</td>
41
+ <td>{{ object.vid }}</td>
42
+ </tr>
43
+ <tr>
44
+ <td>Name</td>
45
+ <td>{{ object.name }}</td>
46
+ </tr>
47
+ {% include 'inc/tenant_table_row.html' %}
48
+ <tr>
49
+ <td>Status</td>
50
+ <td>
51
+ {{ object.status| hyperlinked_object_with_color }}
52
+ </td>
53
+ </tr>
54
+ <tr>
55
+ <td>Role</td>
56
+ <td>{{ object.role | hyperlinked_object_with_color }}</td>
57
+ </tr>
58
+ <tr>
59
+ <td>Description</td>
60
+ <td>{{ object.description|placeholder }}</td>
61
+ </tr>
62
+ </table>
63
+ </div>
64
+ {% endblock content_left_page %}
65
+
66
+ {% block content_full_width_page %}
67
+ <div class="panel panel-default">
68
+ <div class="panel-heading">
69
+ <strong>Prefixes</strong>
70
+ </div>
71
+ {% include 'responsive_table.html' with table=prefix_table %}
72
+ {% if perms.ipam.add_prefix %}
73
+ <div class="panel-footer text-right noprint">
74
+ <a href="{% url 'ipam:prefix_add' %}?{% if object.tenant %}tenant={{ object.tenant.pk }}{% endif %}&vlan={{ object.pk }}{% for loc in object.locations.all %}&locations={{ loc.pk }}{% endfor %}" class="btn btn-primary btn-xs">
75
+ <span class="mdi mdi-plus-thick" aria-hidden="true"></span>
76
+ Add a prefix
77
+ </a>
78
+ </div>
79
+ {% endif %}
80
+ </div>
81
+ {% if prefix_table.paginator.num_pages > 1 %}
82
+ {% include "inc/paginator.html" with paginator=prefix_table.paginator page=prefix_table.page %}
83
+ {% endif %}
84
+ {% endblock content_full_width_page %}
@@ -0,0 +1,24 @@
1
+ {% extends 'generic/object_create.html' %}
2
+ {% load form_helpers %}
3
+
4
+ {% block form %}
5
+ <div class="panel panel-default">
6
+ <div class="panel-heading"><strong>VLAN</strong></div>
7
+ <div class="panel-body">
8
+ {% render_field form.vid %}
9
+ {% render_field form.name %}
10
+ {% render_field form.status %}
11
+ {% render_field form.role %}
12
+ {% render_field form.description %}
13
+ </div>
14
+ </div>
15
+ <div class="panel panel-default">
16
+ <div class="panel-heading"><strong>Assignment</strong></div>
17
+ <div class="panel-body">
18
+ {% render_field form.locations %}
19
+ {% render_field form.vlan_group %}
20
+ </div>
21
+ </div>
22
+ {% include 'inc/tenancy_form_panel.html' %}
23
+ {% include 'inc/extras_features_edit_form_fields.html' %}
24
+ {% endblock %}
@@ -63,6 +63,11 @@ class NamespaceTestCase(
63
63
  ViewTestCases.BulkDeleteObjectsViewTestCase,
64
64
  ):
65
65
  model = Namespace
66
+ custom_action_required_permissions = {
67
+ "ipam:namespace_vrfs": ["ipam.view_namespace", "ipam.view_vrf"],
68
+ "ipam:namespace_prefixes": ["ipam.view_namespace", "ipam.view_prefix"],
69
+ "ipam:namespace_ip_addresses": ["ipam.view_namespace", "ipam.view_ipaddress"],
70
+ }
66
71
 
67
72
  @classmethod
68
73
  def setUpTestData(cls):
nautobot/ipam/urls.py CHANGED
@@ -7,7 +7,6 @@ from . import views
7
7
  from .models import (
8
8
  IPAddress,
9
9
  Prefix,
10
- VLAN,
11
10
  )
12
11
 
13
12
  app_name = "ipam"
@@ -18,6 +17,7 @@ router.register("namespaces", views.NamespaceUIViewSet)
18
17
  router.register("rirs", views.RIRUIViewSet)
19
18
  router.register("route-targets", views.RouteTargetUIViewSet)
20
19
  router.register("services", views.ServiceUIViewSet)
20
+ router.register("vlans", views.VLANUIViewSet)
21
21
  router.register("vlan-groups", views.VLANGroupUIViewSet)
22
22
  router.register("vrfs", views.VRFUIViewSet)
23
23
 
@@ -140,12 +140,6 @@ urlpatterns = [
140
140
  name="ipaddress_delete",
141
141
  ),
142
142
  # VLANs
143
- path("vlans/", views.VLANListView.as_view(), name="vlan_list"),
144
- path("vlans/add/", views.VLANEditView.as_view(), name="vlan_add"),
145
- path("vlans/import/", views.VLANBulkImportView.as_view(), name="vlan_import"), # 3.0 TODO: remove, unused
146
- path("vlans/edit/", views.VLANBulkEditView.as_view(), name="vlan_bulk_edit"),
147
- path("vlans/delete/", views.VLANBulkDeleteView.as_view(), name="vlan_bulk_delete"),
148
- path("vlans/<uuid:pk>/", views.VLANView.as_view(), name="vlan"),
149
143
  path(
150
144
  "vlans/<uuid:pk>/interfaces/",
151
145
  views.VLANInterfacesView.as_view(),
@@ -156,20 +150,6 @@ urlpatterns = [
156
150
  views.VLANVMInterfacesView.as_view(),
157
151
  name="vlan_vminterfaces",
158
152
  ),
159
- path("vlans/<uuid:pk>/edit/", views.VLANEditView.as_view(), name="vlan_edit"),
160
- path("vlans/<uuid:pk>/delete/", views.VLANDeleteView.as_view(), name="vlan_delete"),
161
- path(
162
- "vlans/<uuid:pk>/changelog/",
163
- ObjectChangeLogView.as_view(),
164
- name="vlan_changelog",
165
- kwargs={"model": VLAN},
166
- ),
167
- path(
168
- "vlans/<uuid:pk>/notes/",
169
- ObjectNotesView.as_view(),
170
- name="vlan_notes",
171
- kwargs={"model": VLAN},
172
- ),
173
153
  ]
174
154
 
175
155
  urlpatterns += router.urls
nautobot/ipam/views.py CHANGED
@@ -31,7 +31,7 @@ from nautobot.core.views import generic, mixins as view_mixins
31
31
  from nautobot.core.views.paginator import EnhancedPaginator, get_paginate_count
32
32
  from nautobot.core.views.utils import handle_protectederror
33
33
  from nautobot.core.views.viewsets import NautobotUIViewSet
34
- from nautobot.dcim.models import Device, Interface, Location
34
+ from nautobot.dcim.models import Device, Interface
35
35
  from nautobot.extras.models import Role, SavedView, Status, Tag
36
36
  from nautobot.ipam import choices, constants
37
37
  from nautobot.ipam.api import serializers
@@ -106,7 +106,12 @@ class NamespaceUIViewSet(NautobotUIViewSet):
106
106
  context.update({"object_detail_content": self.object_detail_content})
107
107
  return context
108
108
 
109
- @action(detail=True, url_path="vrfs")
109
+ @action(
110
+ detail=True,
111
+ url_path="vrfs",
112
+ custom_view_base_action="view",
113
+ custom_view_additional_permissions=["ipam.view_vrf"],
114
+ )
110
115
  def vrfs(self, request, *args, **kwargs):
111
116
  instance = self.get_object()
112
117
  vrfs = instance.vrfs.restrict(request.user, "view")
@@ -128,7 +133,12 @@ class NamespaceUIViewSet(NautobotUIViewSet):
128
133
  }
129
134
  )
130
135
 
131
- @action(detail=True, url_path="prefixes")
136
+ @action(
137
+ detail=True,
138
+ url_path="prefixes",
139
+ custom_view_base_action="view",
140
+ custom_view_additional_permissions=["ipam.view_prefix"],
141
+ )
132
142
  def prefixes(self, request, *args, **kwargs):
133
143
  instance = self.get_object()
134
144
  prefixes = instance.prefixes.restrict(request.user, "view").select_related("status")
@@ -146,7 +156,13 @@ class NamespaceUIViewSet(NautobotUIViewSet):
146
156
  }
147
157
  )
148
158
 
149
- @action(detail=True, url_path="ip-addresses", url_name="ip_addresses")
159
+ @action(
160
+ detail=True,
161
+ url_path="ip-addresses",
162
+ url_name="ip_addresses",
163
+ custom_view_base_action="view",
164
+ custom_view_additional_permissions=["ipam.view_ipaddress"],
165
+ )
150
166
  def ip_addresses(self, request, *args, **kwargs):
151
167
  instance = self.get_object()
152
168
  ip_addresses = instance.ip_addresses.restrict(request.user, "view").select_related("role", "status", "tenant")
@@ -1189,40 +1205,37 @@ class VLANGroupUIViewSet(NautobotUIViewSet):
1189
1205
  #
1190
1206
 
1191
1207
 
1192
- class VLANListView(generic.ObjectListView):
1208
+ class VLANUIViewSet(NautobotUIViewSet): # 3.0 TODO: remove, unused BulkImportView
1209
+ bulk_update_form_class = forms.VLANBulkEditForm
1210
+ filterset_class = filters.VLANFilterSet
1211
+ filterset_form_class = forms.VLANFilterForm
1212
+ form_class = forms.VLANForm
1213
+ serializer_class = serializers.VLANSerializer
1214
+ table_class = tables.VLANTable
1193
1215
  queryset = VLAN.objects.all()
1194
- filterset = filters.VLANFilterSet
1195
- filterset_form = forms.VLANFilterForm
1196
- table = tables.VLANDetailTable
1197
-
1198
-
1199
- class VLANView(generic.ObjectView):
1200
- queryset = VLAN.objects.annotate(location_count=count_related(Location, "vlans")).select_related(
1201
- "role",
1202
- "status",
1203
- "tenant__tenant_group",
1204
- )
1205
1216
 
1206
1217
  def get_extra_context(self, request, instance):
1207
- prefixes = (
1208
- Prefix.objects.restrict(request.user, "view")
1209
- .filter(vlan=instance)
1210
- .select_related(
1211
- "status",
1212
- "role",
1213
- # "vrf",
1214
- "namespace",
1218
+ context = super().get_extra_context(request, instance)
1219
+ if self.action == "retrieve":
1220
+ prefixes = (
1221
+ Prefix.objects.restrict(request.user, "view")
1222
+ .filter(vlan=instance)
1223
+ .select_related(
1224
+ "status",
1225
+ "role",
1226
+ "namespace",
1227
+ )
1215
1228
  )
1216
- )
1217
- prefix_table = tables.PrefixTable(list(prefixes), hide_hierarchy_ui=True, exclude=["vlan"])
1229
+ prefix_table = tables.PrefixTable(list(prefixes), hide_hierarchy_ui=True, exclude=["vlan"])
1218
1230
 
1219
- paginate = {
1220
- "paginator_class": EnhancedPaginator,
1221
- "per_page": get_paginate_count(request),
1222
- }
1223
- RequestConfig(request, paginate).configure(prefix_table)
1231
+ paginate = {
1232
+ "paginator_class": EnhancedPaginator,
1233
+ "per_page": get_paginate_count(request),
1234
+ }
1235
+ RequestConfig(request, paginate).configure(prefix_table)
1224
1236
 
1225
- return {"prefix_table": prefix_table, **super().get_extra_context(request, instance)}
1237
+ context["prefix_table"] = prefix_table
1238
+ return context
1226
1239
 
1227
1240
 
1228
1241
  class VLANInterfacesView(generic.ObjectView):
@@ -1265,44 +1278,6 @@ class VLANVMInterfacesView(generic.ObjectView):
1265
1278
  }
1266
1279
 
1267
1280
 
1268
- class VLANEditView(generic.ObjectEditView):
1269
- queryset = VLAN.objects.all()
1270
- model_form = forms.VLANForm
1271
- template_name = "ipam/vlan_edit.html"
1272
-
1273
-
1274
- class VLANDeleteView(generic.ObjectDeleteView):
1275
- queryset = VLAN.objects.all()
1276
-
1277
-
1278
- class VLANBulkImportView(generic.BulkImportView): # 3.0 TODO: remove, unused
1279
- queryset = VLAN.objects.all()
1280
- table = tables.VLANTable
1281
-
1282
-
1283
- class VLANBulkEditView(generic.BulkEditView):
1284
- queryset = VLAN.objects.select_related(
1285
- "vlan_group",
1286
- "status",
1287
- "tenant",
1288
- "role",
1289
- )
1290
- filterset = filters.VLANFilterSet
1291
- table = tables.VLANTable
1292
- form = forms.VLANBulkEditForm
1293
-
1294
-
1295
- class VLANBulkDeleteView(generic.BulkDeleteView):
1296
- queryset = VLAN.objects.select_related(
1297
- "vlan_group",
1298
- "status",
1299
- "tenant",
1300
- "role",
1301
- )
1302
- filterset = filters.VLANFilterSet
1303
- table = tables.VLANTable
1304
-
1305
-
1306
1281
  #
1307
1282
  # Services
1308
1283
  #
@@ -3579,6 +3579,29 @@
3579
3579
 
3580
3580
 
3581
3581
 
3582
+ <li class="md-nav__item">
3583
+ <a href="/projects/core/en/stable/user-guide/core-data-model/dcim/modulefamily.html" class="md-nav__link">
3584
+
3585
+
3586
+
3587
+ <span class="md-ellipsis">
3588
+ Module Family
3589
+
3590
+ </span>
3591
+
3592
+
3593
+ </a>
3594
+ </li>
3595
+
3596
+
3597
+
3598
+
3599
+
3600
+
3601
+
3602
+
3603
+
3604
+
3582
3605
 
3583
3606
 
3584
3607
 
@@ -3591,7 +3614,7 @@
3591
3614
 
3592
3615
 
3593
3616
 
3594
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_10" >
3617
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_11" >
3595
3618
 
3596
3619
 
3597
3620
  <div class="md-nav__link md-nav__container">
@@ -3608,14 +3631,14 @@
3608
3631
  </a>
3609
3632
 
3610
3633
 
3611
- <label class="md-nav__link " for="__nav_2_3_4_10" id="__nav_2_3_4_10_label" tabindex="0">
3634
+ <label class="md-nav__link " for="__nav_2_3_4_11" id="__nav_2_3_4_11_label" tabindex="0">
3612
3635
  <span class="md-nav__icon md-icon"></span>
3613
3636
  </label>
3614
3637
 
3615
3638
  </div>
3616
3639
 
3617
- <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_10_label" aria-expanded="false">
3618
- <label class="md-nav__title" for="__nav_2_3_4_10">
3640
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_11_label" aria-expanded="false">
3641
+ <label class="md-nav__title" for="__nav_2_3_4_11">
3619
3642
  <span class="md-nav__icon md-icon"></span>
3620
3643
  Module Type
3621
3644
  </label>
@@ -3831,7 +3854,7 @@
3831
3854
 
3832
3855
 
3833
3856
 
3834
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_11" >
3857
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_12" >
3835
3858
 
3836
3859
 
3837
3860
  <div class="md-nav__link md-nav__container">
@@ -3848,14 +3871,14 @@
3848
3871
  </a>
3849
3872
 
3850
3873
 
3851
- <label class="md-nav__link " for="__nav_2_3_4_11" id="__nav_2_3_4_11_label" tabindex="0">
3874
+ <label class="md-nav__link " for="__nav_2_3_4_12" id="__nav_2_3_4_12_label" tabindex="0">
3852
3875
  <span class="md-nav__icon md-icon"></span>
3853
3876
  </label>
3854
3877
 
3855
3878
  </div>
3856
3879
 
3857
- <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_11_label" aria-expanded="false">
3858
- <label class="md-nav__title" for="__nav_2_3_4_11">
3880
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_12_label" aria-expanded="false">
3881
+ <label class="md-nav__title" for="__nav_2_3_4_12">
3859
3882
  <span class="md-nav__icon md-icon"></span>
3860
3883
  Module
3861
3884
  </label>
@@ -3601,6 +3601,29 @@
3601
3601
 
3602
3602
 
3603
3603
 
3604
+ <li class="md-nav__item">
3605
+ <a href="../user-guide/core-data-model/dcim/modulefamily.html" class="md-nav__link">
3606
+
3607
+
3608
+
3609
+ <span class="md-ellipsis">
3610
+ Module Family
3611
+
3612
+ </span>
3613
+
3614
+
3615
+ </a>
3616
+ </li>
3617
+
3618
+
3619
+
3620
+
3621
+
3622
+
3623
+
3624
+
3625
+
3626
+
3604
3627
 
3605
3628
 
3606
3629
 
@@ -3613,7 +3636,7 @@
3613
3636
 
3614
3637
 
3615
3638
 
3616
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_10" >
3639
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_11" >
3617
3640
 
3618
3641
 
3619
3642
  <div class="md-nav__link md-nav__container">
@@ -3630,14 +3653,14 @@
3630
3653
  </a>
3631
3654
 
3632
3655
 
3633
- <label class="md-nav__link " for="__nav_2_3_4_10" id="__nav_2_3_4_10_label" tabindex="0">
3656
+ <label class="md-nav__link " for="__nav_2_3_4_11" id="__nav_2_3_4_11_label" tabindex="0">
3634
3657
  <span class="md-nav__icon md-icon"></span>
3635
3658
  </label>
3636
3659
 
3637
3660
  </div>
3638
3661
 
3639
- <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_10_label" aria-expanded="false">
3640
- <label class="md-nav__title" for="__nav_2_3_4_10">
3662
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_11_label" aria-expanded="false">
3663
+ <label class="md-nav__title" for="__nav_2_3_4_11">
3641
3664
  <span class="md-nav__icon md-icon"></span>
3642
3665
  Module Type
3643
3666
  </label>
@@ -3853,7 +3876,7 @@
3853
3876
 
3854
3877
 
3855
3878
 
3856
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_11" >
3879
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_12" >
3857
3880
 
3858
3881
 
3859
3882
  <div class="md-nav__link md-nav__container">
@@ -3870,14 +3893,14 @@
3870
3893
  </a>
3871
3894
 
3872
3895
 
3873
- <label class="md-nav__link " for="__nav_2_3_4_11" id="__nav_2_3_4_11_label" tabindex="0">
3896
+ <label class="md-nav__link " for="__nav_2_3_4_12" id="__nav_2_3_4_12_label" tabindex="0">
3874
3897
  <span class="md-nav__icon md-icon"></span>
3875
3898
  </label>
3876
3899
 
3877
3900
  </div>
3878
3901
 
3879
- <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_11_label" aria-expanded="false">
3880
- <label class="md-nav__title" for="__nav_2_3_4_11">
3902
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_12_label" aria-expanded="false">
3903
+ <label class="md-nav__title" for="__nav_2_3_4_12">
3881
3904
  <span class="md-nav__icon md-icon"></span>
3882
3905
  Module
3883
3906
  </label>