nautobot 2.4.0b1__py3-none-any.whl → 2.4.1__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 (601) 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 +1 -0
  18. nautobot/circuits/api/views.py +4 -8
  19. nautobot/circuits/tables.py +2 -1
  20. nautobot/circuits/templates/circuits/circuit_create.html +1 -7
  21. nautobot/circuits/views.py +3 -3
  22. nautobot/cloud/api/views.py +6 -10
  23. nautobot/cloud/models.py +1 -1
  24. nautobot/cloud/views.py +0 -16
  25. nautobot/core/api/constants.py +11 -0
  26. nautobot/core/api/fields.py +5 -5
  27. nautobot/core/api/filter_backends.py +3 -9
  28. nautobot/core/api/schema.py +13 -2
  29. nautobot/core/api/serializers.py +40 -34
  30. nautobot/core/api/views.py +56 -4
  31. nautobot/core/celery/log.py +4 -4
  32. nautobot/core/celery/schedulers.py +2 -2
  33. nautobot/core/choices.py +2 -2
  34. nautobot/core/events/__init__.py +3 -3
  35. nautobot/core/filters.py +67 -35
  36. nautobot/core/forms/__init__.py +19 -19
  37. nautobot/core/forms/fields.py +14 -11
  38. nautobot/core/forms/forms.py +33 -2
  39. nautobot/core/graphql/types.py +1 -1
  40. nautobot/core/jobs/__init__.py +28 -7
  41. nautobot/core/jobs/bulk_actions.py +285 -0
  42. nautobot/core/jobs/cleanup.py +48 -12
  43. nautobot/core/jobs/groups.py +1 -1
  44. nautobot/core/management/commands/validate_models.py +1 -1
  45. nautobot/core/models/__init__.py +3 -1
  46. nautobot/core/models/query_functions.py +2 -2
  47. nautobot/core/models/tree_queries.py +6 -3
  48. nautobot/core/settings.py +29 -2
  49. nautobot/core/settings.yaml +21 -0
  50. nautobot/core/tables.py +79 -61
  51. nautobot/core/templates/about.html +67 -0
  52. nautobot/core/templates/inc/media.html +3 -0
  53. nautobot/core/templates/inc/nav_menu.html +1 -0
  54. nautobot/core/templates/inc/tenancy_form_panel.html +9 -0
  55. nautobot/core/templates/inc/tenant_table_row.html +11 -0
  56. nautobot/core/templates/nautobot_config.py.j2 +13 -0
  57. nautobot/core/templates/search.html +7 -0
  58. nautobot/core/templates/utilities/render_jinja2.html +1 -1
  59. nautobot/core/templates/utilities/templatetags/tag.html +1 -1
  60. nautobot/core/templates/utilities/theme_preview.html +7 -0
  61. nautobot/core/templatetags/helpers.py +11 -2
  62. nautobot/core/testing/__init__.py +8 -8
  63. nautobot/core/testing/api.py +170 -15
  64. nautobot/core/testing/filters.py +45 -10
  65. nautobot/core/testing/forms.py +2 -0
  66. nautobot/core/testing/integration.py +86 -4
  67. nautobot/core/testing/mixins.py +7 -2
  68. nautobot/core/testing/views.py +44 -29
  69. nautobot/core/tests/integration/test_app_home.py +0 -1
  70. nautobot/core/tests/integration/test_app_navbar.py +0 -1
  71. nautobot/core/tests/integration/test_filters.py +0 -2
  72. nautobot/core/tests/integration/test_home.py +0 -1
  73. nautobot/core/tests/integration/test_navbar.py +0 -1
  74. nautobot/core/tests/integration/test_view_authentication.py +1 -0
  75. nautobot/core/tests/runner.py +1 -1
  76. nautobot/core/tests/test_api.py +98 -1
  77. nautobot/core/tests/test_csv.py +25 -3
  78. nautobot/core/tests/test_filters.py +209 -246
  79. nautobot/core/tests/test_forms.py +1 -0
  80. nautobot/core/tests/test_jobs.py +460 -1
  81. nautobot/core/tests/test_models.py +9 -0
  82. nautobot/core/tests/test_settings_schema.py +7 -0
  83. nautobot/core/tests/test_tables.py +100 -0
  84. nautobot/core/tests/test_utils.py +63 -1
  85. nautobot/core/tests/test_views.py +30 -3
  86. nautobot/core/ui/nav.py +1 -0
  87. nautobot/core/ui/object_detail.py +15 -1
  88. nautobot/core/urls.py +11 -0
  89. nautobot/core/utils/lookup.py +11 -8
  90. nautobot/core/utils/querysets.py +64 -0
  91. nautobot/core/utils/requests.py +24 -9
  92. nautobot/core/views/__init__.py +42 -0
  93. nautobot/core/views/generic.py +131 -197
  94. nautobot/core/views/mixins.py +126 -38
  95. nautobot/core/views/renderers.py +6 -6
  96. nautobot/dcim/api/serializers.py +56 -64
  97. nautobot/dcim/api/views.py +47 -113
  98. nautobot/dcim/constants.py +6 -13
  99. nautobot/dcim/factory.py +6 -1
  100. nautobot/dcim/filters/__init__.py +31 -2
  101. nautobot/dcim/forms.py +36 -17
  102. nautobot/dcim/graphql/types.py +2 -2
  103. nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +25 -0
  104. nautobot/dcim/models/__init__.py +1 -1
  105. nautobot/dcim/models/device_component_templates.py +2 -2
  106. nautobot/dcim/models/device_components.py +22 -20
  107. nautobot/dcim/models/devices.py +10 -1
  108. nautobot/dcim/models/locations.py +3 -3
  109. nautobot/dcim/models/power.py +6 -5
  110. nautobot/dcim/models/racks.py +4 -4
  111. nautobot/dcim/tables/__init__.py +3 -3
  112. nautobot/dcim/tables/devices.py +7 -5
  113. nautobot/dcim/tables/devicetypes.py +2 -2
  114. nautobot/dcim/tables/racks.py +1 -1
  115. nautobot/dcim/templates/dcim/controller_create.html +1 -7
  116. nautobot/dcim/templates/dcim/controller_retrieve.html +1 -9
  117. nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +2 -0
  118. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +5 -0
  119. nautobot/dcim/templates/dcim/device.html +1 -9
  120. nautobot/dcim/templates/dcim/device_edit.html +36 -37
  121. nautobot/dcim/templates/dcim/location.html +1 -9
  122. nautobot/dcim/templates/dcim/location_edit.html +1 -7
  123. nautobot/dcim/templates/dcim/rack.html +1 -9
  124. nautobot/dcim/templates/dcim/rack_edit.html +1 -7
  125. nautobot/dcim/templates/dcim/rackreservation.html +1 -9
  126. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +1 -9
  127. nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +1 -7
  128. nautobot/dcim/tests/integration/test_controller.py +62 -0
  129. nautobot/dcim/tests/integration/test_controller_managed_device_group.py +71 -0
  130. nautobot/dcim/tests/integration/test_device_bulk_delete.py +189 -0
  131. nautobot/dcim/tests/integration/test_device_bulk_edit.py +181 -0
  132. nautobot/dcim/tests/test_api.py +16 -5
  133. nautobot/dcim/tests/test_filters.py +33 -0
  134. nautobot/dcim/tests/test_forms.py +51 -2
  135. nautobot/dcim/tests/test_graphql.py +52 -0
  136. nautobot/dcim/tests/test_jobs.py +118 -0
  137. nautobot/dcim/tests/test_models.py +52 -9
  138. nautobot/dcim/tests/test_views.py +21 -83
  139. nautobot/dcim/views.py +1 -13
  140. nautobot/extras/api/customfields.py +2 -2
  141. nautobot/extras/api/serializers.py +90 -85
  142. nautobot/extras/api/views.py +22 -27
  143. nautobot/extras/constants.py +2 -0
  144. nautobot/extras/filters/__init__.py +8 -6
  145. nautobot/extras/forms/base.py +2 -2
  146. nautobot/extras/forms/forms.py +139 -31
  147. nautobot/extras/forms/mixins.py +14 -6
  148. nautobot/extras/group_sync.py +3 -3
  149. nautobot/extras/health_checks.py +1 -2
  150. nautobot/extras/jobs.py +85 -18
  151. nautobot/extras/managers.py +3 -1
  152. nautobot/extras/migrations/0018_joblog_data_migration.py +7 -9
  153. nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +22 -0
  154. nautobot/extras/migrations/0121_alter_team_contacts.py +17 -0
  155. nautobot/extras/models/__init__.py +1 -1
  156. nautobot/extras/models/contacts.py +1 -1
  157. nautobot/extras/models/customfields.py +12 -11
  158. nautobot/extras/models/groups.py +11 -9
  159. nautobot/extras/models/jobs.py +23 -4
  160. nautobot/extras/models/models.py +2 -2
  161. nautobot/extras/plugins/__init__.py +13 -2
  162. nautobot/extras/plugins/marketplace_manifest.yml +84 -79
  163. nautobot/extras/plugins/tables.py +16 -14
  164. nautobot/extras/plugins/views.py +65 -69
  165. nautobot/extras/registry.py +1 -1
  166. nautobot/extras/secrets/__init__.py +2 -2
  167. nautobot/extras/tables.py +7 -5
  168. nautobot/extras/templates/extras/dynamicgroup.html +1 -9
  169. nautobot/extras/templates/extras/job_detail.html +16 -0
  170. nautobot/extras/templates/extras/job_edit.html +1 -0
  171. nautobot/extras/templates/extras/jobqueue_retrieve.html +1 -9
  172. nautobot/extras/templates/extras/marketplace.html +29 -11
  173. nautobot/extras/templates/extras/plugin_detail.html +32 -15
  174. nautobot/extras/templates/extras/plugins_tiles.html +21 -10
  175. nautobot/extras/templatetags/job_buttons.py +4 -4
  176. nautobot/extras/test_jobs/api_test_job.py +1 -1
  177. nautobot/extras/test_jobs/atomic_transaction.py +2 -2
  178. nautobot/extras/test_jobs/dry_run.py +1 -1
  179. nautobot/extras/test_jobs/fail.py +5 -5
  180. nautobot/extras/test_jobs/file_output.py +1 -1
  181. nautobot/extras/test_jobs/file_upload_fail.py +1 -1
  182. nautobot/extras/test_jobs/file_upload_pass.py +1 -1
  183. nautobot/extras/test_jobs/ipaddress_vars.py +3 -1
  184. nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
  185. nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
  186. nautobot/extras/test_jobs/log_redaction.py +1 -1
  187. nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
  188. nautobot/extras/test_jobs/modify_db.py +1 -1
  189. nautobot/extras/test_jobs/object_var_optional.py +1 -1
  190. nautobot/extras/test_jobs/object_var_required.py +1 -1
  191. nautobot/extras/test_jobs/object_vars.py +1 -1
  192. nautobot/extras/test_jobs/pass.py +3 -3
  193. nautobot/extras/test_jobs/profiling.py +1 -1
  194. nautobot/extras/test_jobs/relative_import.py +3 -3
  195. nautobot/extras/test_jobs/singleton.py +16 -0
  196. nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
  197. nautobot/extras/test_jobs/task_queues.py +1 -1
  198. nautobot/extras/tests/integration/test_plugin_banner.py +0 -2
  199. nautobot/extras/tests/test_api.py +13 -13
  200. nautobot/extras/tests/test_customfields.py +1 -1
  201. nautobot/extras/tests/test_datasources.py +2 -1
  202. nautobot/extras/tests/test_dynamicgroups.py +1 -1
  203. nautobot/extras/tests/test_filters.py +6 -6
  204. nautobot/extras/tests/test_forms.py +33 -1
  205. nautobot/extras/tests/test_jobs.py +178 -32
  206. nautobot/extras/tests/test_models.py +16 -10
  207. nautobot/extras/tests/test_plugins.py +62 -9
  208. nautobot/extras/tests/test_relationships.py +120 -9
  209. nautobot/extras/tests/test_views.py +56 -194
  210. nautobot/extras/utils.py +3 -2
  211. nautobot/extras/views.py +30 -98
  212. nautobot/ipam/api/fields.py +3 -3
  213. nautobot/ipam/api/serializers.py +41 -33
  214. nautobot/ipam/api/views.py +68 -117
  215. nautobot/ipam/factory.py +1 -1
  216. nautobot/ipam/filters.py +3 -2
  217. nautobot/ipam/lookups.py +101 -62
  218. nautobot/ipam/models.py +66 -16
  219. nautobot/ipam/querysets.py +2 -2
  220. nautobot/ipam/tables.py +23 -7
  221. nautobot/ipam/templates/ipam/ipaddress.html +1 -9
  222. nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +1 -7
  223. nautobot/ipam/templates/ipam/ipaddress_edit.html +1 -7
  224. nautobot/ipam/templates/ipam/prefix.html +1 -9
  225. nautobot/ipam/templates/ipam/prefix_edit.html +1 -7
  226. nautobot/ipam/templates/ipam/vlan.html +1 -9
  227. nautobot/ipam/templates/ipam/vlan_edit.html +1 -7
  228. nautobot/ipam/templates/ipam/vrf_edit.html +1 -7
  229. nautobot/ipam/tests/test_api.py +436 -3
  230. nautobot/ipam/tests/test_forms.py +49 -47
  231. nautobot/ipam/tests/test_migrations.py +30 -30
  232. nautobot/ipam/tests/test_models.py +95 -34
  233. nautobot/ipam/tests/test_querysets.py +63 -1
  234. nautobot/ipam/tests/test_views.py +3 -0
  235. nautobot/ipam/utils/__init__.py +36 -6
  236. nautobot/ipam/views.py +61 -87
  237. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
  238. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
  239. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +40 -2
  240. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
  241. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
  242. nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
  243. nautobot/project-static/docs/404.html +46 -4
  244. nautobot/project-static/docs/apps/index.html +46 -4
  245. nautobot/project-static/docs/apps/nautobot-apps.html +47 -6
  246. nautobot/project-static/docs/assets/_mkdocstrings.css +25 -1
  247. nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js → bundle.88dd0f4e.min.js} +2 -2
  248. nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js.map → bundle.88dd0f4e.min.js.map} +2 -2
  249. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +62 -10
  250. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +59 -7
  251. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +374 -122
  252. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +90 -18
  253. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +95 -21
  254. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +53 -6
  255. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +52 -5
  256. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +79 -17
  257. nautobot/project-static/docs/code-reference/nautobot/apps/events.html +102 -28
  258. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +108 -21
  259. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +131 -38
  260. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +239 -65
  261. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +581 -165
  262. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +109 -36
  263. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +453 -167
  264. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +493 -211
  265. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +60 -8
  266. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +71 -15
  267. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +407 -55
  268. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +620 -205
  269. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +858 -412
  270. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +59 -7
  271. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +448 -186
  272. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +365 -147
  273. nautobot/project-static/docs/development/apps/api/configuration-view.html +46 -4
  274. nautobot/project-static/docs/development/apps/api/database-backend-config.html +46 -4
  275. nautobot/project-static/docs/development/apps/api/models/django-admin.html +46 -4
  276. nautobot/project-static/docs/development/apps/api/models/global-search.html +46 -4
  277. nautobot/project-static/docs/development/apps/api/models/graphql.html +46 -4
  278. nautobot/project-static/docs/development/apps/api/models/index.html +46 -4
  279. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +46 -4
  280. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +46 -4
  281. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +46 -4
  282. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +46 -4
  283. nautobot/project-static/docs/development/apps/api/platform-features/index.html +46 -4
  284. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +46 -4
  285. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +46 -4
  286. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +46 -4
  287. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +46 -4
  288. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +68 -7
  289. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +46 -4
  290. nautobot/project-static/docs/development/apps/api/prometheus.html +46 -4
  291. nautobot/project-static/docs/development/apps/api/setup.html +46 -4
  292. nautobot/project-static/docs/development/apps/api/testing.html +46 -4
  293. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +46 -4
  294. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +46 -4
  295. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +46 -4
  296. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +46 -4
  297. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +46 -4
  298. nautobot/project-static/docs/development/apps/api/views/base-template.html +46 -4
  299. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +46 -4
  300. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +46 -4
  301. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +46 -4
  302. nautobot/project-static/docs/development/apps/api/views/index.html +46 -4
  303. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +46 -4
  304. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +46 -4
  305. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +46 -4
  306. nautobot/project-static/docs/development/apps/api/views/notes.html +46 -4
  307. nautobot/project-static/docs/development/apps/api/views/rest-api.html +52 -6
  308. nautobot/project-static/docs/development/apps/api/views/urls.html +46 -4
  309. nautobot/project-static/docs/development/apps/index.html +46 -4
  310. nautobot/project-static/docs/development/apps/migration/code-updates.html +46 -4
  311. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +46 -4
  312. nautobot/project-static/docs/development/apps/migration/from-v1.html +46 -4
  313. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +46 -4
  314. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +46 -4
  315. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +46 -4
  316. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +46 -4
  317. nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +50 -8
  318. nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +46 -4
  319. nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +211 -14
  320. nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +46 -4
  321. nautobot/project-static/docs/development/apps/porting-from-netbox.html +46 -4
  322. nautobot/project-static/docs/development/core/application-registry.html +46 -4
  323. nautobot/project-static/docs/development/core/best-practices.html +46 -4
  324. nautobot/project-static/docs/development/core/bootstrap-ui.html +46 -4
  325. nautobot/project-static/docs/development/core/caching.html +46 -4
  326. nautobot/project-static/docs/development/core/controllers.html +46 -4
  327. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +73 -74
  328. nautobot/project-static/docs/development/core/generic-views.html +46 -4
  329. nautobot/project-static/docs/development/core/getting-started.html +249 -224
  330. nautobot/project-static/docs/development/core/homepage.html +49 -7
  331. nautobot/project-static/docs/development/core/index.html +46 -4
  332. nautobot/project-static/docs/development/core/{local-k8s.html → minikube-dev-environment-for-k8s-jobs.html} +469 -168
  333. nautobot/project-static/docs/development/core/model-checklist.html +56 -12
  334. nautobot/project-static/docs/development/core/model-features.html +46 -4
  335. nautobot/project-static/docs/development/core/natural-keys.html +46 -4
  336. nautobot/project-static/docs/development/core/navigation-menu.html +46 -4
  337. nautobot/project-static/docs/development/core/release-checklist.html +49 -7
  338. nautobot/project-static/docs/development/core/role-internals.html +46 -4
  339. nautobot/project-static/docs/development/core/settings.html +46 -4
  340. nautobot/project-static/docs/development/core/style-guide.html +49 -7
  341. nautobot/project-static/docs/development/core/templates.html +46 -4
  342. nautobot/project-static/docs/development/core/testing.html +46 -4
  343. nautobot/project-static/docs/development/core/ui-component-framework.html +369 -273
  344. nautobot/project-static/docs/development/core/user-preferences.html +46 -4
  345. nautobot/project-static/docs/development/index.html +46 -4
  346. nautobot/project-static/docs/development/jobs/index.html +216 -122
  347. nautobot/project-static/docs/development/jobs/migration/from-v1.html +46 -4
  348. nautobot/project-static/docs/index.html +54 -23
  349. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
  350. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
  351. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
  352. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
  353. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
  354. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
  355. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
  356. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
  357. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
  358. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
  359. nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
  360. nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
  361. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
  362. nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
  363. nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
  364. nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
  365. nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
  366. nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
  367. nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
  368. nautobot/project-static/docs/objects.inv +0 -0
  369. nautobot/project-static/docs/overview/application_stack.html +47 -7
  370. nautobot/project-static/docs/overview/design_philosophy.html +46 -4
  371. nautobot/project-static/docs/release-notes/index.html +52 -12
  372. nautobot/project-static/docs/release-notes/version-1.0.html +234 -193
  373. nautobot/project-static/docs/release-notes/version-1.1.html +231 -190
  374. nautobot/project-static/docs/release-notes/version-1.2.html +306 -265
  375. nautobot/project-static/docs/release-notes/version-1.3.html +332 -291
  376. nautobot/project-static/docs/release-notes/version-1.4.html +417 -377
  377. nautobot/project-static/docs/release-notes/version-1.5.html +605 -566
  378. nautobot/project-static/docs/release-notes/version-1.6.html +904 -447
  379. nautobot/project-static/docs/release-notes/version-2.0.html +528 -489
  380. nautobot/project-static/docs/release-notes/version-2.1.html +363 -324
  381. nautobot/project-static/docs/release-notes/version-2.2.html +356 -317
  382. nautobot/project-static/docs/release-notes/version-2.3.html +997 -352
  383. nautobot/project-static/docs/release-notes/version-2.4.html +525 -101
  384. nautobot/project-static/docs/requirements.txt +2 -2
  385. nautobot/project-static/docs/search/search_index.json +1 -1
  386. nautobot/project-static/docs/sitemap.xml +295 -287
  387. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  388. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +46 -4
  389. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +46 -4
  390. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +48 -6
  391. nautobot/project-static/docs/user-guide/administration/configuration/index.html +46 -4
  392. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +46 -4
  393. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +110 -8
  394. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +46 -4
  395. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +46 -4
  396. nautobot/project-static/docs/user-guide/administration/guides/docker.html +46 -4
  397. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +46 -4
  398. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +46 -4
  399. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +46 -4
  400. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +46 -4
  401. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +46 -4
  402. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +48 -6
  403. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +46 -4
  404. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +46 -4
  405. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +46 -4
  406. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +66 -8
  407. nautobot/project-static/docs/user-guide/administration/installation/index.html +46 -4
  408. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +47 -5
  409. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +46 -4
  410. nautobot/project-static/docs/user-guide/administration/installation/services.html +46 -4
  411. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +46 -4
  412. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +46 -4
  413. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +46 -4
  414. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +46 -4
  415. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +46 -4
  416. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +46 -4
  417. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +46 -4
  418. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +46 -4
  419. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +46 -4
  420. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +49 -8
  421. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +46 -4
  422. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +46 -4
  423. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +46 -4
  424. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +46 -4
  425. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +46 -4
  426. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +46 -4
  427. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +46 -4
  428. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +46 -4
  429. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +46 -4
  430. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +46 -4
  431. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +46 -4
  432. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +46 -4
  433. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +46 -4
  434. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +46 -4
  435. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +46 -4
  436. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +46 -4
  437. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +46 -4
  438. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +46 -4
  439. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +46 -4
  440. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +46 -4
  441. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +46 -4
  442. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +46 -4
  443. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +46 -4
  444. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +46 -4
  445. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +46 -4
  446. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +46 -4
  447. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +46 -4
  448. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +46 -4
  449. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +46 -4
  450. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +46 -4
  451. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +46 -4
  452. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +46 -4
  453. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +46 -4
  454. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +46 -4
  455. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +46 -4
  456. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +46 -4
  457. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +46 -4
  458. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +46 -4
  459. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +46 -4
  460. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +46 -4
  461. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +46 -4
  462. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +46 -4
  463. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +46 -4
  464. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +46 -4
  465. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +46 -4
  466. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +46 -4
  467. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +46 -4
  468. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +46 -4
  469. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +46 -4
  470. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +46 -4
  471. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +46 -4
  472. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +46 -4
  473. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +46 -4
  474. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +46 -4
  475. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +46 -4
  476. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +46 -4
  477. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +46 -4
  478. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +50 -12
  479. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +46 -4
  480. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +46 -4
  481. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +46 -4
  482. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +46 -4
  483. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +46 -4
  484. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +46 -4
  485. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +46 -4
  486. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +46 -4
  487. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +46 -4
  488. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +46 -4
  489. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +46 -4
  490. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +46 -4
  491. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +49 -7
  492. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +46 -4
  493. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +46 -4
  494. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +46 -4
  495. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +46 -4
  496. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +46 -4
  497. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +46 -4
  498. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +46 -4
  499. nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +46 -4
  500. nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +46 -4
  501. nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +46 -4
  502. nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +46 -4
  503. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +46 -4
  504. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +46 -4
  505. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +46 -4
  506. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +46 -4
  507. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +46 -4
  508. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +46 -4
  509. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +46 -4
  510. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +46 -4
  511. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +46 -4
  512. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +46 -4
  513. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +46 -4
  514. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +51 -7
  515. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +46 -4
  516. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
  517. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
  518. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
  519. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
  520. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
  521. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
  522. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
  523. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
  524. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
  525. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
  526. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
  527. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
  528. nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
  529. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +46 -4
  530. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +46 -4
  531. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +49 -7
  532. nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +9444 -0
  533. nautobot/project-static/docs/user-guide/index.html +46 -4
  534. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +46 -4
  535. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +50 -8
  536. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +46 -4
  537. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +46 -4
  538. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +46 -4
  539. nautobot/project-static/docs/user-guide/platform-functionality/events.html +46 -4
  540. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +46 -4
  541. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +46 -4
  542. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +46 -4
  543. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +46 -4
  544. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +46 -4
  545. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +46 -4
  546. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +50 -7
  547. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +46 -4
  548. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +49 -7
  549. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +46 -4
  550. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +46 -4
  551. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9722 -0
  552. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +46 -4
  553. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +46 -4
  554. nautobot/project-static/docs/user-guide/platform-functionality/note.html +46 -4
  555. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +46 -4
  556. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +47 -5
  557. nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +46 -4
  558. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +46 -4
  559. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +94 -25
  560. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +74 -5
  561. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +46 -4
  562. nautobot/project-static/docs/user-guide/platform-functionality/role.html +46 -4
  563. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +46 -4
  564. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +46 -4
  565. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +46 -4
  566. nautobot/project-static/docs/user-guide/platform-functionality/status.html +46 -4
  567. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +46 -4
  568. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +46 -4
  569. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +46 -4
  570. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +46 -4
  571. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +46 -4
  572. nautobot/project-static/js/forms.js +1 -1
  573. nautobot/tenancy/api/views.py +9 -13
  574. nautobot/tenancy/views.py +4 -2
  575. nautobot/users/admin.py +1 -1
  576. nautobot/users/api/serializers.py +5 -4
  577. nautobot/users/api/views.py +3 -3
  578. nautobot/virtualization/api/serializers.py +4 -4
  579. nautobot/virtualization/api/views.py +5 -24
  580. nautobot/virtualization/filters.py +20 -3
  581. nautobot/virtualization/models.py +1 -1
  582. nautobot/virtualization/tables.py +2 -2
  583. nautobot/virtualization/templates/virtualization/cluster_edit.html +1 -7
  584. nautobot/virtualization/templates/virtualization/virtualmachine.html +1 -9
  585. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +2 -8
  586. nautobot/virtualization/tests/test_filters.py +17 -0
  587. nautobot/wireless/filters.py +2 -2
  588. nautobot/wireless/forms.py +1 -1
  589. nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +1 -9
  590. nautobot/wireless/tests/integration/__init__.py +0 -0
  591. nautobot/wireless/tests/integration/test_radio_profile.py +42 -0
  592. nautobot/wireless/tests/test_filters.py +29 -1
  593. nautobot/wireless/tests/test_views.py +22 -1
  594. nautobot/wireless/views.py +0 -10
  595. {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/METADATA +6 -6
  596. {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/RECORD +600 -550
  597. {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/WHEEL +1 -1
  598. nautobot/core/fixtures/user-data.json +0 -59
  599. {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/LICENSE.txt +0 -0
  600. {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/NOTICE +0 -0
  601. {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/entry_points.txt +0 -0
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
  <link rel="icon" href="../../assets/favicon.ico">
21
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.46">
21
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.49">
22
22
 
23
23
 
24
24
 
@@ -2112,6 +2112,27 @@
2112
2112
 
2113
2113
 
2114
2114
 
2115
+
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+ <li class="md-nav__item">
2122
+ <a href="../../user-guide/feature-guides/wireless-networks-and-controllers.html" class="md-nav__link">
2123
+
2124
+
2125
+ <span class="md-ellipsis">
2126
+ Wireless Networks and Controllers
2127
+ </span>
2128
+
2129
+
2130
+ </a>
2131
+ </li>
2132
+
2133
+
2134
+
2135
+
2115
2136
  </ul>
2116
2137
  </nav>
2117
2138
 
@@ -5131,6 +5152,27 @@
5131
5152
 
5132
5153
 
5133
5154
 
5155
+ <li class="md-nav__item">
5156
+ <a href="../../user-guide/platform-functionality/jobs/kubernetes-job-support.html" class="md-nav__link">
5157
+
5158
+
5159
+ <span class="md-ellipsis">
5160
+ Kubernetes Job Support
5161
+ </span>
5162
+
5163
+
5164
+ </a>
5165
+ </li>
5166
+
5167
+
5168
+
5169
+
5170
+
5171
+
5172
+
5173
+
5174
+
5175
+
5134
5176
  <li class="md-nav__item">
5135
5177
  <a href="../../user-guide/platform-functionality/jobs/jobbutton.html" class="md-nav__link">
5136
5178
 
@@ -7932,30 +7974,6 @@
7932
7974
  </span>
7933
7975
  </a>
7934
7976
 
7935
- </li>
7936
-
7937
- <li class="md-nav__item">
7938
- <a href="#creating-a-branch" class="md-nav__link">
7939
- <span class="md-ellipsis">
7940
- Creating a Branch
7941
- </span>
7942
- </a>
7943
-
7944
- <nav class="md-nav" aria-label="Creating a Branch">
7945
- <ul class="md-nav__list">
7946
-
7947
- <li class="md-nav__item">
7948
- <a href="#prototypes" class="md-nav__link">
7949
- <span class="md-ellipsis">
7950
- Prototypes
7951
- </span>
7952
- </a>
7953
-
7954
- </li>
7955
-
7956
- </ul>
7957
- </nav>
7958
-
7959
7977
  </li>
7960
7978
 
7961
7979
  </ul>
@@ -8059,15 +8077,6 @@
8059
8077
  </span>
8060
8078
  </a>
8061
8079
 
8062
- </li>
8063
-
8064
- <li class="md-nav__item">
8065
- <a href="#install-markdownlint-cli" class="md-nav__link">
8066
- <span class="md-ellipsis">
8067
- Install markdownlint-cli
8068
- </span>
8069
- </a>
8070
-
8071
8080
  </li>
8072
8081
 
8073
8082
  <li class="md-nav__item">
@@ -8150,6 +8159,30 @@
8150
8159
  <nav class="md-nav" aria-label="Working in your Development Environment">
8151
8160
  <ul class="md-nav__list">
8152
8161
 
8162
+ <li class="md-nav__item">
8163
+ <a href="#creating-a-branch" class="md-nav__link">
8164
+ <span class="md-ellipsis">
8165
+ Creating a Branch
8166
+ </span>
8167
+ </a>
8168
+
8169
+ <nav class="md-nav" aria-label="Creating a Branch">
8170
+ <ul class="md-nav__list">
8171
+
8172
+ <li class="md-nav__item">
8173
+ <a href="#prototypes" class="md-nav__link">
8174
+ <span class="md-ellipsis">
8175
+ Prototypes
8176
+ </span>
8177
+ </a>
8178
+
8179
+ </li>
8180
+
8181
+ </ul>
8182
+ </nav>
8183
+
8184
+ </li>
8185
+
8153
8186
  <li class="md-nav__item">
8154
8187
  <a href="#creating-a-superuser" class="md-nav__link">
8155
8188
  <span class="md-ellipsis">
@@ -8612,11 +8645,11 @@
8612
8645
 
8613
8646
 
8614
8647
  <li class="md-nav__item">
8615
- <a href="local-k8s.html" class="md-nav__link">
8648
+ <a href="minikube-dev-environment-for-k8s-jobs.html" class="md-nav__link">
8616
8649
 
8617
8650
 
8618
8651
  <span class="md-ellipsis">
8619
- Local Kubernetes Cluster
8652
+ Minikube Dev Environment for K8s Jobs
8620
8653
  </span>
8621
8654
 
8622
8655
 
@@ -9567,30 +9600,6 @@
9567
9600
  </span>
9568
9601
  </a>
9569
9602
 
9570
- </li>
9571
-
9572
- <li class="md-nav__item">
9573
- <a href="#creating-a-branch" class="md-nav__link">
9574
- <span class="md-ellipsis">
9575
- Creating a Branch
9576
- </span>
9577
- </a>
9578
-
9579
- <nav class="md-nav" aria-label="Creating a Branch">
9580
- <ul class="md-nav__list">
9581
-
9582
- <li class="md-nav__item">
9583
- <a href="#prototypes" class="md-nav__link">
9584
- <span class="md-ellipsis">
9585
- Prototypes
9586
- </span>
9587
- </a>
9588
-
9589
- </li>
9590
-
9591
- </ul>
9592
- </nav>
9593
-
9594
9603
  </li>
9595
9604
 
9596
9605
  </ul>
@@ -9694,15 +9703,6 @@
9694
9703
  </span>
9695
9704
  </a>
9696
9705
 
9697
- </li>
9698
-
9699
- <li class="md-nav__item">
9700
- <a href="#install-markdownlint-cli" class="md-nav__link">
9701
- <span class="md-ellipsis">
9702
- Install markdownlint-cli
9703
- </span>
9704
- </a>
9705
-
9706
9706
  </li>
9707
9707
 
9708
9708
  <li class="md-nav__item">
@@ -9785,6 +9785,30 @@
9785
9785
  <nav class="md-nav" aria-label="Working in your Development Environment">
9786
9786
  <ul class="md-nav__list">
9787
9787
 
9788
+ <li class="md-nav__item">
9789
+ <a href="#creating-a-branch" class="md-nav__link">
9790
+ <span class="md-ellipsis">
9791
+ Creating a Branch
9792
+ </span>
9793
+ </a>
9794
+
9795
+ <nav class="md-nav" aria-label="Creating a Branch">
9796
+ <ul class="md-nav__list">
9797
+
9798
+ <li class="md-nav__item">
9799
+ <a href="#prototypes" class="md-nav__link">
9800
+ <span class="md-ellipsis">
9801
+ Prototypes
9802
+ </span>
9803
+ </a>
9804
+
9805
+ </li>
9806
+
9807
+ </ul>
9808
+ </nav>
9809
+
9810
+ </li>
9811
+
9788
9812
  <li class="md-nav__item">
9789
9813
  <a href="#creating-a-superuser" class="md-nav__link">
9790
9814
  <span class="md-ellipsis">
@@ -10108,55 +10132,29 @@
10108
10132
  <h3 id="setting-up-your-remotes">Setting up your Remotes<a class="headerlink" href="#setting-up-your-remotes" title="Permanent link">&para;</a></h3>
10109
10133
  <p>Remote repos are managed using the <code>git remote</code> command.</p>
10110
10134
  <p>Upon cloning Nautobot for the first time, you will have only a single remote:</p>
10111
- <!-- markdownlint-disable MD010 -->
10112
-
10113
10135
  <div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>git remote -v
10114
10136
  </code></pre></div>
10115
10137
  <p>Example output:</p>
10116
- <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>origin git@github.com:yourusername/nautobot.git (fetch)
10117
- <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>origin git@github.com:yourusername/nautobot.git (push)
10138
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>origin git@github.com:yourusername/nautobot.git (fetch)
10139
+ <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>origin git@github.com:yourusername/nautobot.git (push)
10118
10140
  </code></pre></div>
10119
- <!-- markdownlint-enable MD010 -->
10120
-
10121
10141
  <p>Add the official Nautobot repo as a the <code>upstream</code> remote:</p>
10122
10142
  <div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>git remote add upstream git@github.com:nautobot/nautobot.git
10123
10143
  </code></pre></div>
10124
10144
  <p>View your remotes again to confirm you've got both <code>origin</code> pointing to your fork and <code>upstream</code> pointing to the official repo:</p>
10125
- <!-- markdownlint-disable MD010 -->
10126
-
10127
10145
  <div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>git remote -v
10128
10146
  </code></pre></div>
10129
10147
  <p>Example output:</p>
10130
- <div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>origin git@github.com:yourusername/nautobot.git (fetch)
10131
- <a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>origin git@github.com:yourusername/nautobot.git (push)
10148
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>origin git@github.com:yourusername/nautobot.git (fetch)
10149
+ <a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>origin git@github.com:yourusername/nautobot.git (push)
10132
10150
  <a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>upstream git@github.com:nautobot/nautobot.git (fetch)
10133
10151
  <a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a>upstream git@github.com:nautobot/nautobot.git (push)
10134
10152
  </code></pre></div>
10135
- <!-- markdownlint-enable MD010 -->
10136
-
10137
10153
  <p>You're now ready to proceed to the next steps.</p>
10138
10154
  <div class="admonition hint">
10139
10155
  <p class="admonition-title">Hint</p>
10140
10156
  <p>You will always <strong>push</strong> changes to <code>origin</code> (your fork) and <strong>pull</strong> changes from <code>upstream</code> (official repo).</p>
10141
10157
  </div>
10142
- <h3 id="creating-a-branch">Creating a Branch<a class="headerlink" href="#creating-a-branch" title="Permanent link">&para;</a></h3>
10143
- <p>Before you make any changes, always create a new branch. Again, for bug fixes and minor features, you'll want to create your branches from the <code>develop</code> branch, while for major new features, you'll branch from <code>next</code> instead.</p>
10144
- <p>Before you ever create a new branch, always checkout the appropriate branch and make sure you you've got the latest changes from <code>upstream</code>:</p>
10145
- <div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>git checkout develop
10146
- <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>git pull upstream develop
10147
- </code></pre></div>
10148
- <div class="admonition warning">
10149
- <p class="admonition-title">Warning</p>
10150
- <p>If you do not do this, you run the risk of having merge conflicts in your branch, and that's never fun to deal with. Trust us on this one.</p>
10151
- </div>
10152
- <p>Now that you've got the latest upstream changes, create your branch. Whether you're creating a branch off a fork or working against the Nautobot origin repo, you should follow this convention for naming your branch: <code>u/yourusername-0000-branch-summary</code>, where <code>0000</code> is the related GitHub issue number and <code>yourusername</code> is your GitHub username. For example:</p>
10153
- <div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>git checkout -b u/yourusername-1234-next-amazing-feature
10154
- </code></pre></div>
10155
- <p>If you do not have a relevant GitHub issue, please consider opening one to document the context behind your changes.</p>
10156
- <h4 id="prototypes">Prototypes<a class="headerlink" href="#prototypes" title="Permanent link">&para;</a></h4>
10157
- <p>Sometimes code is written as a proof of concept or early implementation candidate but is not quite ready to be merged, or may be picked up by another author sometime in the future. In that case, the convention is to use the <code>prototype/</code> prefix to the branch name and not requiring the original authors username. In that scenario, using the example above, you would instead:</p>
10158
- <div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>git checkout -b prototype/1234-next-amazing-feature
10159
- </code></pre></div>
10160
10158
  <h2 id="enabling-pre-commit-hooks">Enabling Pre-Commit Hooks<a class="headerlink" href="#enabling-pre-commit-hooks" title="Permanent link">&para;</a></h2>
10161
10159
  <p>Nautobot ships with a <a href="https://githooks.com/">Git pre-commit hook</a> script that automatically checks for style compliance and missing database migrations prior to committing changes. This helps avoid erroneous commits that result in CI test failures.</p>
10162
10160
  <div class="admonition note">
@@ -10164,15 +10162,15 @@
10164
10162
  <p>This pre-commit hook currently only supports the Python Virtual Environment Workflow.</p>
10165
10163
  </div>
10166
10164
  <p>You are encouraged to enable it by creating a link to <code>scripts/git-hooks/pre-commit</code>:</p>
10167
- <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>cd .git/hooks/
10168
- <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>ln -s ../../scripts/git-hooks/pre-commit
10165
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>cd .git/hooks/
10166
+ <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>ln -s ../../scripts/git-hooks/pre-commit
10169
10167
  </code></pre></div>
10170
10168
  <h2 id="setting-up-your-development-environment">Setting up your Development Environment<a class="headerlink" href="#setting-up-your-development-environment" title="Permanent link">&para;</a></h2>
10171
10169
  <p>Getting started with Nautobot development is pretty straightforward, and should feel very familiar to anyone with Django development experience. We can recommend either a <a href="#docker-compose-workflow">Docker Compose workflow</a> (if you don't want to install dependencies such as PostgreSQL and Redis directly onto your system) or a <a href="#python-virtual-environment-workflow">Python virtual environment workflow</a>.</p>
10172
10170
  <h3 id="windows-development">Windows Development<a class="headerlink" href="#windows-development" title="Permanent link">&para;</a></h3>
10173
10171
  <p>The Docker Compose development workflow on Windows Subsystem for Linux (WSL) has been tested successfully with <a href="https://docs.docker.com/desktop/windows/wsl/">Docker Desktop using the WSL2 backend</a> and the Ubuntu 20.04 WSL2 distribution. The Poetry workflow has also been tested successfully on the Ubuntu 20.04 WSL2 distribution.</p>
10174
10172
  <p>To install WSL2 and Ubuntu follow the instructions from the <a href="https://learn.microsoft.com/en-us/windows/wsl/install">WSL installation guide</a> or if running Windows 10 version 2004 and higher you can open an administrator Powershell terminal and enter the following command:</p>
10175
- <div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="n">wsl</span> <span class="p">-</span><span class="n">-install</span>
10173
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="n">wsl</span> <span class="p">-</span><span class="n">-install</span>
10176
10174
  </code></pre></div>
10177
10175
  <p>This will install the WSL2 Ubuntu distribution. Reboot if prompted. After the image installs successfully you may install Docker Desktop with the WSL2 backend.</p>
10178
10176
  <h3 id="docker-compose-workflow">Docker Compose Workflow<a class="headerlink" href="#docker-compose-workflow" title="Permanent link">&para;</a></h3>
@@ -10184,55 +10182,58 @@
10184
10182
  </div>
10185
10183
  <h4 id="install-invoke">Install Invoke<a class="headerlink" href="#install-invoke" title="Permanent link">&para;</a></h4>
10186
10184
  <p>Because it is used to execute all common Docker workflow tasks, Invoke must be installed for your user environment. On most systems, if you're installing without root/superuser permissions, the default will install into your local user environment.</p>
10187
- <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>pip3 install invoke
10185
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>pip3 install invoke
10188
10186
  </code></pre></div>
10189
10187
  <p>If you run into issues, you may also deliberately tell <code>pip3</code> to install into your user environment by adding the <code>--user</code> flag:</p>
10190
- <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>pip3 install --user invoke
10188
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>pip3 install --user invoke
10191
10189
  </code></pre></div>
10192
10190
  <p>If you encounter an <a href="https://peps.python.org/pep-0668/"><code>externally-managed-environment</code></a> error, you may need to install invoke through your OS's package manager. For example, <code>apt-get install python3-invoke</code> for Debian.</p>
10193
10191
  <p>Please see the <a href="https://pip.pypa.io/en/stable/user_guide/#user-installs">official documentation on Pip user installs</a> for more information.</p>
10194
10192
  <h4 id="list-invoke-tasks">List Invoke Tasks<a class="headerlink" href="#list-invoke-tasks" title="Permanent link">&para;</a></h4>
10195
10193
  <p>Now that you have an <code>invoke</code> command, list the tasks defined in <code>tasks.py</code>:</p>
10196
- <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>invoke --list
10194
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>invoke --list
10197
10195
  </code></pre></div>
10198
10196
  <p>Example output:</p>
10199
- <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>Available tasks:
10200
- <a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a>
10201
- <a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a> build Build Nautobot docker image.
10202
- <a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a> build-and-check-docs Build docs for use within Nautobot.
10203
- <a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a> build-dependencies
10204
- <a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a> buildx Build Nautobot docker image using the experimental buildx docker functionality (multi-arch
10205
- <a id="__codelineno-17-7" name="__codelineno-17-7" href="#__codelineno-17-7"></a> capability).
10206
- <a id="__codelineno-17-8" name="__codelineno-17-8" href="#__codelineno-17-8"></a> check-migrations Check for missing migrations.
10207
- <a id="__codelineno-17-9" name="__codelineno-17-9" href="#__codelineno-17-9"></a> check-schema Render the REST API schema and check for problems.
10208
- <a id="__codelineno-17-10" name="__codelineno-17-10" href="#__codelineno-17-10"></a> cli Launch a bash shell inside the running Nautobot (or other) Docker container.
10209
- <a id="__codelineno-17-11" name="__codelineno-17-11" href="#__codelineno-17-11"></a> createsuperuser Create a new Nautobot superuser account (default: &quot;admin&quot;), will prompt for password.
10210
- <a id="__codelineno-17-12" name="__codelineno-17-12" href="#__codelineno-17-12"></a> debug Start Nautobot and its dependencies in debug mode.
10211
- <a id="__codelineno-17-13" name="__codelineno-17-13" href="#__codelineno-17-13"></a> destroy Destroy all containers and volumes.
10212
- <a id="__codelineno-17-14" name="__codelineno-17-14" href="#__codelineno-17-14"></a> docker-push Tags and pushes docker images to the appropriate repos, intended for release use only.
10213
- <a id="__codelineno-17-15" name="__codelineno-17-15" href="#__codelineno-17-15"></a> dumpdata Dump data from database to db_output file.
10214
- <a id="__codelineno-17-16" name="__codelineno-17-16" href="#__codelineno-17-16"></a> hadolint Check Dockerfile for hadolint compliance and other style issues.
10215
- <a id="__codelineno-17-17" name="__codelineno-17-17" href="#__codelineno-17-17"></a> integration-test Run Nautobot integration tests.
10216
- <a id="__codelineno-17-18" name="__codelineno-17-18" href="#__codelineno-17-18"></a> loaddata Load data from file.
10217
- <a id="__codelineno-17-19" name="__codelineno-17-19" href="#__codelineno-17-19"></a> makemigrations Perform makemigrations operation in Django.
10218
- <a id="__codelineno-17-20" name="__codelineno-17-20" href="#__codelineno-17-20"></a> migration-test Test database migration from a given dataset to latest Nautobot schema.
10219
- <a id="__codelineno-17-21" name="__codelineno-17-21" href="#__codelineno-17-21"></a> markdownlint Lint Markdown files.
10220
- <a id="__codelineno-17-22" name="__codelineno-17-22" href="#__codelineno-17-22"></a> migrate Perform migrate operation in Django.
10221
- <a id="__codelineno-17-23" name="__codelineno-17-23" href="#__codelineno-17-23"></a> nbshell Launch an interactive Nautobot shell.
10222
- <a id="__codelineno-17-24" name="__codelineno-17-24" href="#__codelineno-17-24"></a> performance-test Run Nautobot performance tests.
10223
- <a id="__codelineno-17-25" name="__codelineno-17-25" href="#__codelineno-17-25"></a> post-upgrade Performs Nautobot common post-upgrade operations using a single entrypoint.
10224
- <a id="__codelineno-17-26" name="__codelineno-17-26" href="#__codelineno-17-26"></a> pylint Perform static analysis of Nautobot code.
10225
- <a id="__codelineno-17-27" name="__codelineno-17-27" href="#__codelineno-17-27"></a> restart Gracefully restart containers.
10226
- <a id="__codelineno-17-28" name="__codelineno-17-28" href="#__codelineno-17-28"></a> ruff Run ruff to perform code formatting and/or linting.
10227
- <a id="__codelineno-17-29" name="__codelineno-17-29" href="#__codelineno-17-29"></a> serve-docs Runs local instance of mkdocs serve (ctrl-c to stop).
10228
- <a id="__codelineno-17-30" name="__codelineno-17-30" href="#__codelineno-17-30"></a> start Start Nautobot and its dependencies in detached mode.
10229
- <a id="__codelineno-17-31" name="__codelineno-17-31" href="#__codelineno-17-31"></a> stop Stop Nautobot and its dependencies.
10230
- <a id="__codelineno-17-32" name="__codelineno-17-32" href="#__codelineno-17-32"></a> tests Run all linters and unit tests.
10231
- <a id="__codelineno-17-33" name="__codelineno-17-33" href="#__codelineno-17-33"></a> unittest Run Nautobot unit tests.
10232
- <a id="__codelineno-17-34" name="__codelineno-17-34" href="#__codelineno-17-34"></a> unittest-coverage Report on code test coverage as measured by &#39;invoke unittest&#39;.
10233
- <a id="__codelineno-17-35" name="__codelineno-17-35" href="#__codelineno-17-35"></a> version Show the version of Nautobot Python and NPM packages or bump them when a valid bump rule is provided.
10234
- <a id="__codelineno-17-36" name="__codelineno-17-36" href="#__codelineno-17-36"></a> vscode Launch Visual Studio Code with the appropriate Environment variables to run in a container.
10235
- <a id="__codelineno-17-37" name="__codelineno-17-37" href="#__codelineno-17-37"></a> yamllint Run yamllint to validate formatting applies to YAML standards.
10197
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>Available tasks:
10198
+ <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>
10199
+ <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a> branch Switch to a different Git branch, creating it if requested.
10200
+ <a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a> build Build Nautobot docker image.
10201
+ <a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a> build-and-check-docs Build docs for use within Nautobot.
10202
+ <a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a> build-dependencies
10203
+ <a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a> buildx Build Nautobot docker image using the experimental buildx docker functionality (multi-arch
10204
+ <a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a> capability).
10205
+ <a id="__codelineno-14-9" name="__codelineno-14-9" href="#__codelineno-14-9"></a> check-migrations Check for missing migrations.
10206
+ <a id="__codelineno-14-10" name="__codelineno-14-10" href="#__codelineno-14-10"></a> check-schema Render the REST API schema and check for problems.
10207
+ <a id="__codelineno-14-11" name="__codelineno-14-11" href="#__codelineno-14-11"></a> cli Launch a bash shell inside the running Nautobot (or other) Docker container.
10208
+ <a id="__codelineno-14-12" name="__codelineno-14-12" href="#__codelineno-14-12"></a> createsuperuser Create a new Nautobot superuser account (default: &quot;admin&quot;), will prompt for password.
10209
+ <a id="__codelineno-14-13" name="__codelineno-14-13" href="#__codelineno-14-13"></a> debug Start Nautobot and its dependencies in debug mode.
10210
+ <a id="__codelineno-14-14" name="__codelineno-14-14" href="#__codelineno-14-14"></a> destroy Destroy all containers and volumes.
10211
+ <a id="__codelineno-14-15" name="__codelineno-14-15" href="#__codelineno-14-15"></a> docker-push Tags and pushes docker images to the appropriate repos, intended for release use only.
10212
+ <a id="__codelineno-14-16" name="__codelineno-14-16" href="#__codelineno-14-16"></a> dumpdata Dump data from database to db_output file.
10213
+ <a id="__codelineno-14-17" name="__codelineno-14-17" href="#__codelineno-14-17"></a> hadolint Check Dockerfile for hadolint compliance and other style issues.
10214
+ <a id="__codelineno-14-18" name="__codelineno-14-18" href="#__codelineno-14-18"></a> integration-test Run Nautobot integration tests.
10215
+ <a id="__codelineno-14-19" name="__codelineno-14-19" href="#__codelineno-14-19"></a> loaddata Load data from file.
10216
+ <a id="__codelineno-14-20" name="__codelineno-14-20" href="#__codelineno-14-20"></a> logs View the logs of a docker compose service.
10217
+ <a id="__codelineno-14-21" name="__codelineno-14-21" href="#__codelineno-14-21"></a> makemigrations Perform makemigrations operation in Django.
10218
+ <a id="__codelineno-14-22" name="__codelineno-14-22" href="#__codelineno-14-22"></a> markdownlint Lint Markdown files.
10219
+ <a id="__codelineno-14-23" name="__codelineno-14-23" href="#__codelineno-14-23"></a> migrate Perform migrate operation in Django.
10220
+ <a id="__codelineno-14-24" name="__codelineno-14-24" href="#__codelineno-14-24"></a> migration-test Test database migration from a given dataset to latest Nautobot schema.
10221
+ <a id="__codelineno-14-25" name="__codelineno-14-25" href="#__codelineno-14-25"></a> nbshell Launch an interactive Nautobot shell.
10222
+ <a id="__codelineno-14-26" name="__codelineno-14-26" href="#__codelineno-14-26"></a> performance-test Run Nautobot performance tests.
10223
+ <a id="__codelineno-14-27" name="__codelineno-14-27" href="#__codelineno-14-27"></a> post-upgrade Performs Nautobot common post-upgrade operations using a single entrypoint.
10224
+ <a id="__codelineno-14-28" name="__codelineno-14-28" href="#__codelineno-14-28"></a> pylint Perform static analysis of Nautobot code.
10225
+ <a id="__codelineno-14-29" name="__codelineno-14-29" href="#__codelineno-14-29"></a> restart Gracefully restart containers.
10226
+ <a id="__codelineno-14-30" name="__codelineno-14-30" href="#__codelineno-14-30"></a> ruff Run ruff to perform code formatting and linting.
10227
+ <a id="__codelineno-14-31" name="__codelineno-14-31" href="#__codelineno-14-31"></a> serve-docs Runs local instance of mkdocs serve on port 8001 (ctrl-c to stop).
10228
+ <a id="__codelineno-14-32" name="__codelineno-14-32" href="#__codelineno-14-32"></a> showmigrations Perform showmigrations operation in Django.
10229
+ <a id="__codelineno-14-33" name="__codelineno-14-33" href="#__codelineno-14-33"></a> start Start Nautobot and its dependencies in detached mode.
10230
+ <a id="__codelineno-14-34" name="__codelineno-14-34" href="#__codelineno-14-34"></a> stop Stop Nautobot and its dependencies.
10231
+ <a id="__codelineno-14-35" name="__codelineno-14-35" href="#__codelineno-14-35"></a> tests Run all linters and unit tests.
10232
+ <a id="__codelineno-14-36" name="__codelineno-14-36" href="#__codelineno-14-36"></a> unittest Run Nautobot unit tests.
10233
+ <a id="__codelineno-14-37" name="__codelineno-14-37" href="#__codelineno-14-37"></a> unittest-coverage Report on code test coverage as measured by &#39;invoke unittest&#39;.
10234
+ <a id="__codelineno-14-38" name="__codelineno-14-38" href="#__codelineno-14-38"></a> version Show the version of Nautobot Python package or bump it when a valid bump rule is provided.
10235
+ <a id="__codelineno-14-39" name="__codelineno-14-39" href="#__codelineno-14-39"></a> vscode Launch Visual Studio Code with the appropriate Environment variables to run in a container.
10236
+ <a id="__codelineno-14-40" name="__codelineno-14-40" href="#__codelineno-14-40"></a> yamllint Run yamllint to validate formatting applies to YAML standards.
10236
10237
  </code></pre></div>
10237
10238
  <h4 id="using-docker-with-invoke">Using Docker with Invoke<a class="headerlink" href="#using-docker-with-invoke" title="Permanent link">&para;</a></h4>
10238
10239
  <details class="version-changed">
@@ -10241,14 +10242,17 @@
10241
10242
  </details>
10242
10243
  <p>A development environment can be easily started up from the root of the project using the following commands:</p>
10243
10244
  <ul>
10244
- <li><code>invoke build</code> - Builds Nautobot docker images</li>
10245
+ <li><code>invoke branch</code> - Creates or switches to the appropriate Git branch</li>
10246
+ <li><code>invoke build</code> - Builds Nautobot docker images appropriate to the current Git branch</li>
10245
10247
  <li><code>invoke migrate</code> - Performs database migration operation in Django</li>
10246
10248
  <li><code>invoke debug</code> - Starts Docker containers for Nautobot, PostgreSQL, Redis, Celery, and Celery Beat in debug mode and attaches their output to the terminal in the foreground. You may enter Control-C to stop the containers</li>
10247
10249
  </ul>
10248
10250
  <p>Additional useful commands for the development environment:</p>
10249
10251
  <ul>
10250
- <li><code>invoke start [-s servicename]</code> - Starts Docker containers for Nautobot, PostgreSQL, Redis, NGINX, Celery, and Celery Beat (or a specific container/service, such as <code>invoke start -s redis</code>) to run in the background with debug disabled</li>
10251
- <li><code>invoke cli [-s servicename]</code> - Launch a <code>bash</code> shell inside the specified service container (if none is specified, defaults to the Nautobot container)</li>
10252
+ <li><code>invoke start [-s servicename]</code> - Starts Docker containers for Nautobot, PostgreSQL, Redis, NGINX, Celery, and Celery Beat (or a specific container/service, such as <code>invoke start -s redis</code>) to run in the background</li>
10253
+ <li><code>invoke logs [-s servicename]</code> - View the logs of the containers (or a specific container/service, such as <code>invoke logs -s nautobot</code>)</li>
10254
+ <li><code>invoke nbshell</code> - Launches a Nautobot Python shell inside the Nautobot container</li>
10255
+ <li><code>invoke cli [-s servicename]</code> - Launches a <code>bash</code> shell inside the specified service container (if none is specified, defaults to the Nautobot container)</li>
10252
10256
  <li><code>invoke stop [-s servicename]</code> - Stops all containers (or a specific container/service) created by <code>invoke start</code></li>
10253
10257
  <li><code>invoke createsuperuser</code> - Creates a superuser account for the Nautobot application</li>
10254
10258
  </ul>
@@ -10278,7 +10282,7 @@
10278
10282
  <h4 id="install-poetry">Install Poetry<a class="headerlink" href="#install-poetry" title="Permanent link">&para;</a></h4>
10279
10283
  <p><a href="https://python-poetry.org/docs/">Poetry</a> is a tool for dependency management and packaging in Python. It allows you to declare the libraries your project depends on and it will manage (install/update/remove) them for you. It will also manage virtual environments automatically, and allow for publishing packages to the <a href="https://pypi.org">Python Package Index</a>.</p>
10280
10284
  <p>You may install Poetry in your user environment by running:</p>
10281
- <div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>curl -sSL https://install.python-poetry.org | python3 -
10285
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>curl -sSL https://install.python-poetry.org | python3 -
10282
10286
  </code></pre></div>
10283
10287
  <details class="version-changed">
10284
10288
  <summary>Changed in version 1.5.6</summary>
@@ -10293,17 +10297,13 @@
10293
10297
  <p>For detailed installation instructions, please see the <a href="https://python-poetry.org/docs/#installation">official Poetry installation guide</a>.</p>
10294
10298
  <h4 id="install-hadolint">Install Hadolint<a class="headerlink" href="#install-hadolint" title="Permanent link">&para;</a></h4>
10295
10299
  <p><a href="https://github.com/hadolint/hadolint">Hadolint</a> is a tool used to validate and lint Dockerfiles to ensure we are following best practices. On macOS with <a href="https://brew.sh/">Homebrew</a> you can install Hadolint by running:</p>
10296
- <div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>brew install hadolint
10297
- </code></pre></div>
10298
- <h4 id="install-markdownlint-cli">Install markdownlint-cli<a class="headerlink" href="#install-markdownlint-cli" title="Permanent link">&para;</a></h4>
10299
- <p><a href="https://github.com/igorshubovych/markdownlint-cli">markdownlint-cli</a> is a tool used to validate and lint Markdown files, such as Nautobot's documentation, to ensure that they are correctly constructed. On macOS with <a href="https://brew.sh/">Homebrew</a> you can install markdownlint-cli by running:</p>
10300
- <div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>brew install markdownlint-cli
10300
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>brew install hadolint
10301
10301
  </code></pre></div>
10302
10302
  <h4 id="creating-a-python-virtual-environment">Creating a Python Virtual Environment<a class="headerlink" href="#creating-a-python-virtual-environment" title="Permanent link">&para;</a></h4>
10303
10303
  <p>A Python <a href="https://docs.python.org/3/tutorial/venv.html">virtual environment</a> (or <em>virtualenv</em>) is like a container for a set of Python packages. A virtualenv allow you to build environments suited to specific projects without interfering with system packages or other projects. When installed per the documentation, Nautobot uses a virtual environment in production.</p>
10304
10304
  <p>For Nautobot development, we have selected Poetry, which will transparently create a virtualenv for you, automatically install all dependencies required for Nautobot to operate, and will also install the <code>nautobot-server</code> CLI command that you will utilize to interact with Nautobot from here on out.</p>
10305
10305
  <p>Bootstrap your virtual environment using <code>poetry install</code>:</p>
10306
- <div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a>poetry install
10306
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>poetry install
10307
10307
  </code></pre></div>
10308
10308
  <div class="admonition hint">
10309
10309
  <p class="admonition-title">Hint</p>
@@ -10311,44 +10311,45 @@
10311
10311
  </div>
10312
10312
  <p>This will create automatically create a virtualenv in your home directory, which houses a virtual copy of the Python executable and its related libraries and tooling. When running Nautobot for development, it will be run using the Python binary at found within the virtualenv.</p>
10313
10313
  <p>Once created, you may activate the virtual environment using <code>poetry shell</code>:</p>
10314
- <div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a>poetry shell
10314
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>poetry shell
10315
10315
  </code></pre></div>
10316
10316
  <p>Example output:</p>
10317
- <div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a>Spawning shell within /home/example/.cache/pypoetry/virtualenvs/nautobot-Ams_xyDt-py3.12
10318
- <a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a>
10319
- <a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a>. /home/example/.cache/pypoetry/virtualenvs/nautobot-Ams_xyDt-py3.12/bin/activate
10320
- <a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a>(nautobot-Ams_xyDt-py3.12) $
10317
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>Spawning shell within /home/example/.cache/pypoetry/virtualenvs/nautobot-Ams_xyDt-py3.12
10318
+ <a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a>
10319
+ <a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a>. /home/example/.cache/pypoetry/virtualenvs/nautobot-Ams_xyDt-py3.12/bin/activate
10320
+ <a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a>(nautobot-Ams_xyDt-py3.12) $
10321
10321
  </code></pre></div>
10322
10322
  <p>Notice that the console prompt changes to indicate the active environment. This updates the necessary system environment variables to ensure that any Python scripts are run within the virtual environment.</p>
10323
10323
  <p>Observe also that the <code>python</code> interpreter is bound within the virtualenv:</p>
10324
- <div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a>which python
10324
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>which python
10325
10325
  </code></pre></div>
10326
10326
  <p>Example output:</p>
10327
- <div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>(nautobot-Ams_xyDt-py3.12) $ /home/example/.cache/pypoetry/virtualenvs/nautobot-Ams_xyDt-py3.12/bin/python
10327
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a>(nautobot-Ams_xyDt-py3.12) $ /home/example/.cache/pypoetry/virtualenvs/nautobot-Ams_xyDt-py3.12/bin/python
10328
10328
  </code></pre></div>
10329
10329
  <p>To exit the virtual shell, use <code>exit</code>:</p>
10330
- <div class="highlight"><pre><span></span><code><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a>exit
10330
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a>exit
10331
10331
  </code></pre></div>
10332
10332
  <p>Example output:</p>
10333
- <div class="highlight"><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a>$
10333
+ <!-- pyml disable-num-lines 3 commands-show-output -->
10334
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a>$
10334
10335
  </code></pre></div>
10335
10336
  <h4 id="working-with-poetry">Working with Poetry<a class="headerlink" href="#working-with-poetry" title="Permanent link">&para;</a></h4>
10336
10337
  <p>Poetry automatically installs your dependencies. However, if you need to install any additional dependencies this can be done with <code>pip</code>. For example, if you really like using <code>ipython</code> for development:</p>
10337
- <div class="highlight"><pre><span></span><code><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a>pip3 install ipython
10338
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a>pip3 install ipython
10338
10339
  </code></pre></div>
10339
10340
  <p>Example output:</p>
10340
- <div class="highlight"><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a>Collecting ipython
10341
- <a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a> Using cached ipython-7.20.0-py3-none-any.whl (784 kB)
10342
- <a id="__codelineno-29-3" name="__codelineno-29-3" href="#__codelineno-29-3"></a> ...
10341
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>Collecting ipython
10342
+ <a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a> Using cached ipython-7.20.0-py3-none-any.whl (784 kB)
10343
+ <a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a> ...
10343
10344
  </code></pre></div>
10344
10345
  <ul>
10345
10346
  <li>Install verify that you have the proper dependencies installed and are in the virtual environment via Poetry. This also ensures that you have the proper mkdocs themes installed.</li>
10346
10347
  </ul>
10347
- <div class="highlight"><pre><span></span><code><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a>poetry<span class="w"> </span>shell
10348
- <a id="__codelineno-30-2" name="__codelineno-30-2" href="#__codelineno-30-2"></a>poetry<span class="w"> </span>install
10348
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a>poetry<span class="w"> </span>shell
10349
+ <a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a>poetry<span class="w"> </span>install
10349
10350
  </code></pre></div>
10350
10351
  <p>It may not always be convenient to enter into the virtual shell just to run programs. You may also execute a given command ad hoc within the project's virtual shell by using <code>poetry run</code>:</p>
10351
- <div class="highlight"><pre><span></span><code><a id="__codelineno-31-1" name="__codelineno-31-1" href="#__codelineno-31-1"></a>poetry run mkdocs serve
10352
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a>poetry run mkdocs serve
10352
10353
  </code></pre></div>
10353
10354
  <p>Check out the <a href="https://python-poetry.org/docs/basic-usage/">Poetry usage guide</a> for more tips.</p>
10354
10355
  <h4 id="configuring-nautobot">Configuring Nautobot<a class="headerlink" href="#configuring-nautobot" title="Permanent link">&para;</a></h4>
@@ -10363,20 +10364,20 @@
10363
10364
  <p>Nautobot's configuration file is <code>nautobot_config.py</code>.</p>
10364
10365
  <h5 id="initializing-a-config">Initializing a Config<a class="headerlink" href="#initializing-a-config" title="Permanent link">&para;</a></h5>
10365
10366
  <p>You may also initialize a new configuration using <code>nautobot-server init</code>:</p>
10366
- <div class="highlight"><pre><span></span><code><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a>nautobot-server init
10367
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a>nautobot-server init
10367
10368
  </code></pre></div>
10368
10369
  <p>Example output:</p>
10369
- <div class="highlight"><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a>Nautobot would like to send anonymized installation metrics to the project&#39;s maintainers.
10370
- <a id="__codelineno-33-2" name="__codelineno-33-2" href="#__codelineno-33-2"></a>These metrics include the installed Nautobot version, the Python version in use, an anonymous &quot;deployment ID&quot;, and a list of one-way-hashed names of enabled Nautobot Apps and their versions.
10371
- <a id="__codelineno-33-3" name="__codelineno-33-3" href="#__codelineno-33-3"></a>Allow Nautobot to send these metrics? [y/n]: n
10372
- <a id="__codelineno-33-4" name="__codelineno-33-4" href="#__codelineno-33-4"></a>Installation metrics will not be sent by default.
10373
- <a id="__codelineno-33-5" name="__codelineno-33-5" href="#__codelineno-33-5"></a>Configuration file created at /home/example/.nautobot/nautobot_config.py
10370
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a>Nautobot would like to send anonymized installation metrics to the project&#39;s maintainers.
10371
+ <a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a>These metrics include the installed Nautobot version, the Python version in use, an anonymous &quot;deployment ID&quot;, and a list of one-way-hashed names of enabled Nautobot Apps and their versions.
10372
+ <a id="__codelineno-29-3" name="__codelineno-29-3" href="#__codelineno-29-3"></a>Allow Nautobot to send these metrics? [y/n]: n
10373
+ <a id="__codelineno-29-4" name="__codelineno-29-4" href="#__codelineno-29-4"></a>Installation metrics will not be sent by default.
10374
+ <a id="__codelineno-29-5" name="__codelineno-29-5" href="#__codelineno-29-5"></a>Configuration file created at /home/example/.nautobot/nautobot_config.py
10374
10375
  </code></pre></div>
10375
10376
  <p>You may also specify alternate file locations. Please refer to <a href="../../user-guide/administration/configuration/index.html">Configuring Nautobot</a> for how to do that.</p>
10376
10377
  <h5 id="using-the-development-config">Using the Development Config<a class="headerlink" href="#using-the-development-config" title="Permanent link">&para;</a></h5>
10377
10378
  <p>A <code>nautobot_config.py</code> suitable for development purposes can be found at <code>development/nautobot_config.py</code>. You may customize the values there or utilize environment variables to override the default values.</p>
10378
10379
  <p>If you want to use this file, initialize a config first, then copy this file to the default location Nautobot expects to find its config:</p>
10379
- <div class="highlight"><pre><span></span><code><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a>cp development/nautobot_config.py ~/.nautobot/nautobot_config.py
10380
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a>cp development/nautobot_config.py ~/.nautobot/nautobot_config.py
10380
10381
  </code></pre></div>
10381
10382
  <h5 id="required-settings">Required Settings<a class="headerlink" href="#required-settings" title="Permanent link">&para;</a></h5>
10382
10383
  <p>A newly created configuration includes sane defaults. If you need to customize them, edit your <code>nautobot_config.py</code> and update the following settings as required:</p>
@@ -10389,6 +10390,32 @@
10389
10390
  </ul>
10390
10391
  <h2 id="working-in-your-development-environment">Working in your Development Environment<a class="headerlink" href="#working-in-your-development-environment" title="Permanent link">&para;</a></h2>
10391
10392
  <p>Below are common commands for working your development environment.</p>
10393
+ <h3 id="creating-a-branch">Creating a Branch<a class="headerlink" href="#creating-a-branch" title="Permanent link">&para;</a></h3>
10394
+ <p>Before you make any changes, always create a new branch. Again, for bug fixes and minor features, you'll want to create your branches from the <code>develop</code> branch, while for major new features, you'll branch from <code>next</code> instead.</p>
10395
+ <p>In current versions of Nautobot, you can use the <code>invoke branch</code> command to create a new branch or switch to an existing branch. Whether you're creating a branch off a fork or working against the Nautobot origin repo, you should follow this convention for naming your branch: <code>u/yourusername-0000-branch-summary</code>, where <code>0000</code> is the related GitHub issue number and <code>yourusername</code> is your GitHub username. (If you do not have a relevant GitHub issue, please consider opening one to document the context behind your changes.)</p>
10396
+ <p>For example:</p>
10397
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-31-1" name="__codelineno-31-1" href="#__codelineno-31-1"></a>invoke branch --create --branch u/yourusername-1234-some-bug-fix --parent develop
10398
+ </code></pre></div>
10399
+ <p>or:</p>
10400
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a>invoke branch --create --branch u/yourusername-1235-amazing-feature --parent next
10401
+ </code></pre></div>
10402
+ <div class="admonition caution">
10403
+ <p class="admonition-title">Caution</p>
10404
+ <p>We recommend using this Invoke command instead of directly calling <code>git checkout</code> or <code>git switch</code> because it automatically handles some other aspects of the development environment, in particular stopping the currently running Nautobot Docker containers, if any, before switching to a different branch.</p>
10405
+ </div>
10406
+ <div class="admonition tip">
10407
+ <p class="admonition-title">Tip</p>
10408
+ <p>You can switch between any existing branches with simply <code>invoke branch --branch &lt;name&gt;</code>.</p>
10409
+ </div>
10410
+ <div class="admonition tip">
10411
+ <p class="admonition-title">Nautobot branches and the Docker compose workflow</p>
10412
+ <p>It's common for the Python dependencies and database schema to differ between major and minor Nautobot releases, and therefore between the primary branches of <code>main</code>, <code>develop</code>, <code>next</code>, and <code>ltm-1.6</code>. To account for this, the Docker workflow automatically detects which <code>major.minor</code> Nautobot version you're working with and changes the Docker Compose project name accordingly. What this means for you in practice is that when first switching between Nautobot releases, you may need to rerun <code>invoke build</code> once for each primary branch, and <code>invoke start</code>/<code>invoke debug</code> may take some time as it needs to create a new database and migrate its schema. However, in the future, switching between releases should be relatively smooth (just <code>invoke branch -b &lt;name&gt;</code> and then <code>invoke start</code>) rather than needing to rebuild the container and database every time you switch between <code>develop</code> and <code>next</code> as would likely be needed if the same Docker Compose project were used for both release trains.</p>
10413
+ <p>Conversely, if you're using the virtual environment workflow, you may need to manually run <code>poetry install</code> whenever switching between primary branches, and may need to manually drop and restore the database schema as well. Be aware!</p>
10414
+ </div>
10415
+ <h4 id="prototypes">Prototypes<a class="headerlink" href="#prototypes" title="Permanent link">&para;</a></h4>
10416
+ <p>Sometimes code is written as a proof of concept or early implementation candidate but is not quite ready to be merged, or may be picked up by another author sometime in the future. In that case, the convention is to use the <code>prototype/</code> prefix to the branch name and not requiring the original authors username. In that scenario, using the example above, you would instead:</p>
10417
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a>invoke branch --create --branch prototype/1234-next-amazing-feature --parent next
10418
+ </code></pre></div>
10392
10419
  <h3 id="creating-a-superuser">Creating a Superuser<a class="headerlink" href="#creating-a-superuser" title="Permanent link">&para;</a></h3>
10393
10420
  <details class="version-changed">
10394
10421
  <summary>Changed in version 2.1.2</summary>
@@ -10431,16 +10458,16 @@
10431
10458
  </tbody>
10432
10459
  </table>
10433
10460
  <p>For example:</p>
10434
- <div class="highlight"><pre><span></span><code><a id="__codelineno-35-1" name="__codelineno-35-1" href="#__codelineno-35-1"></a>nautobot-server runserver
10461
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a>nautobot-server runserver
10435
10462
  </code></pre></div>
10436
10463
  <p>Example output:</p>
10437
- <div class="highlight"><pre><span></span><code><a id="__codelineno-36-1" name="__codelineno-36-1" href="#__codelineno-36-1"></a>Performing system checks...
10438
- <a id="__codelineno-36-2" name="__codelineno-36-2" href="#__codelineno-36-2"></a>
10439
- <a id="__codelineno-36-3" name="__codelineno-36-3" href="#__codelineno-36-3"></a>System check identified no issues (0 silenced).
10440
- <a id="__codelineno-36-4" name="__codelineno-36-4" href="#__codelineno-36-4"></a>November 18, 2020 - 15:52:31
10441
- <a id="__codelineno-36-5" name="__codelineno-36-5" href="#__codelineno-36-5"></a>Django version 3.1, using settings &#39;nautobot.core.settings&#39;
10442
- <a id="__codelineno-36-6" name="__codelineno-36-6" href="#__codelineno-36-6"></a>Starting development server at http://127.0.0.1:8080/
10443
- <a id="__codelineno-36-7" name="__codelineno-36-7" href="#__codelineno-36-7"></a>Quit the server with CONTROL-C.
10464
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-35-1" name="__codelineno-35-1" href="#__codelineno-35-1"></a>Performing system checks...
10465
+ <a id="__codelineno-35-2" name="__codelineno-35-2" href="#__codelineno-35-2"></a>
10466
+ <a id="__codelineno-35-3" name="__codelineno-35-3" href="#__codelineno-35-3"></a>System check identified no issues (0 silenced).
10467
+ <a id="__codelineno-35-4" name="__codelineno-35-4" href="#__codelineno-35-4"></a>November 18, 2020 - 15:52:31
10468
+ <a id="__codelineno-35-5" name="__codelineno-35-5" href="#__codelineno-35-5"></a>Django version 3.1, using settings &#39;nautobot.core.settings&#39;
10469
+ <a id="__codelineno-35-6" name="__codelineno-35-6" href="#__codelineno-35-6"></a>Starting development server at http://127.0.0.1:8080/
10470
+ <a id="__codelineno-35-7" name="__codelineno-35-7" href="#__codelineno-35-7"></a>Quit the server with CONTROL-C.
10444
10471
  </code></pre></div>
10445
10472
  <div class="admonition warning">
10446
10473
  <p class="admonition-title">Warning</p>
@@ -10487,20 +10514,20 @@
10487
10514
  </tbody>
10488
10515
  </table>
10489
10516
  <p>For example:</p>
10490
- <div class="highlight"><pre><span></span><code><a id="__codelineno-37-1" name="__codelineno-37-1" href="#__codelineno-37-1"></a>nautobot-server<span class="w"> </span>nbshell
10517
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-36-1" name="__codelineno-36-1" href="#__codelineno-36-1"></a>nautobot-server<span class="w"> </span>nbshell
10491
10518
  </code></pre></div>
10492
10519
  <p>Example output:</p>
10493
- <div class="highlight"><pre><span></span><code><a id="__codelineno-38-1" name="__codelineno-38-1" href="#__codelineno-38-1"></a># Shell Plus Model Imports
10494
- <a id="__codelineno-38-2" name="__codelineno-38-2" href="#__codelineno-38-2"></a>...
10495
- <a id="__codelineno-38-3" name="__codelineno-38-3" href="#__codelineno-38-3"></a># Shell Plus Django Imports
10496
- <a id="__codelineno-38-4" name="__codelineno-38-4" href="#__codelineno-38-4"></a>...
10497
- <a id="__codelineno-38-5" name="__codelineno-38-5" href="#__codelineno-38-5"></a># Django version 4.2.15
10498
- <a id="__codelineno-38-6" name="__codelineno-38-6" href="#__codelineno-38-6"></a># Nautobot version 2.3.3b1
10499
- <a id="__codelineno-38-7" name="__codelineno-38-7" href="#__codelineno-38-7"></a># Example Nautobot App version 1.0.0
10500
- <a id="__codelineno-38-8" name="__codelineno-38-8" href="#__codelineno-38-8"></a>Python 3.12.6 (main, Sep 12 2024, 21:12:08) [GCC 12.2.0] on linux
10501
- <a id="__codelineno-38-9" name="__codelineno-38-9" href="#__codelineno-38-9"></a>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
10502
- <a id="__codelineno-38-10" name="__codelineno-38-10" href="#__codelineno-38-10"></a>(InteractiveConsole)
10503
- <a id="__codelineno-38-11" name="__codelineno-38-11" href="#__codelineno-38-11"></a>&gt;&gt;&gt;
10520
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-37-1" name="__codelineno-37-1" href="#__codelineno-37-1"></a># Shell Plus Model Imports
10521
+ <a id="__codelineno-37-2" name="__codelineno-37-2" href="#__codelineno-37-2"></a>...
10522
+ <a id="__codelineno-37-3" name="__codelineno-37-3" href="#__codelineno-37-3"></a># Shell Plus Django Imports
10523
+ <a id="__codelineno-37-4" name="__codelineno-37-4" href="#__codelineno-37-4"></a>...
10524
+ <a id="__codelineno-37-5" name="__codelineno-37-5" href="#__codelineno-37-5"></a># Django version 4.2.15
10525
+ <a id="__codelineno-37-6" name="__codelineno-37-6" href="#__codelineno-37-6"></a># Nautobot version 2.3.3b1
10526
+ <a id="__codelineno-37-7" name="__codelineno-37-7" href="#__codelineno-37-7"></a># Example Nautobot App version 1.0.0
10527
+ <a id="__codelineno-37-8" name="__codelineno-37-8" href="#__codelineno-37-8"></a>Python 3.12.6 (main, Sep 12 2024, 21:12:08) [GCC 12.2.0] on linux
10528
+ <a id="__codelineno-37-9" name="__codelineno-37-9" href="#__codelineno-37-9"></a>Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
10529
+ <a id="__codelineno-37-10" name="__codelineno-37-10" href="#__codelineno-37-10"></a>(InteractiveConsole)
10530
+ <a id="__codelineno-37-11" name="__codelineno-37-11" href="#__codelineno-37-11"></a>&gt;&gt;&gt;
10504
10531
  </code></pre></div>
10505
10532
  <h3 id="post-upgrade-operations">Post-upgrade Operations<a class="headerlink" href="#post-upgrade-operations" title="Permanent link">&para;</a></h3>
10506
10533
  <p>There will be times where you're working with the bleeding edge of Nautobot from the <code>develop</code> branch or feature branches and will need to pull in database changes or run server operations.</p>
@@ -10527,22 +10554,22 @@
10527
10554
  </div>
10528
10555
  <p>Sometimes when files are renamed, moved, or deleted and you've been working in the same environment for a while, you can encounter weird behavior. If this happens, don't panic and nuke your environment.</p>
10529
10556
  <p>First, use <code>pip3</code> to explicitly uninstall the Nautobot package from the environment:</p>
10530
- <div class="highlight"><pre><span></span><code><a id="__codelineno-39-1" name="__codelineno-39-1" href="#__codelineno-39-1"></a>pip3 uninstall -y nautobot
10557
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-38-1" name="__codelineno-38-1" href="#__codelineno-38-1"></a>pip3 uninstall -y nautobot
10531
10558
  </code></pre></div>
10532
10559
  <p>Example output:</p>
10533
- <div class="highlight"><pre><span></span><code><a id="__codelineno-40-1" name="__codelineno-40-1" href="#__codelineno-40-1"></a>Found existing installation: nautobot 1.0.0b2
10534
- <a id="__codelineno-40-2" name="__codelineno-40-2" href="#__codelineno-40-2"></a>Uninstalling nautobot-1.0.0b2:
10535
- <a id="__codelineno-40-3" name="__codelineno-40-3" href="#__codelineno-40-3"></a> Successfully uninstalled nautobot-1.0.0b2
10560
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-39-1" name="__codelineno-39-1" href="#__codelineno-39-1"></a>Found existing installation: nautobot 1.0.0b2
10561
+ <a id="__codelineno-39-2" name="__codelineno-39-2" href="#__codelineno-39-2"></a>Uninstalling nautobot-1.0.0b2:
10562
+ <a id="__codelineno-39-3" name="__codelineno-39-3" href="#__codelineno-39-3"></a> Successfully uninstalled nautobot-1.0.0b2
10536
10563
  </code></pre></div>
10537
10564
  <p>Then try to just have Poetry do the right thing by telling it to install again:</p>
10538
- <div class="highlight"><pre><span></span><code><a id="__codelineno-41-1" name="__codelineno-41-1" href="#__codelineno-41-1"></a>poetry install
10565
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-40-1" name="__codelineno-40-1" href="#__codelineno-40-1"></a>poetry install
10539
10566
  </code></pre></div>
10540
10567
  <p>Example output:</p>
10541
- <div class="highlight"><pre><span></span><code><a id="__codelineno-42-1" name="__codelineno-42-1" href="#__codelineno-42-1"></a>Installing dependencies from lock file
10542
- <a id="__codelineno-42-2" name="__codelineno-42-2" href="#__codelineno-42-2"></a>
10543
- <a id="__codelineno-42-3" name="__codelineno-42-3" href="#__codelineno-42-3"></a>No dependencies to install or update
10544
- <a id="__codelineno-42-4" name="__codelineno-42-4" href="#__codelineno-42-4"></a>
10545
- <a id="__codelineno-42-5" name="__codelineno-42-5" href="#__codelineno-42-5"></a>Installing the current project: nautobot (1.0.0-beta.2)
10568
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-41-1" name="__codelineno-41-1" href="#__codelineno-41-1"></a>Installing dependencies from lock file
10569
+ <a id="__codelineno-41-2" name="__codelineno-41-2" href="#__codelineno-41-2"></a>
10570
+ <a id="__codelineno-41-3" name="__codelineno-41-3" href="#__codelineno-41-3"></a>No dependencies to install or update
10571
+ <a id="__codelineno-41-4" name="__codelineno-41-4" href="#__codelineno-41-4"></a>
10572
+ <a id="__codelineno-41-5" name="__codelineno-41-5" href="#__codelineno-41-5"></a>Installing the current project: nautobot (1.0.0-beta.2)
10546
10573
  </code></pre></div>
10547
10574
  <h3 id="running-tests">Running Tests<a class="headerlink" href="#running-tests" title="Permanent link">&para;</a></h3>
10548
10575
  <p>Throughout the course of development, it's a good idea to occasionally run Nautobot's test suite to catch any potential errors. Tests come in two primary flavors: Unit tests and integration tests.</p>
@@ -10585,24 +10612,24 @@
10585
10612
  </ul>
10586
10613
  <h5 id="unit-test-invocation-examples">Unit Test Invocation Examples<a class="headerlink" href="#unit-test-invocation-examples" title="Permanent link">&para;</a></h5>
10587
10614
  <p>In general, when you first run the Nautobot tests in your local copy of the repository, we'd recommend:</p>
10588
- <div class="highlight"><pre><span></span><code><a id="__codelineno-43-1" name="__codelineno-43-1" href="#__codelineno-43-1"></a>invoke unittest
10615
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-42-1" name="__codelineno-42-1" href="#__codelineno-42-1"></a>invoke unittest
10589
10616
  </code></pre></div>
10590
10617
  <p>When there are too many cores on the testing machine, you can limit the number of parallel workers:</p>
10591
- <div class="highlight"><pre><span></span><code><a id="__codelineno-44-1" name="__codelineno-44-1" href="#__codelineno-44-1"></a>invoke unittest --parallel-workers 4
10618
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-43-1" name="__codelineno-43-1" href="#__codelineno-43-1"></a>invoke unittest --parallel-workers 4
10592
10619
  </code></pre></div>
10593
10620
  <p>On subsequent reruns, you can add the other performance-related options:</p>
10594
- <div class="highlight"><pre><span></span><code><a id="__codelineno-45-1" name="__codelineno-45-1" href="#__codelineno-45-1"></a>invoke unittest --skip-docs-build
10595
- <a id="__codelineno-45-2" name="__codelineno-45-2" href="#__codelineno-45-2"></a>invoke unittest --skip-docs-build --label nautobot.core.tests
10621
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-44-1" name="__codelineno-44-1" href="#__codelineno-44-1"></a>invoke unittest --skip-docs-build
10622
+ <a id="__codelineno-44-2" name="__codelineno-44-2" href="#__codelineno-44-2"></a>invoke unittest --skip-docs-build --label nautobot.core.tests
10596
10623
  </code></pre></div>
10597
10624
  <p>When switching between significantly different branches of the code base (e.g. <code>main</code> vs <code>develop</code> vs <code>next</code>), you'll need to for once include the <code>--no-keepdb</code> option so that the test database can be destroyed and recreated appropriately:</p>
10598
- <div class="highlight"><pre><span></span><code><a id="__codelineno-46-1" name="__codelineno-46-1" href="#__codelineno-46-1"></a>invoke unittest --no-keepdb
10625
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-45-1" name="__codelineno-45-1" href="#__codelineno-45-1"></a>invoke unittest --no-keepdb
10599
10626
  </code></pre></div>
10600
10627
  <p>To not use the cached test fixture, you will need to include the <code>--no-cache-test-fixtures</code> flag</p>
10601
- <div class="highlight"><pre><span></span><code><a id="__codelineno-47-1" name="__codelineno-47-1" href="#__codelineno-47-1"></a>invoke unittest --no-cache-test-fixtures
10628
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-46-1" name="__codelineno-46-1" href="#__codelineno-46-1"></a>invoke unittest --no-cache-test-fixtures
10602
10629
  </code></pre></div>
10603
10630
  <p>To limit the test to a specific pattern or label, you can use the <code>--label</code> and <code>--pattern</code> options:</p>
10604
- <div class="highlight"><pre><span></span><code><a id="__codelineno-48-1" name="__codelineno-48-1" href="#__codelineno-48-1"></a>invoke unittest --verbose --skip-docs-build --label nautobot.core.tests.dcim.test_views.DeviceTestCase
10605
- <a id="__codelineno-48-2" name="__codelineno-48-2" href="#__codelineno-48-2"></a>invoke unittest --verbose --skip-docs-build --pattern Controller
10631
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-47-1" name="__codelineno-47-1" href="#__codelineno-47-1"></a>invoke unittest --verbose --skip-docs-build --label nautobot.core.tests.dcim.test_views.DeviceTestCase
10632
+ <a id="__codelineno-47-2" name="__codelineno-47-2" href="#__codelineno-47-2"></a>invoke unittest --verbose --skip-docs-build --pattern Controller
10606
10633
  </code></pre></div>
10607
10634
  <h4 id="integration-tests">Integration Tests<a class="headerlink" href="#integration-tests" title="Permanent link">&para;</a></h4>
10608
10635
  <p>Integration tests are automated tests written and run to ensure that the Nautobot application behaves as expected when being used as it would be in practice. By contrast to unit tests, where individual units of code are being tested, integration tests rely upon the server code actually running, and web UI clients or API clients to make real connections to the service to exercise actual workflows, such as navigating to the login page, filling out the username/passwords fields, and clicking the "Log In" button.</p>
@@ -10678,7 +10705,7 @@
10678
10705
  </table>
10679
10706
  <h3 id="verifying-code-style-and-static-analysis">Verifying Code Style and Static Analysis<a class="headerlink" href="#verifying-code-style-and-static-analysis" title="Permanent link">&para;</a></h3>
10680
10707
  <p>To enforce best practices around consistent <a href="style-guide.html">coding style</a>, Nautobot uses <a href="https://docs.astral.sh/ruff">Ruff</a>. Additionally, <a href="https://en.wikipedia.org/wiki/Static_program_analysis">static analysis</a> of Nautobot code is performed by Ruff and <a href="https://pylint.pycqa.org/en/latest/">Pylint</a>. You should run all of these commands and ensure that they pass fully with regard to your code changes before opening a pull request upstream.</p>
10681
- <!-- markdownlint-disable no-inline-html -->
10708
+ <!-- pyml disable-num-lines 4 no-inline-html -->
10682
10709
  <table>
10683
10710
  <thead>
10684
10711
  <tr>
@@ -10697,8 +10724,6 @@
10697
10724
  </tr>
10698
10725
  </tbody>
10699
10726
  </table>
10700
- <!-- markdownlint-enable no-inline-html -->
10701
-
10702
10727
  <h3 id="handling-migrations">Handling Migrations<a class="headerlink" href="#handling-migrations" title="Permanent link">&para;</a></h3>
10703
10728
  <h4 id="checking-whether-a-new-migration-is-needed">Checking Whether a New Migration is Needed<a class="headerlink" href="#checking-whether-a-new-migration-is-needed" title="Permanent link">&para;</a></h4>
10704
10729
  <p>If you're unsure whether a database schema migration is needed based on your changes, you can run the following command:</p>
@@ -10790,7 +10815,7 @@
10790
10815
  </table>
10791
10816
  <p>Documentation is written in Markdown. If you need to add additional pages or sections to the documentation, you can add them to <code>mkdocs.yml</code> at the root of the repository.</p>
10792
10817
  <h3 id="verifying-documentation">Verifying Documentation<a class="headerlink" href="#verifying-documentation" title="Permanent link">&para;</a></h3>
10793
- <p>Nautobot uses <a href="https://github.com/igorshubovych/markdownlint-cli"><code>markdownlint-cli</code></a> to verify correctness of the documentation. You should run this command and ensure that it passes fully with regard to your documentation changes before opening a pull request upstream.</p>
10818
+ <p>Nautobot uses <a href="https://github.com/jackdewinter/pymarkdown"><code>pymarkdownlnt</code></a> to verify correctness of the documentation. You should run this command and ensure that it passes fully with regard to your documentation changes before opening a pull request upstream.</p>
10794
10819
  <table>
10795
10820
  <thead>
10796
10821
  <tr>
@@ -10801,14 +10826,14 @@
10801
10826
  <tbody>
10802
10827
  <tr>
10803
10828
  <td><code>invoke markdownlint</code></td>
10804
- <td><code>markdownlint --ignore nautobot/project-static --config .markdownlint.yml nautobot examples *.md</code></td>
10829
+ <td><code>pymarkdown scan --recurse nautobot examples *.md</code></td>
10805
10830
  </tr>
10806
10831
  </tbody>
10807
10832
  </table>
10808
10833
  <h2 id="submitting-pull-requests">Submitting Pull Requests<a class="headerlink" href="#submitting-pull-requests" title="Permanent link">&para;</a></h2>
10809
10834
  <p>Once you're happy with your work and have verified that all tests pass, commit your changes and push it upstream to your fork. Always provide descriptive (but not excessively verbose) commit messages. When working on a specific issue, be sure to reference it.</p>
10810
- <div class="highlight"><pre><span></span><code><a id="__codelineno-49-1" name="__codelineno-49-1" href="#__codelineno-49-1"></a>git commit -m &quot;Closes #1234: Add IPv5 support&quot;
10811
- <a id="__codelineno-49-2" name="__codelineno-49-2" href="#__codelineno-49-2"></a>git push origin
10835
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-48-1" name="__codelineno-48-1" href="#__codelineno-48-1"></a>git commit -m &quot;Closes #1234: Add IPv5 support&quot;
10836
+ <a id="__codelineno-48-2" name="__codelineno-48-2" href="#__codelineno-48-2"></a>git push origin
10812
10837
  </code></pre></div>
10813
10838
  <p>Once your fork has the new commit, submit a <a href="https://github.com/nautobot/nautobot/compare">pull request</a> to the Nautobot repo to propose the changes. Be sure to provide a detailed accounting of the changes being made and the reasons for doing so.</p>
10814
10839
  <p>Once submitted, a maintainer will review your pull request and either merge it or request changes. If changes are needed, you can make them via new commits to your fork: The pull request will update automatically.</p>
@@ -10820,11 +10845,11 @@
10820
10845
  <p>Below are common issues you might encounter in your development environment and how to address them.</p>
10821
10846
  <h3 id="fatal-sorry-too-many-clients-already">FATAL: sorry, too many clients already<a class="headerlink" href="#fatal-sorry-too-many-clients-already" title="Permanent link">&para;</a></h3>
10822
10847
  <p>When using <code>nautobot-server runserver</code> to do development you might run into a traceback that looks something like this:</p>
10823
- <div class="highlight"><pre><span></span><code><a id="__codelineno-50-1" name="__codelineno-50-1" href="#__codelineno-50-1"></a>Exception Type: OperationalError at /extras/tags/
10824
- <a id="__codelineno-50-2" name="__codelineno-50-2" href="#__codelineno-50-2"></a>Exception Value: FATAL: sorry, too many clients already
10848
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-49-1" name="__codelineno-49-1" href="#__codelineno-49-1"></a>Exception Type: OperationalError at /extras/tags/
10849
+ <a id="__codelineno-49-2" name="__codelineno-49-2" href="#__codelineno-49-2"></a>Exception Value: FATAL: sorry, too many clients already
10825
10850
  </code></pre></div>
10826
10851
  <p>The <code>runserver</code> development server is multi-threaded by default, which means that every request is creating its own connection. If you are doing some local testing or development that is resulting in a lot of connections to the database, pass <code>--nothreading</code> to the runserver command to disable threading:</p>
10827
- <div class="highlight"><pre><span></span><code><a id="__codelineno-51-1" name="__codelineno-51-1" href="#__codelineno-51-1"></a>nautobot-server runserver --nothreading
10852
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-50-1" name="__codelineno-50-1" href="#__codelineno-50-1"></a>nautobot-server runserver --nothreading
10828
10853
  </code></pre></div>
10829
10854
 
10830
10855
 
@@ -10972,7 +10997,7 @@
10972
10997
  <script id="__config" type="application/json">{"base": "../..", "features": ["content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
10973
10998
 
10974
10999
 
10975
- <script src="../../assets/javascripts/bundle.83f73b43.min.js"></script>
11000
+ <script src="../../assets/javascripts/bundle.88dd0f4e.min.js"></script>
10976
11001
 
10977
11002
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
10978
11003