nautobot 2.4.0__py3-none-any.whl → 2.4.0b1__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 (592) hide show
  1. nautobot/apps/__init__.py +1 -1
  2. nautobot/apps/api.py +8 -8
  3. nautobot/apps/change_logging.py +2 -2
  4. nautobot/apps/choices.py +4 -4
  5. nautobot/apps/events.py +3 -3
  6. nautobot/apps/factory.py +2 -2
  7. nautobot/apps/filters.py +1 -1
  8. nautobot/apps/forms.py +20 -20
  9. nautobot/apps/graphql.py +2 -2
  10. nautobot/apps/jobs.py +8 -8
  11. nautobot/apps/models.py +19 -19
  12. nautobot/apps/tables.py +1 -1
  13. nautobot/apps/testing.py +10 -10
  14. nautobot/apps/ui.py +2 -2
  15. nautobot/apps/utils.py +7 -7
  16. nautobot/apps/views.py +7 -7
  17. nautobot/circuits/api/serializers.py +0 -1
  18. nautobot/circuits/api/views.py +8 -4
  19. nautobot/circuits/tables.py +1 -2
  20. nautobot/circuits/templates/circuits/circuit_create.html +7 -1
  21. nautobot/circuits/views.py +3 -3
  22. nautobot/cloud/api/views.py +10 -6
  23. nautobot/cloud/models.py +1 -1
  24. nautobot/cloud/views.py +16 -0
  25. nautobot/core/api/fields.py +5 -5
  26. nautobot/core/api/filter_backends.py +9 -3
  27. nautobot/core/api/schema.py +2 -13
  28. nautobot/core/api/serializers.py +34 -40
  29. nautobot/core/api/views.py +4 -56
  30. nautobot/core/celery/log.py +4 -4
  31. nautobot/core/celery/schedulers.py +1 -1
  32. nautobot/core/choices.py +2 -2
  33. nautobot/core/events/__init__.py +3 -3
  34. nautobot/core/filters.py +16 -21
  35. nautobot/core/fixtures/user-data.json +59 -0
  36. nautobot/core/forms/__init__.py +19 -19
  37. nautobot/core/forms/fields.py +11 -14
  38. nautobot/core/forms/forms.py +2 -33
  39. nautobot/core/graphql/types.py +1 -1
  40. nautobot/core/jobs/__init__.py +7 -28
  41. nautobot/core/jobs/cleanup.py +12 -48
  42. nautobot/core/jobs/groups.py +1 -1
  43. nautobot/core/management/commands/validate_models.py +1 -1
  44. nautobot/core/models/__init__.py +1 -1
  45. nautobot/core/models/query_functions.py +2 -2
  46. nautobot/core/models/tree_queries.py +3 -6
  47. nautobot/core/settings.py +2 -29
  48. nautobot/core/settings.yaml +0 -21
  49. nautobot/core/tables.py +60 -74
  50. nautobot/core/templates/inc/media.html +0 -3
  51. nautobot/core/templates/inc/nav_menu.html +0 -1
  52. nautobot/core/templates/nautobot_config.py.j2 +0 -13
  53. nautobot/core/templates/search.html +0 -7
  54. nautobot/core/templates/utilities/render_jinja2.html +1 -1
  55. nautobot/core/templates/utilities/templatetags/tag.html +1 -1
  56. nautobot/core/templates/utilities/theme_preview.html +0 -7
  57. nautobot/core/templatetags/helpers.py +2 -11
  58. nautobot/core/testing/__init__.py +8 -8
  59. nautobot/core/testing/api.py +15 -170
  60. nautobot/core/testing/filters.py +2 -25
  61. nautobot/core/testing/forms.py +0 -2
  62. nautobot/core/testing/mixins.py +2 -7
  63. nautobot/core/testing/views.py +29 -44
  64. nautobot/core/tests/integration/test_app_home.py +1 -0
  65. nautobot/core/tests/integration/test_app_navbar.py +1 -0
  66. nautobot/core/tests/integration/test_filters.py +2 -0
  67. nautobot/core/tests/integration/test_home.py +1 -0
  68. nautobot/core/tests/integration/test_navbar.py +1 -0
  69. nautobot/core/tests/integration/test_view_authentication.py +0 -1
  70. nautobot/core/tests/runner.py +1 -1
  71. nautobot/core/tests/test_api.py +1 -98
  72. nautobot/core/tests/test_csv.py +3 -25
  73. nautobot/core/tests/test_forms.py +0 -1
  74. nautobot/core/tests/test_jobs.py +1 -303
  75. nautobot/core/tests/test_settings_schema.py +0 -7
  76. nautobot/core/tests/test_tables.py +0 -100
  77. nautobot/core/tests/test_utils.py +1 -63
  78. nautobot/core/tests/test_views.py +3 -30
  79. nautobot/core/ui/nav.py +0 -1
  80. nautobot/core/ui/object_detail.py +1 -15
  81. nautobot/core/urls.py +0 -11
  82. nautobot/core/utils/lookup.py +8 -11
  83. nautobot/core/utils/requests.py +9 -24
  84. nautobot/core/views/__init__.py +0 -42
  85. nautobot/core/views/generic.py +176 -78
  86. nautobot/core/views/mixins.py +34 -94
  87. nautobot/core/views/renderers.py +6 -6
  88. nautobot/dcim/api/serializers.py +62 -54
  89. nautobot/dcim/api/views.py +113 -47
  90. nautobot/dcim/filters/__init__.py +2 -31
  91. nautobot/dcim/forms.py +17 -36
  92. nautobot/dcim/graphql/types.py +2 -2
  93. nautobot/dcim/models/__init__.py +1 -1
  94. nautobot/dcim/models/device_component_templates.py +2 -2
  95. nautobot/dcim/models/device_components.py +20 -22
  96. nautobot/dcim/models/devices.py +1 -10
  97. nautobot/dcim/models/locations.py +3 -3
  98. nautobot/dcim/models/power.py +5 -6
  99. nautobot/dcim/models/racks.py +4 -4
  100. nautobot/dcim/tables/__init__.py +3 -3
  101. nautobot/dcim/tables/devices.py +5 -7
  102. nautobot/dcim/tables/devicetypes.py +2 -2
  103. nautobot/dcim/tables/racks.py +1 -1
  104. nautobot/dcim/templates/dcim/controller_create.html +7 -1
  105. nautobot/dcim/templates/dcim/controller_retrieve.html +9 -1
  106. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +0 -2
  107. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +0 -5
  108. nautobot/dcim/templates/dcim/device.html +9 -1
  109. nautobot/dcim/templates/dcim/device_edit.html +37 -36
  110. nautobot/dcim/templates/dcim/location.html +9 -1
  111. nautobot/dcim/templates/dcim/location_edit.html +7 -1
  112. nautobot/dcim/templates/dcim/rack.html +9 -1
  113. nautobot/dcim/templates/dcim/rack_edit.html +7 -1
  114. nautobot/dcim/templates/dcim/rackreservation.html +9 -1
  115. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +9 -1
  116. nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +7 -1
  117. nautobot/dcim/tests/test_api.py +3 -16
  118. nautobot/dcim/tests/test_filters.py +0 -33
  119. nautobot/dcim/tests/test_forms.py +2 -51
  120. nautobot/dcim/tests/test_graphql.py +0 -52
  121. nautobot/dcim/tests/test_models.py +5 -34
  122. nautobot/dcim/tests/test_views.py +83 -21
  123. nautobot/dcim/views.py +13 -1
  124. nautobot/extras/api/customfields.py +2 -2
  125. nautobot/extras/api/serializers.py +85 -90
  126. nautobot/extras/api/views.py +27 -22
  127. nautobot/extras/constants.py +0 -2
  128. nautobot/extras/filters/__init__.py +6 -8
  129. nautobot/extras/forms/base.py +2 -2
  130. nautobot/extras/forms/forms.py +31 -139
  131. nautobot/extras/forms/mixins.py +5 -13
  132. nautobot/extras/group_sync.py +3 -3
  133. nautobot/extras/health_checks.py +2 -1
  134. nautobot/extras/jobs.py +12 -70
  135. nautobot/extras/managers.py +1 -3
  136. nautobot/extras/migrations/0018_joblog_data_migration.py +9 -7
  137. nautobot/extras/models/__init__.py +1 -1
  138. nautobot/extras/models/contacts.py +1 -1
  139. nautobot/extras/models/customfields.py +11 -12
  140. nautobot/extras/models/groups.py +9 -11
  141. nautobot/extras/models/jobs.py +4 -23
  142. nautobot/extras/models/models.py +2 -2
  143. nautobot/extras/plugins/__init__.py +2 -13
  144. nautobot/extras/plugins/marketplace_manifest.yml +79 -84
  145. nautobot/extras/plugins/tables.py +14 -16
  146. nautobot/extras/plugins/views.py +69 -65
  147. nautobot/extras/registry.py +1 -1
  148. nautobot/extras/secrets/__init__.py +2 -2
  149. nautobot/extras/tables.py +5 -7
  150. nautobot/extras/templates/extras/dynamicgroup.html +9 -1
  151. nautobot/extras/templates/extras/job_detail.html +0 -16
  152. nautobot/extras/templates/extras/job_edit.html +0 -1
  153. nautobot/extras/templates/extras/jobqueue_retrieve.html +9 -1
  154. nautobot/extras/templates/extras/marketplace.html +11 -29
  155. nautobot/extras/templates/extras/plugin_detail.html +15 -32
  156. nautobot/extras/templates/extras/plugins_tiles.html +10 -21
  157. nautobot/extras/test_jobs/api_test_job.py +1 -1
  158. nautobot/extras/test_jobs/atomic_transaction.py +2 -2
  159. nautobot/extras/test_jobs/dry_run.py +1 -1
  160. nautobot/extras/test_jobs/fail.py +5 -5
  161. nautobot/extras/test_jobs/file_output.py +1 -1
  162. nautobot/extras/test_jobs/file_upload_fail.py +1 -1
  163. nautobot/extras/test_jobs/file_upload_pass.py +1 -1
  164. nautobot/extras/test_jobs/ipaddress_vars.py +1 -3
  165. nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
  166. nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
  167. nautobot/extras/test_jobs/log_redaction.py +1 -1
  168. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
  169. nautobot/extras/test_jobs/modify_db.py +1 -1
  170. nautobot/extras/test_jobs/object_var_optional.py +1 -1
  171. nautobot/extras/test_jobs/object_var_required.py +1 -1
  172. nautobot/extras/test_jobs/object_vars.py +1 -1
  173. nautobot/extras/test_jobs/pass.py +3 -3
  174. nautobot/extras/test_jobs/profiling.py +1 -1
  175. nautobot/extras/test_jobs/relative_import.py +3 -3
  176. nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
  177. nautobot/extras/test_jobs/task_queues.py +1 -1
  178. nautobot/extras/tests/integration/test_plugin_banner.py +2 -0
  179. nautobot/extras/tests/test_api.py +13 -13
  180. nautobot/extras/tests/test_customfields.py +1 -1
  181. nautobot/extras/tests/test_datasources.py +1 -2
  182. nautobot/extras/tests/test_dynamicgroups.py +1 -1
  183. nautobot/extras/tests/test_filters.py +6 -6
  184. nautobot/extras/tests/test_forms.py +1 -20
  185. nautobot/extras/tests/test_jobs.py +19 -160
  186. nautobot/extras/tests/test_models.py +10 -10
  187. nautobot/extras/tests/test_plugins.py +9 -62
  188. nautobot/extras/tests/test_relationships.py +9 -120
  189. nautobot/extras/tests/test_views.py +191 -52
  190. nautobot/extras/utils.py +2 -3
  191. nautobot/extras/views.py +98 -30
  192. nautobot/ipam/api/fields.py +3 -3
  193. nautobot/ipam/api/serializers.py +33 -41
  194. nautobot/ipam/api/views.py +117 -68
  195. nautobot/ipam/factory.py +1 -1
  196. nautobot/ipam/filters.py +2 -3
  197. nautobot/ipam/lookups.py +62 -101
  198. nautobot/ipam/models.py +16 -66
  199. nautobot/ipam/querysets.py +2 -2
  200. nautobot/ipam/tables.py +7 -23
  201. nautobot/ipam/templates/ipam/ipaddress.html +9 -1
  202. nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +7 -1
  203. nautobot/ipam/templates/ipam/ipaddress_edit.html +7 -1
  204. nautobot/ipam/templates/ipam/prefix.html +9 -1
  205. nautobot/ipam/templates/ipam/prefix_edit.html +7 -1
  206. nautobot/ipam/templates/ipam/vlan.html +9 -1
  207. nautobot/ipam/templates/ipam/vlan_edit.html +7 -1
  208. nautobot/ipam/templates/ipam/vrf_edit.html +7 -1
  209. nautobot/ipam/tests/test_api.py +3 -416
  210. nautobot/ipam/tests/test_forms.py +47 -49
  211. nautobot/ipam/tests/test_migrations.py +30 -30
  212. nautobot/ipam/tests/test_models.py +34 -95
  213. nautobot/ipam/tests/test_querysets.py +1 -63
  214. nautobot/ipam/tests/test_views.py +0 -3
  215. nautobot/ipam/utils/__init__.py +6 -36
  216. nautobot/ipam/views.py +87 -61
  217. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  218. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  219. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +2 -40
  220. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  221. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  222. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  223. nautobot/project-static/docs/404.html +4 -46
  224. nautobot/project-static/docs/apps/index.html +4 -46
  225. nautobot/project-static/docs/apps/nautobot-apps.html +6 -47
  226. nautobot/project-static/docs/assets/_mkdocstrings.css +1 -25
  227. nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js → bundle.83f73b43.min.js} +2 -2
  228. nautobot/project-static/docs/assets/javascripts/{bundle.88dd0f4e.min.js.map → bundle.83f73b43.min.js.map} +2 -2
  229. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +10 -62
  230. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +7 -59
  231. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +122 -374
  232. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +18 -90
  233. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +21 -95
  234. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +6 -53
  235. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +5 -52
  236. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +17 -79
  237. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +28 -102
  238. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +21 -108
  239. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +38 -131
  240. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +65 -239
  241. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +165 -581
  242. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +36 -109
  243. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +167 -453
  244. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +211 -493
  245. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +8 -60
  246. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +15 -71
  247. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +55 -407
  248. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +205 -585
  249. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +412 -858
  250. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +7 -59
  251. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +186 -448
  252. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +147 -365
  253. nautobot/project-static/docs/development/apps/api/configuration-view.html +4 -46
  254. nautobot/project-static/docs/development/apps/api/database-backend-config.html +4 -46
  255. nautobot/project-static/docs/development/apps/api/models/django-admin.html +4 -46
  256. nautobot/project-static/docs/development/apps/api/models/global-search.html +4 -46
  257. nautobot/project-static/docs/development/apps/api/models/graphql.html +4 -46
  258. nautobot/project-static/docs/development/apps/api/models/index.html +4 -46
  259. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +4 -46
  260. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +4 -46
  261. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +4 -46
  262. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +4 -46
  263. nautobot/project-static/docs/development/apps/api/platform-features/index.html +4 -46
  264. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +4 -46
  265. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +4 -46
  266. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +4 -46
  267. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +4 -46
  268. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +7 -68
  269. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +4 -46
  270. nautobot/project-static/docs/development/apps/api/prometheus.html +4 -46
  271. nautobot/project-static/docs/development/apps/api/setup.html +4 -46
  272. nautobot/project-static/docs/development/apps/api/testing.html +4 -46
  273. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +4 -46
  274. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +4 -46
  275. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +4 -46
  276. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +4 -46
  277. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +4 -46
  278. nautobot/project-static/docs/development/apps/api/views/base-template.html +4 -46
  279. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +4 -46
  280. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +4 -46
  281. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +4 -46
  282. nautobot/project-static/docs/development/apps/api/views/index.html +4 -46
  283. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +4 -46
  284. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +4 -46
  285. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +4 -46
  286. nautobot/project-static/docs/development/apps/api/views/notes.html +4 -46
  287. nautobot/project-static/docs/development/apps/api/views/rest-api.html +6 -52
  288. nautobot/project-static/docs/development/apps/api/views/urls.html +4 -46
  289. nautobot/project-static/docs/development/apps/index.html +4 -46
  290. nautobot/project-static/docs/development/apps/migration/code-updates.html +4 -46
  291. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +4 -46
  292. nautobot/project-static/docs/development/apps/migration/from-v1.html +4 -46
  293. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +4 -46
  294. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +4 -46
  295. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +4 -46
  296. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +4 -46
  297. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +8 -50
  298. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +4 -46
  299. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +14 -211
  300. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +4 -46
  301. nautobot/project-static/docs/development/apps/porting-from-netbox.html +4 -46
  302. nautobot/project-static/docs/development/core/application-registry.html +4 -46
  303. nautobot/project-static/docs/development/core/best-practices.html +4 -46
  304. nautobot/project-static/docs/development/core/bootstrap-ui.html +4 -46
  305. nautobot/project-static/docs/development/core/caching.html +4 -46
  306. nautobot/project-static/docs/development/core/controllers.html +4 -46
  307. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +74 -73
  308. nautobot/project-static/docs/development/core/generic-views.html +4 -46
  309. nautobot/project-static/docs/development/core/getting-started.html +224 -249
  310. nautobot/project-static/docs/development/core/homepage.html +7 -49
  311. nautobot/project-static/docs/development/core/index.html +4 -46
  312. nautobot/project-static/docs/development/core/{minikube-dev-environment-for-k8s-jobs.html → local-k8s.html} +168 -469
  313. nautobot/project-static/docs/development/core/model-checklist.html +12 -56
  314. nautobot/project-static/docs/development/core/model-features.html +4 -46
  315. nautobot/project-static/docs/development/core/natural-keys.html +4 -46
  316. nautobot/project-static/docs/development/core/navigation-menu.html +4 -46
  317. nautobot/project-static/docs/development/core/release-checklist.html +7 -49
  318. nautobot/project-static/docs/development/core/role-internals.html +4 -46
  319. nautobot/project-static/docs/development/core/settings.html +4 -46
  320. nautobot/project-static/docs/development/core/style-guide.html +7 -49
  321. nautobot/project-static/docs/development/core/templates.html +4 -46
  322. nautobot/project-static/docs/development/core/testing.html +4 -46
  323. nautobot/project-static/docs/development/core/ui-component-framework.html +273 -369
  324. nautobot/project-static/docs/development/core/user-preferences.html +4 -46
  325. nautobot/project-static/docs/development/index.html +4 -46
  326. nautobot/project-static/docs/development/jobs/index.html +122 -216
  327. nautobot/project-static/docs/development/jobs/migration/from-v1.html +4 -46
  328. nautobot/project-static/docs/index.html +23 -54
  329. nautobot/project-static/docs/objects.inv +0 -0
  330. nautobot/project-static/docs/overview/application_stack.html +7 -47
  331. nautobot/project-static/docs/overview/design_philosophy.html +4 -46
  332. nautobot/project-static/docs/release-notes/index.html +12 -52
  333. nautobot/project-static/docs/release-notes/version-1.0.html +193 -234
  334. nautobot/project-static/docs/release-notes/version-1.1.html +190 -231
  335. nautobot/project-static/docs/release-notes/version-1.2.html +265 -306
  336. nautobot/project-static/docs/release-notes/version-1.3.html +291 -332
  337. nautobot/project-static/docs/release-notes/version-1.4.html +377 -417
  338. nautobot/project-static/docs/release-notes/version-1.5.html +566 -605
  339. nautobot/project-static/docs/release-notes/version-1.6.html +447 -904
  340. nautobot/project-static/docs/release-notes/version-2.0.html +489 -528
  341. nautobot/project-static/docs/release-notes/version-2.1.html +324 -363
  342. nautobot/project-static/docs/release-notes/version-2.2.html +317 -356
  343. nautobot/project-static/docs/release-notes/version-2.3.html +352 -997
  344. nautobot/project-static/docs/release-notes/version-2.4.html +101 -417
  345. nautobot/project-static/docs/requirements.txt +2 -2
  346. nautobot/project-static/docs/search/search_index.json +1 -1
  347. nautobot/project-static/docs/sitemap.xml +287 -295
  348. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  349. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +4 -46
  350. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +4 -46
  351. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +6 -48
  352. nautobot/project-static/docs/user-guide/administration/configuration/index.html +4 -46
  353. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +4 -46
  354. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +8 -110
  355. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +4 -46
  356. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +4 -46
  357. nautobot/project-static/docs/user-guide/administration/guides/docker.html +4 -46
  358. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +4 -46
  359. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +4 -46
  360. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +4 -46
  361. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +4 -46
  362. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +4 -46
  363. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +6 -48
  364. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +4 -46
  365. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +4 -46
  366. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +4 -46
  367. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +8 -66
  368. nautobot/project-static/docs/user-guide/administration/installation/index.html +4 -46
  369. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +5 -47
  370. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +4 -46
  371. nautobot/project-static/docs/user-guide/administration/installation/services.html +4 -46
  372. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +4 -46
  373. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +4 -46
  374. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +4 -46
  375. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +4 -46
  376. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +4 -46
  377. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +4 -46
  378. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +4 -46
  379. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +4 -46
  380. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +4 -46
  381. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +8 -49
  382. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +4 -46
  383. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +4 -46
  384. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +4 -46
  385. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +4 -46
  386. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +4 -46
  387. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +4 -46
  388. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +4 -46
  389. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +4 -46
  390. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +4 -46
  391. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +4 -46
  392. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +4 -46
  393. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +4 -46
  394. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +4 -46
  395. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +4 -46
  396. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +4 -46
  397. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +4 -46
  398. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +4 -46
  399. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +4 -46
  400. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +4 -46
  401. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +4 -46
  402. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +4 -46
  403. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +4 -46
  404. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +4 -46
  405. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +4 -46
  406. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +4 -46
  407. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +4 -46
  408. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +4 -46
  409. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +4 -46
  410. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +4 -46
  411. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +4 -46
  412. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +4 -46
  413. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +4 -46
  414. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +4 -46
  415. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +4 -46
  416. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +4 -46
  417. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +4 -46
  418. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +4 -46
  419. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +4 -46
  420. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +4 -46
  421. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +4 -46
  422. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +4 -46
  423. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +4 -46
  424. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +4 -46
  425. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +4 -46
  426. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +4 -46
  427. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +4 -46
  428. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +4 -46
  429. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +4 -46
  430. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +4 -46
  431. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +4 -46
  432. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +4 -46
  433. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +4 -46
  434. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +4 -46
  435. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +4 -46
  436. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +4 -46
  437. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +4 -46
  438. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +4 -46
  439. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +12 -50
  440. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +4 -46
  441. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +4 -46
  442. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +4 -46
  443. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +4 -46
  444. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +4 -46
  445. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +4 -46
  446. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +4 -46
  447. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +4 -46
  448. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +4 -46
  449. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +4 -46
  450. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +4 -46
  451. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +4 -46
  452. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +7 -49
  453. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +4 -46
  454. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +4 -46
  455. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +4 -46
  456. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +4 -46
  457. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +4 -46
  458. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +4 -46
  459. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +4 -46
  460. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +4 -46
  461. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +4 -46
  462. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +4 -46
  463. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +4 -46
  464. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +4 -46
  465. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +4 -46
  466. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +4 -46
  467. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +4 -46
  468. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +4 -46
  469. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +4 -46
  470. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +4 -46
  471. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +4 -46
  472. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +4 -46
  473. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +4 -46
  474. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +4 -46
  475. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +7 -51
  476. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +4 -46
  477. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +4 -46
  478. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +4 -46
  479. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +7 -49
  480. nautobot/project-static/docs/user-guide/index.html +4 -46
  481. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +4 -46
  482. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +8 -50
  483. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +4 -46
  484. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +4 -46
  485. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +4 -46
  486. nautobot/project-static/docs/user-guide/platform-functionality/events.html +4 -46
  487. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +4 -46
  488. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +4 -46
  489. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +4 -46
  490. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +4 -46
  491. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +4 -46
  492. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +4 -46
  493. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +7 -50
  494. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +4 -46
  495. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +7 -49
  496. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +4 -46
  497. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +4 -46
  498. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +4 -46
  499. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +4 -46
  500. nautobot/project-static/docs/user-guide/platform-functionality/note.html +4 -46
  501. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +4 -46
  502. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +5 -47
  503. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +4 -46
  504. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +4 -46
  505. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +25 -94
  506. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +5 -74
  507. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +4 -46
  508. nautobot/project-static/docs/user-guide/platform-functionality/role.html +4 -46
  509. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +4 -46
  510. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +4 -46
  511. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +4 -46
  512. nautobot/project-static/docs/user-guide/platform-functionality/status.html +4 -46
  513. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +4 -46
  514. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +4 -46
  515. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +4 -46
  516. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +4 -46
  517. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +4 -46
  518. nautobot/project-static/js/forms.js +1 -1
  519. nautobot/tenancy/api/views.py +13 -9
  520. nautobot/tenancy/views.py +2 -4
  521. nautobot/users/admin.py +1 -1
  522. nautobot/users/api/serializers.py +4 -5
  523. nautobot/users/api/views.py +3 -3
  524. nautobot/virtualization/api/serializers.py +4 -4
  525. nautobot/virtualization/api/views.py +24 -5
  526. nautobot/virtualization/filters.py +3 -20
  527. nautobot/virtualization/models.py +1 -1
  528. nautobot/virtualization/tables.py +2 -2
  529. nautobot/virtualization/templates/virtualization/cluster_edit.html +7 -1
  530. nautobot/virtualization/templates/virtualization/virtualmachine.html +9 -1
  531. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +8 -2
  532. nautobot/virtualization/tests/test_filters.py +0 -17
  533. nautobot/wireless/filters.py +2 -2
  534. nautobot/wireless/forms.py +1 -1
  535. nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +9 -1
  536. nautobot/wireless/tests/test_filters.py +1 -29
  537. nautobot/wireless/views.py +10 -0
  538. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/METADATA +6 -6
  539. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/RECORD +543 -591
  540. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/WHEEL +1 -1
  541. nautobot/core/api/constants.py +0 -11
  542. nautobot/core/jobs/bulk_actions.py +0 -248
  543. nautobot/core/templates/about.html +0 -67
  544. nautobot/core/templates/inc/tenancy_form_panel.html +0 -9
  545. nautobot/core/templates/inc/tenant_table_row.html +0 -11
  546. nautobot/core/utils/querysets.py +0 -64
  547. nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +0 -25
  548. nautobot/dcim/tests/integration/test_controller.py +0 -62
  549. nautobot/dcim/tests/integration/test_controller_managed_device_group.py +0 -71
  550. nautobot/dcim/tests/test_jobs.py +0 -118
  551. nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +0 -22
  552. nautobot/extras/migrations/0121_alter_team_contacts.py +0 -17
  553. nautobot/extras/test_jobs/singleton.py +0 -16
  554. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
  555. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
  556. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
  557. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
  558. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
  559. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
  560. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
  561. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
  562. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
  563. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
  564. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
  565. nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
  566. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
  567. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
  568. nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
  569. nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
  570. nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
  571. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
  572. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
  573. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
  574. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
  575. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
  576. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
  577. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
  578. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
  579. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
  580. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
  581. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
  582. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
  583. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
  584. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
  585. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
  586. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +0 -9444
  587. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +0 -9722
  588. nautobot/wireless/tests/integration/__init__.py +0 -0
  589. nautobot/wireless/tests/integration/test_radio_profile.py +0 -42
  590. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/LICENSE.txt +0 -0
  591. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/NOTICE +0 -0
  592. {nautobot-2.4.0.dist-info → nautobot-2.4.0b1.dist-info}/entry_points.txt +0 -0
@@ -63,12 +63,12 @@ __all__ = (
63
63
  "Device",
64
64
  "DeviceBay",
65
65
  "DeviceBayTemplate",
66
- "DeviceFamily",
67
66
  "DeviceRedundancyGroup",
68
67
  "DeviceType",
69
68
  "DeviceTypeToSoftwareImageFile",
70
69
  "FrontPort",
71
70
  "FrontPortTemplate",
71
+ "DeviceFamily",
72
72
  "Interface",
73
73
  "InterfaceRedundancyGroup",
74
74
  "InterfaceRedundancyGroupAssociation",
@@ -100,7 +100,7 @@ class ComponentTemplateModel(
100
100
  def get_absolute_url(self, api=False):
101
101
  # TODO: in the new UI, this should be able to link directly to the object, instead of the device-type.
102
102
  if not api:
103
- return self.device_type.get_absolute_url(api=api) # pylint: disable=no-member
103
+ return self.device_type.get_absolute_url(api=api)
104
104
  return super().get_absolute_url(api=api)
105
105
 
106
106
  def instantiate_model(self, model, device, **kwargs):
@@ -460,7 +460,7 @@ class DeviceBayTemplate(ComponentTemplateModel):
460
460
  return self.instantiate_model(model=DeviceBay, device=device)
461
461
 
462
462
  def clean(self):
463
- if self.device_type and self.device_type.subdevice_role != SubdeviceRoleChoices.ROLE_PARENT: # pylint: disable=no-member
463
+ if self.device_type and self.device_type.subdevice_role != SubdeviceRoleChoices.ROLE_PARENT:
464
464
  raise ValidationError(
465
465
  f'Subdevice role of device type ({self.device_type}) must be set to "parent" to allow device bays.'
466
466
  )
@@ -138,7 +138,7 @@ class ModularComponentModel(ComponentModel):
138
138
  @property
139
139
  def parent(self):
140
140
  """Device that this component belongs to, walking up module inheritance if necessary."""
141
- return self.module.device if self.module else self.device # pylint: disable=no-member
141
+ return self.module.device if self.module else self.device
142
142
 
143
143
  def render_name_template(self, save=False):
144
144
  """
@@ -161,9 +161,9 @@ class ModularComponentModel(ComponentModel):
161
161
 
162
162
  The deeply nested interface would be named "A{module.parent}" after calling this method.
163
163
  """
164
- if self.module and self.module.parent_module_bay and "{module" in self.name: # pylint: disable=no-member
164
+ if self.module and self.module.parent_module_bay and "{module" in self.name:
165
165
  name = ""
166
- module_bay = self.module.parent_module_bay # pylint: disable=no-member
166
+ module_bay = self.module.parent_module_bay
167
167
  positions = []
168
168
  while module_bay is not None:
169
169
  position = getattr(module_bay, "position", None)
@@ -291,11 +291,11 @@ class PathEndpoint(models.Model):
291
291
  return []
292
292
 
293
293
  # Construct the complete path
294
- path = [self, *self._path.get_path()] # pylint: disable=no-member
294
+ path = [self, *self._path.get_path()]
295
295
  while (len(path) + 1) % 3:
296
296
  # Pad to ensure we have complete three-tuples (e.g. for paths that end at a RearPort)
297
297
  path.append(None)
298
- path.append(self._path.destination) # pylint: disable=no-member
298
+ path.append(self._path.destination)
299
299
 
300
300
  # Return the path as a list of three-tuples (A termination, cable, B termination)
301
301
  return list(zip(*[iter(path)] * 3))
@@ -555,7 +555,7 @@ class BaseInterface(RelationshipModel):
555
555
 
556
556
  def clean(self):
557
557
  # Remove untagged VLAN assignment for non-802.1Q interfaces
558
- if not self.mode and self.untagged_vlan is not None: # pylint: disable=no-member # Intf/VMIntf both have untagged_vlan
558
+ if not self.mode and self.untagged_vlan is not None:
559
559
  raise ValidationError({"untagged_vlan": "Mode must be set when specifying untagged_vlan"})
560
560
 
561
561
  def save(self, *args, **kwargs):
@@ -569,8 +569,8 @@ class BaseInterface(RelationshipModel):
569
569
  self.status = status
570
570
 
571
571
  # Only "tagged" interfaces may have tagged VLANs assigned. ("tagged all" implies all VLANs are assigned.)
572
- if self.present_in_database and self.mode != InterfaceModeChoices.MODE_TAGGED: # pylint: disable=no-member
573
- self.tagged_vlans.clear() # pylint: disable=no-member # Intf/VMIntf both have tagged_vlans
572
+ if self.present_in_database and self.mode != InterfaceModeChoices.MODE_TAGGED:
573
+ self.tagged_vlans.clear()
574
574
 
575
575
  return super().save(*args, **kwargs)
576
576
 
@@ -710,19 +710,18 @@ class Interface(ModularComponentModel, CableTermination, PathEndpoint, BaseInter
710
710
  )
711
711
 
712
712
  # An interface's parent must belong to the same device or virtual chassis
713
- if self.parent and self.parent_interface.parent != self.parent: # pylint: disable=no-member
713
+ if self.parent and self.parent_interface.parent != self.parent:
714
714
  if getattr(self.parent, "virtual_chassis", None) is None:
715
715
  raise ValidationError(
716
- { # pylint: disable=no-member # false positive on parent_interface.parent
717
- "parent_interface": f"The selected parent interface ({self.parent_interface}) belongs "
718
- f"to a different device ({self.parent_interface.parent})."
716
+ {
717
+ "parent_interface": f"The selected parent interface ({self.parent_interface}) belongs to a different device "
718
+ f"({self.parent_interface.parent})."
719
719
  }
720
720
  )
721
- elif self.parent_interface.parent.virtual_chassis != self.parent.virtual_chassis: # pylint: disable=no-member
721
+ elif self.parent_interface.parent.virtual_chassis != self.parent.virtual_chassis:
722
722
  raise ValidationError(
723
- { # pylint: disable=no-member # false positive on parent_interface.parent
724
- "parent_interface": f"The selected parent interface ({self.parent_interface}) belongs "
725
- f"to {self.parent_interface.parent}, which "
723
+ {
724
+ "parent_interface": f"The selected parent interface ({self.parent_interface}) belongs to {self.parent_interface.parent}, which "
726
725
  f"is not part of virtual chassis {self.parent.virtual_chassis}."
727
726
  }
728
727
  )
@@ -755,22 +754,21 @@ class Interface(ModularComponentModel, CableTermination, PathEndpoint, BaseInter
755
754
  raise ValidationError({"bridge": "An interface cannot be bridged to itself."})
756
755
 
757
756
  # A bridged interface belong to the same device or virtual chassis
758
- if self.parent and self.bridge.parent != self.parent: # pylint: disable=no-member
757
+ if self.parent and self.bridge.parent != self.parent:
759
758
  if getattr(self.parent, "virtual_chassis", None) is None:
760
759
  raise ValidationError(
761
760
  {
762
761
  "bridge": (
763
- # pylint: disable=no-member # false positive on bridge.parent
764
762
  f"The selected bridge interface ({self.bridge}) belongs to a different device "
765
763
  f"({self.bridge.parent})."
766
764
  )
767
765
  }
768
766
  )
769
- elif self.bridge.parent.virtual_chassis_id != self.parent.virtual_chassis_id: # pylint: disable=no-member
767
+ elif self.bridge.parent.virtual_chassis_id != self.parent.virtual_chassis_id:
770
768
  raise ValidationError(
771
769
  {
772
770
  "bridge": (
773
- f"The selected bridge interface ({self.bridge}) belongs to {self.bridge.parent}, which " # pylint: disable=no-member
771
+ f"The selected bridge interface ({self.bridge}) belongs to {self.bridge.parent}, which "
774
772
  f"is not part of virtual chassis {self.parent.virtual_chassis}."
775
773
  )
776
774
  }
@@ -1086,8 +1084,8 @@ class DeviceBay(ComponentModel):
1086
1084
  super().clean()
1087
1085
 
1088
1086
  # Validate that the parent Device can have DeviceBays
1089
- if not self.device.device_type.is_parent_device: # pylint: disable=no-member
1090
- raise ValidationError(f"This type of device ({self.device.device_type}) does not support device bays.") # pylint: disable=no-member
1087
+ if not self.device.device_type.is_parent_device:
1088
+ raise ValidationError(f"This type of device ({self.device.device_type}) does not support device bays.")
1091
1089
 
1092
1090
  # Cannot install a device into itself, obviously
1093
1091
  if self.device == self.installed_device:
@@ -48,7 +48,6 @@ __all__ = (
48
48
  "Controller",
49
49
  "ControllerManagedDeviceGroup",
50
50
  "Device",
51
- "DeviceFamily",
52
51
  "DeviceRedundancyGroup",
53
52
  "DeviceType",
54
53
  "InterfaceVDCAssignment",
@@ -824,7 +823,6 @@ class Device(PrimaryModel, ConfigContextModel):
824
823
 
825
824
  # If any software image file is specified, validate that
826
825
  # each of the software image files belongs to the device's device type or is a default image
827
- # TODO: this is incorrect as we cannot validate a ManyToMany during clean() - nautobot/nautobot#6344
828
826
  for image_file in self.software_image_files.all():
829
827
  if not image_file.default_image and self.device_type not in image_file.device_types.all():
830
828
  raise ValidationError(
@@ -1483,13 +1481,6 @@ class ControllerManagedDeviceGroup(TreeModel, PrimaryModel):
1483
1481
  null=True,
1484
1482
  help_text="List of capabilities supported by the controller device group, these capabilities are used to enhance views in Nautobot.",
1485
1483
  )
1486
- tenant = models.ForeignKey(
1487
- to="tenancy.Tenant",
1488
- on_delete=models.PROTECT,
1489
- related_name="controller_managed_device_groups",
1490
- blank=True,
1491
- null=True,
1492
- )
1493
1484
 
1494
1485
  class Meta:
1495
1486
  ordering = ("weight",)
@@ -1509,7 +1500,7 @@ class ControllerManagedDeviceGroup(TreeModel, PrimaryModel):
1509
1500
  if self.controller == self._original_controller and self.parent == self._original_parent:
1510
1501
  return
1511
1502
 
1512
- if self.parent and self.controller and self.controller != self.parent.controller: # pylint: disable=no-member
1503
+ if self.parent and self.controller and self.controller != self.parent.controller:
1513
1504
  raise ValidationError(
1514
1505
  {"controller": "Controller device group must have the same controller as the parent group."}
1515
1506
  )
@@ -283,7 +283,7 @@ class Location(TreeModel, PrimaryModel):
283
283
  # We shouldn't have a parent, *unless* our own location type is permitted to be nested.
284
284
  if self.parent is not None:
285
285
  if self.location_type.nestable:
286
- if self.parent.location_type != self.location_type: # pylint: disable=no-member
286
+ if self.parent.location_type != self.location_type:
287
287
  raise ValidationError(
288
288
  {
289
289
  "parent": f"A Location of type {self.location_type} may only have "
@@ -304,7 +304,7 @@ class Location(TreeModel, PrimaryModel):
304
304
 
305
305
  # Is the parent location of a correct type?
306
306
  if self.location_type.nestable:
307
- if self.parent.location_type not in (self.location_type, self.location_type.parent): # pylint: disable=no-member
307
+ if self.parent.location_type not in (self.location_type, self.location_type.parent):
308
308
  raise ValidationError(
309
309
  {
310
310
  "parent": f"A Location of type {self.location_type} can only have a Location "
@@ -312,7 +312,7 @@ class Location(TreeModel, PrimaryModel):
312
312
  }
313
313
  )
314
314
  else:
315
- if self.parent.location_type != self.location_type.parent: # pylint: disable=no-member
315
+ if self.parent.location_type != self.location_type.parent:
316
316
  raise ValidationError(
317
317
  {
318
318
  "parent": f"A Location of type {self.location_type} can only have a Location "
@@ -73,11 +73,11 @@ class PowerPanel(PrimaryModel):
73
73
  if self.rack_group:
74
74
  if (
75
75
  self.location is not None
76
- and self.rack_group.location is not None # pylint: disable=no-member
77
- and self.rack_group.location not in self.location.ancestors(include_self=True) # pylint: disable=no-member
76
+ and self.rack_group.location is not None
77
+ and self.rack_group.location not in self.location.ancestors(include_self=True)
78
78
  ):
79
79
  raise ValidationError(
80
- { # pylint: disable=no-member # false positive on rack_group.location
80
+ {
81
81
  "rack_group": f'Rack group "{self.rack_group}" belongs to a location '
82
82
  f'("{self.rack_group.location}") that does not contain "{self.location}".'
83
83
  }
@@ -151,10 +151,9 @@ class PowerFeed(PrimaryModel, PathEndpoint, CableTermination):
151
151
  super().clean()
152
152
 
153
153
  # Rack must belong to same Location as PowerPanel
154
- if self.rack and self.rack.location != self.power_panel.location: # pylint: disable=no-member
154
+ if self.rack and self.rack.location != self.power_panel.location:
155
155
  raise ValidationError(
156
- f"Rack {self.rack} ({self.rack.location}) and " # pylint: disable=no-member
157
- f"power panel {self.power_panel} ({self.power_panel.location}) are in different locations"
156
+ f"Rack {self.rack} ({self.rack.location}) and power panel {self.power_panel} ({self.power_panel.location}) are in different locations"
158
157
  )
159
158
 
160
159
  # AC voltage cannot be negative
@@ -77,11 +77,11 @@ class RackGroup(TreeModel, OrganizationalModel):
77
77
  # Parent RackGroup (if any) must belong to the same or ancestor Location
78
78
  if (
79
79
  self.parent is not None
80
- and self.parent.location is not None # pylint: disable=no-member
81
- and self.parent.location not in self.location.ancestors(include_self=True) # pylint: disable=no-member
80
+ and self.parent.location is not None
81
+ and self.parent.location not in self.location.ancestors(include_self=True)
82
82
  ):
83
83
  raise ValidationError(
84
- { # pylint: disable=no-member # false positive on parent.location
84
+ {
85
85
  "location": f'Location "{self.location}" is not descended from '
86
86
  f'parent rack group "{self.parent}" location "{self.parent.location}".'
87
87
  }
@@ -296,7 +296,7 @@ class Rack(PrimaryModel):
296
296
  # Determine which devices the user has permission to view
297
297
  permitted_device_ids = []
298
298
  if user is not None:
299
- permitted_device_ids = self.devices.restrict(user, "view").values_list("pk", flat=True) # pylint: disable=no-member
299
+ permitted_device_ids = self.devices.restrict(user, "view").values_list("pk", flat=True)
300
300
 
301
301
  for device in queryset:
302
302
  if expand_devices:
@@ -145,7 +145,7 @@ class ConsoleConnectionTable(BaseTable):
145
145
  linkify=True,
146
146
  verbose_name="Port",
147
147
  )
148
- device = tables.Column(linkify=True, accessor="parent", orderable=False)
148
+ device = tables.Column(linkify=True, accessor="parent")
149
149
  name = tables.Column(linkify=True, verbose_name="Console Port")
150
150
  reachable = BooleanColumn(accessor=Accessor("_path__is_active"), verbose_name="Reachable")
151
151
 
@@ -173,7 +173,7 @@ class PowerConnectionTable(BaseTable):
173
173
  linkify=True,
174
174
  verbose_name="Outlet",
175
175
  )
176
- device = tables.Column(linkify=True, accessor="parent", orderable=False)
176
+ device = tables.Column(linkify=True, accessor="parent")
177
177
  name = tables.Column(linkify=True, verbose_name="Power Port")
178
178
  reachable = BooleanColumn(accessor=Accessor("_path__is_active"), verbose_name="Reachable")
179
179
 
@@ -183,7 +183,7 @@ class PowerConnectionTable(BaseTable):
183
183
 
184
184
 
185
185
  class InterfaceConnectionTable(BaseTable):
186
- device_a = tables.Column(accessor=Accessor("parent"), linkify=True, verbose_name="Device A", orderable=False)
186
+ device_a = tables.Column(accessor=Accessor("parent"), linkify=True, verbose_name="Device A")
187
187
  interface_a = tables.Column(accessor=Accessor("name"), linkify=True, verbose_name="Interface A")
188
188
  device_b = tables.Column(
189
189
  accessor=Accessor("_path__destination__parent"),
@@ -64,8 +64,8 @@ from .template_code import (
64
64
  __all__ = (
65
65
  "ConsolePortTable",
66
66
  "ConsoleServerPortTable",
67
- "ControllerManagedDeviceGroupTable",
68
67
  "ControllerTable",
68
+ "ControllerManagedDeviceGroupTable",
69
69
  "DeviceBayTable",
70
70
  "DeviceDeviceBayTable",
71
71
  "DeviceImportTable",
@@ -75,19 +75,19 @@ __all__ = (
75
75
  "DeviceModuleConsoleServerPortTable",
76
76
  "DeviceModuleFrontPortTable",
77
77
  "DeviceModuleInterfaceTable",
78
- "DeviceModulePowerOutletTable",
79
78
  "DeviceModulePowerPortTable",
79
+ "DeviceModulePowerOutletTable",
80
80
  "DeviceModuleRearPortTable",
81
81
  "DeviceRedundancyGroupTable",
82
82
  "DeviceTable",
83
83
  "FrontPortTable",
84
- "InterfaceRedundancyGroupAssociationTable",
85
- "InterfaceRedundancyGroupTable",
86
84
  "InterfaceTable",
85
+ "InterfaceRedundancyGroupTable",
86
+ "InterfaceRedundancyGroupAssociationTable",
87
87
  "InventoryItemTable",
88
+ "ModuleTable",
88
89
  "ModuleBayTable",
89
90
  "ModuleModuleBayTable",
90
- "ModuleTable",
91
91
  "PlatformTable",
92
92
  "PowerOutletTable",
93
93
  "PowerPortTable",
@@ -1409,7 +1409,6 @@ class ControllerManagedDeviceGroupTable(BaseTable):
1409
1409
  name = tables.TemplateColumn(template_code=TREE_LINK, attrs={"td": {"class": "text-nowrap"}})
1410
1410
  weight = tables.Column()
1411
1411
  controller = tables.Column(linkify=True)
1412
- tenant = TenantColumn()
1413
1412
  capabilities = tables.Column()
1414
1413
  tags = TagColumn(url_name="dcim:controllermanageddevicegroup_list")
1415
1414
  actions = ButtonsColumn(ControllerManagedDeviceGroup)
@@ -1441,7 +1440,6 @@ class ControllerManagedDeviceGroupTable(BaseTable):
1441
1440
  "wireless_networks_count",
1442
1441
  "controller",
1443
1442
  "weight",
1444
- "tenant",
1445
1443
  "capabilities",
1446
1444
  "tags",
1447
1445
  "actions",
@@ -253,7 +253,7 @@ class PowerOutletTemplateTable(ComponentTemplateTable):
253
253
  "name",
254
254
  "label",
255
255
  "type",
256
- "power_port_template",
256
+ "power_port",
257
257
  "feed_leg",
258
258
  "description",
259
259
  "actions",
@@ -290,7 +290,7 @@ class FrontPortTemplateTable(ComponentTemplateTable):
290
290
  "name",
291
291
  "label",
292
292
  "type",
293
- "rear_port_template",
293
+ "rear_port",
294
294
  "rear_port_position",
295
295
  "description",
296
296
  "actions",
@@ -15,10 +15,10 @@ from nautobot.tenancy.tables import TenantColumn
15
15
  from .template_code import RACKGROUP_ELEVATIONS, TREE_LINK, UTILIZATION_GRAPH
16
16
 
17
17
  __all__ = (
18
+ "RackTable",
18
19
  "RackDetailTable",
19
20
  "RackGroupTable",
20
21
  "RackReservationTable",
21
- "RackTable",
22
22
  )
23
23
 
24
24
 
@@ -34,7 +34,13 @@
34
34
  {% endwith %}
35
35
  </div>
36
36
  </div>
37
- {% include 'inc/tenancy_form_panel.html' %}
37
+ <div class="panel panel-default">
38
+ <div class="panel-heading"><strong>Tenancy</strong></div>
39
+ <div class="panel-body">
40
+ {% render_field form.tenant_group %}
41
+ {% render_field form.tenant %}
42
+ </div>
43
+ </div>
38
44
  {% include 'inc/extras_features_edit_form_fields.html' %}
39
45
  {% endblock form %}
40
46
 
@@ -34,7 +34,15 @@
34
34
  <td>Platform</td>
35
35
  <td>{{ object.platform|hyperlinked_object }}</td>
36
36
  </tr>
37
- {% include 'inc/tenant_table_row.html' %}
37
+ <tr>
38
+ <td>Tenant</td>
39
+ <td>
40
+ {% if object.tenant and object.tenant.tenant_group %}
41
+ {{ object.tenant.tenant_group|hyperlinked_object }} /
42
+ {% endif %}
43
+ {{ object.tenant|hyperlinked_object }}
44
+ </td>
45
+ </tr>
38
46
  <tr>
39
47
  <td>Description</td>
40
48
  <td>{{ object.description|placeholder }}</td>
@@ -15,7 +15,6 @@
15
15
  {% render_field form.capabilities %}
16
16
  {% render_field form.weight %}
17
17
  {% render_field form.radio_profiles %}
18
- {% render_field form.description %}
19
18
  </div>
20
19
  </div>
21
20
  <div class="panel panel-default">
@@ -70,7 +69,6 @@
70
69
  </table>
71
70
  </div>
72
71
  </div>
73
- {% include 'inc/tenancy_form_panel.html' %}
74
72
  {% include 'inc/extras_features_edit_form_fields.html' %}
75
73
  {% endblock form %}
76
74
 
@@ -70,11 +70,6 @@
70
70
  <td>Weight</td>
71
71
  <td>{{ object.weight }}</td>
72
72
  </tr>
73
- {% include 'inc/tenant_table_row.html' %}
74
- <tr>
75
- <td>Description</td>
76
- <td>{{ object.description|placeholder }}</td>
77
- </tr>
78
73
  </table>
79
74
  </div>
80
75
  </div>
@@ -51,7 +51,15 @@
51
51
  {% endif %}
52
52
  </td>
53
53
  </tr>
54
- {% include 'inc/tenant_table_row.html' %}
54
+ <tr>
55
+ <td>Tenant</td>
56
+ <td>
57
+ {% if object.tenant and object.tenant.tenant_group %}
58
+ {{ object.tenant.tenant_group|hyperlinked_object }} /
59
+ {% endif %}
60
+ {{ object.tenant|hyperlinked_object }}
61
+ </td>
62
+ </tr>
55
63
  <tr>
56
64
  <td>Device Family</td>
57
65
  <td>{{ object.device_type.device_family|hyperlinked_object }}</td>
@@ -9,8 +9,34 @@
9
9
  <div class="panel-body">
10
10
  {% render_field form.name %}
11
11
  {% render_field form.role %}
12
- {% render_field form.status %}
13
- {% render_field form.secrets_group %}
12
+ </div>
13
+ </div>
14
+ <div class="panel panel-default">
15
+ <div class="panel-heading"><strong>Hardware</strong></div>
16
+ <div class="panel-body">
17
+ {% render_field form.manufacturer %}
18
+ {% render_field form.device_type %}
19
+ {% render_field form.serial %}
20
+ {% render_field form.asset_tag %}
21
+ </div>
22
+ </div>
23
+ <div class="panel panel-default">
24
+ <div class="panel-heading"><strong>Software</strong></div>
25
+ <div class="panel-body">
26
+ {% render_field form.platform %}
27
+ {% render_field form.software_version %}
28
+ <div class="form-group" id="software_version_image_container" style="display:none">
29
+ <div class="col-md-3"></div>
30
+ <div class="col-md-9">
31
+ <span class="help-block">
32
+ <span id="software_version_image_description"><img src="{% static 'img/ajax-loader.gif' %}"></span>
33
+ <ul id="software_version_image_list">
34
+ <li> Software images for the selected software version will appear here </li>
35
+ </ul>
36
+ </span>
37
+ </div>
38
+ </div>
39
+ {% render_field form.software_image_files %}
14
40
  </div>
15
41
  </div>
16
42
  <div class="panel panel-default">
@@ -47,34 +73,6 @@
47
73
  {% endif %}
48
74
  </div>
49
75
  </div>
50
- <div class="panel panel-default">
51
- <div class="panel-heading"><strong>Hardware</strong></div>
52
- <div class="panel-body">
53
- {% render_field form.manufacturer %}
54
- {% render_field form.device_type %}
55
- {% render_field form.serial %}
56
- {% render_field form.asset_tag %}
57
- </div>
58
- </div>
59
- <div class="panel panel-default">
60
- <div class="panel-heading"><strong>Software</strong></div>
61
- <div class="panel-body">
62
- {% render_field form.platform %}
63
- {% render_field form.software_version %}
64
- <div class="form-group" id="software_version_image_container" style="display:none">
65
- <div class="col-md-3"></div>
66
- <div class="col-md-9">
67
- <span class="help-block">
68
- <span id="software_version_image_description"><img src="{% static 'img/ajax-loader.gif' %}"></span>
69
- <ul id="software_version_image_list">
70
- <li> Software images for the selected software version will appear here </li>
71
- </ul>
72
- </span>
73
- </div>
74
- </div>
75
- {% render_field form.software_image_files %}
76
- </div>
77
- </div>
78
76
  <div class="panel panel-default">
79
77
  <div class="panel-heading"><strong>VRF Assignment</strong></div>
80
78
  <div class="panel-body">
@@ -84,15 +82,12 @@
84
82
  <div class="panel panel-default">
85
83
  <div class="panel-heading"><strong>Management</strong></div>
86
84
  <div class="panel-body">
85
+ {% render_field form.status %}
87
86
  {% if editing %}
88
87
  {% render_field form.primary_ip4 %}
89
88
  {% render_field form.primary_ip6 %}
90
89
  {% endif %}
91
- </div>
92
- </div>
93
- <div class="panel panel-default">
94
- <div class="panel-heading"><strong>Topology</strong></div>
95
- <div class="panel-body">
90
+ {% render_field form.secrets_group %}
96
91
  {% render_field form.device_redundancy_group %}
97
92
  {% render_field form.device_redundancy_group_priority %}
98
93
  {% render_field form.controller_managed_device_group %}
@@ -105,7 +100,13 @@
105
100
  {% render_field form.cluster %}
106
101
  </div>
107
102
  </div>
108
- {% include 'inc/tenancy_form_panel.html' %}
103
+ <div class="panel panel-default">
104
+ <div class="panel-heading"><strong>Tenancy</strong></div>
105
+ <div class="panel-body">
106
+ {% render_field form.tenant_group %}
107
+ {% render_field form.tenant %}
108
+ </div>
109
+ </div>
109
110
  {% include 'inc/extras_features_edit_form_fields.html' %}
110
111
  <div class="panel panel-default">
111
112
  <div class="panel-heading"><strong>Local Config Context Data</strong></div>
@@ -32,7 +32,15 @@
32
32
  {% include 'dcim/inc/location_hierarchy.html' with location=object %}
33
33
  </td>
34
34
  </tr>
35
- {% include 'inc/tenant_table_row.html' %}
35
+ <tr>
36
+ <td>Tenant</td>
37
+ <td>
38
+ {% if object.tenant and object.tenant.tenant_group %}
39
+ {{ object.tenant.tenant_group|hyperlinked_object }} /
40
+ {% endif %}
41
+ {{ object.tenant|hyperlinked_object }}
42
+ </td>
43
+ </tr>
36
44
  <tr>
37
45
  <td>Facility</td>
38
46
  <td>{{ object.facility|placeholder }}</td>
@@ -15,7 +15,13 @@
15
15
  {% render_field form.description %}
16
16
  </div>
17
17
  </div>
18
- {% include 'inc/tenancy_form_panel.html' %}
18
+ <div class="panel panel-default">
19
+ <div class="panel-heading"><strong>Tenancy</strong></div>
20
+ <div class="panel-body">
21
+ {% render_field form.tenant_group %}
22
+ {% render_field form.tenant %}
23
+ </div>
24
+ </div>
19
25
  <div class="panel panel-default">
20
26
  <div class="panel-heading"><strong>Contact Info</strong></div>
21
27
  <div class="panel-body">
@@ -57,7 +57,15 @@
57
57
  <td>Facility ID</td>
58
58
  <td>{{ object.facility_id|placeholder }}</td>
59
59
  </tr>
60
- {% include 'inc/tenant_table_row.html' %}
60
+ <tr>
61
+ <td>Tenant</td>
62
+ <td>
63
+ {% if object.tenant and object.tenant.tenant_group %}
64
+ {{ object.tenant.tenant_group|hyperlinked_object }} /
65
+ {% endif %}
66
+ {{ object.tenant|hyperlinked_object }}
67
+ </td>
68
+ </tr>
61
69
  <tr>
62
70
  <td>Status</td>
63
71
  <td>
@@ -15,7 +15,13 @@
15
15
  {% render_field form.asset_tag %}
16
16
  </div>
17
17
  </div>
18
- {% include 'inc/tenancy_form_panel.html' %}
18
+ <div class="panel panel-default">
19
+ <div class="panel-heading"><strong>Tenancy</strong></div>
20
+ <div class="panel-body">
21
+ {% render_field form.tenant_group %}
22
+ {% render_field form.tenant %}
23
+ </div>
24
+ </div>
19
25
  <div class="panel panel-default">
20
26
  <div class="panel-heading"><strong>Dimensions</strong></div>
21
27
  <div class="panel-body">