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
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- <link rel="canonical" href="https://docs.nautobot.com/projects/core/en/stable/development/core/local-k8s.html">
11
+ <link rel="canonical" href="https://docs.nautobot.com/projects/core/en/stable/development/core/minikube-dev-environment-for-k8s-jobs.html">
12
12
 
13
13
 
14
14
  <link rel="prev" href="homepage.html">
@@ -18,11 +18,11 @@
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
 
25
- <title>Local Kubernetes Cluster - Nautobot Documentation</title>
25
+ <title>Minikube Dev Environment for K8s Jobs - Nautobot Documentation</title>
26
26
 
27
27
 
28
28
 
@@ -95,7 +95,7 @@
95
95
  <div data-md-component="skip">
96
96
 
97
97
 
98
- <a href="#using-local-kubernetes-cluster" class="md-skip">
98
+ <a href="#minikube-dev-environment-for-k8s-jobs" class="md-skip">
99
99
  Skip to content
100
100
  </a>
101
101
 
@@ -130,7 +130,7 @@
130
130
  <div class="md-header__topic" data-md-component="header-topic">
131
131
  <span class="md-ellipsis">
132
132
 
133
- Local Kubernetes Cluster
133
+ Minikube Dev Environment for K8s Jobs
134
134
 
135
135
  </span>
136
136
  </div>
@@ -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
 
@@ -8075,18 +8117,18 @@
8075
8117
 
8076
8118
 
8077
8119
  <span class="md-ellipsis">
8078
- Local Kubernetes Cluster
8120
+ Minikube Dev Environment for K8s Jobs
8079
8121
  </span>
8080
8122
 
8081
8123
 
8082
8124
  <span class="md-nav__icon md-icon"></span>
8083
8125
  </label>
8084
8126
 
8085
- <a href="local-k8s.html" class="md-nav__link md-nav__link--active">
8127
+ <a href="minikube-dev-environment-for-k8s-jobs.html" class="md-nav__link md-nav__link--active">
8086
8128
 
8087
8129
 
8088
8130
  <span class="md-ellipsis">
8089
- Local Kubernetes Cluster
8131
+ Minikube Dev Environment for K8s Jobs
8090
8132
  </span>
8091
8133
 
8092
8134
 
@@ -8108,54 +8150,138 @@
8108
8150
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
8109
8151
 
8110
8152
  <li class="md-nav__item">
8111
- <a href="#installing-kind" class="md-nav__link">
8153
+ <a href="#preliminary-setup" class="md-nav__link">
8112
8154
  <span class="md-ellipsis">
8113
- Installing Kind
8155
+ Preliminary Setup
8114
8156
  </span>
8115
8157
  </a>
8116
8158
 
8117
8159
  </li>
8118
8160
 
8119
8161
  <li class="md-nav__item">
8120
- <a href="#creating-a-kind-kubernetes-cluster" class="md-nav__link">
8162
+ <a href="#starting-required-deployments" class="md-nav__link">
8121
8163
  <span class="md-ellipsis">
8122
- Creating a Kind Kubernetes Cluster
8164
+ Starting Required Deployments
8165
+ </span>
8166
+ </a>
8167
+
8168
+ <nav class="md-nav" aria-label="Starting Required Deployments">
8169
+ <ul class="md-nav__list">
8170
+
8171
+ <li class="md-nav__item">
8172
+ <a href="#check-required-files" class="md-nav__link">
8173
+ <span class="md-ellipsis">
8174
+ Check Required Files
8123
8175
  </span>
8124
8176
  </a>
8125
8177
 
8126
8178
  </li>
8127
-
8128
- <li class="md-nav__item">
8129
- <a href="#connecting-nautobot-containers" class="md-nav__link">
8179
+
8180
+ <li class="md-nav__item">
8181
+ <a href="#build-an-up-to-date-nautobot-docker-image" class="md-nav__link">
8130
8182
  <span class="md-ellipsis">
8131
- Connecting Nautobot Containers
8183
+ Build an up-to-date Nautobot Docker Image
8132
8184
  </span>
8133
8185
  </a>
8134
8186
 
8135
8187
  </li>
8136
-
8137
- <li class="md-nav__item">
8138
- <a href="#using-kubectl" class="md-nav__link">
8188
+
8189
+ <li class="md-nav__item">
8190
+ <a href="#starting-the-deployments-and-services" class="md-nav__link">
8191
+ <span class="md-ellipsis">
8192
+ Starting the Deployments and Services
8193
+ </span>
8194
+ </a>
8195
+
8196
+ </li>
8197
+
8198
+ <li class="md-nav__item">
8199
+ <a href="#starting-the-configuration-maps-and-persistent-volume-claims" class="md-nav__link">
8139
8200
  <span class="md-ellipsis">
8140
- Using kubectl
8201
+ Starting the Configuration Maps and Persistent Volume Claims
8141
8202
  </span>
8142
8203
  </a>
8143
8204
 
8205
+ </li>
8206
+
8207
+ <li class="md-nav__item">
8208
+ <a href="#port-forward-to-local-host" class="md-nav__link">
8209
+ <span class="md-ellipsis">
8210
+ Port Forward to Local Host
8211
+ </span>
8212
+ </a>
8213
+
8214
+ </li>
8215
+
8216
+ </ul>
8217
+ </nav>
8218
+
8144
8219
  </li>
8145
8220
 
8146
8221
  <li class="md-nav__item">
8147
- <a href="#running-a-test-job" class="md-nav__link">
8222
+ <a href="#run-a-kubernetes-job" class="md-nav__link">
8223
+ <span class="md-ellipsis">
8224
+ Run a Kubernetes Job
8225
+ </span>
8226
+ </a>
8227
+
8228
+ <nav class="md-nav" aria-label="Run a Kubernetes Job">
8229
+ <ul class="md-nav__list">
8230
+
8231
+ <li class="md-nav__item">
8232
+ <a href="#configure-a-new-job-queue-of-type-kubernetes" class="md-nav__link">
8233
+ <span class="md-ellipsis">
8234
+ Configure a New Job Queue of Type Kubernetes
8235
+ </span>
8236
+ </a>
8237
+
8238
+ </li>
8239
+
8240
+ <li class="md-nav__item">
8241
+ <a href="#assign-that-job-queue-to-a-job" class="md-nav__link">
8242
+ <span class="md-ellipsis">
8243
+ Assign that Job Queue to a Job
8244
+ </span>
8245
+ </a>
8246
+
8247
+ </li>
8248
+
8249
+ <li class="md-nav__item">
8250
+ <a href="#run-the-job" class="md-nav__link">
8251
+ <span class="md-ellipsis">
8252
+ Run the Job
8253
+ </span>
8254
+ </a>
8255
+
8256
+ </li>
8257
+
8258
+ <li class="md-nav__item">
8259
+ <a href="#inspect-the-job-result" class="md-nav__link">
8260
+ <span class="md-ellipsis">
8261
+ Inspect the Job Result
8262
+ </span>
8263
+ </a>
8264
+
8265
+ </li>
8266
+
8267
+ <li class="md-nav__item">
8268
+ <a href="#running-a-scheduled-job" class="md-nav__link">
8148
8269
  <span class="md-ellipsis">
8149
- Running a Test Job
8270
+ Running a Scheduled Job
8150
8271
  </span>
8151
8272
  </a>
8152
8273
 
8274
+ </li>
8275
+
8276
+ </ul>
8277
+ </nav>
8278
+
8153
8279
  </li>
8154
8280
 
8155
8281
  <li class="md-nav__item">
8156
- <a href="#cleaning-up" class="md-nav__link">
8282
+ <a href="#after-running-a-job" class="md-nav__link">
8157
8283
  <span class="md-ellipsis">
8158
- Cleaning Up
8284
+ After Running a Job
8159
8285
  </span>
8160
8286
  </a>
8161
8287
 
@@ -9077,54 +9203,138 @@
9077
9203
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
9078
9204
 
9079
9205
  <li class="md-nav__item">
9080
- <a href="#installing-kind" class="md-nav__link">
9206
+ <a href="#preliminary-setup" class="md-nav__link">
9081
9207
  <span class="md-ellipsis">
9082
- Installing Kind
9208
+ Preliminary Setup
9083
9209
  </span>
9084
9210
  </a>
9085
9211
 
9086
9212
  </li>
9087
9213
 
9088
9214
  <li class="md-nav__item">
9089
- <a href="#creating-a-kind-kubernetes-cluster" class="md-nav__link">
9215
+ <a href="#starting-required-deployments" class="md-nav__link">
9216
+ <span class="md-ellipsis">
9217
+ Starting Required Deployments
9218
+ </span>
9219
+ </a>
9220
+
9221
+ <nav class="md-nav" aria-label="Starting Required Deployments">
9222
+ <ul class="md-nav__list">
9223
+
9224
+ <li class="md-nav__item">
9225
+ <a href="#check-required-files" class="md-nav__link">
9090
9226
  <span class="md-ellipsis">
9091
- Creating a Kind Kubernetes Cluster
9227
+ Check Required Files
9092
9228
  </span>
9093
9229
  </a>
9094
9230
 
9095
9231
  </li>
9096
-
9097
- <li class="md-nav__item">
9098
- <a href="#connecting-nautobot-containers" class="md-nav__link">
9232
+
9233
+ <li class="md-nav__item">
9234
+ <a href="#build-an-up-to-date-nautobot-docker-image" class="md-nav__link">
9099
9235
  <span class="md-ellipsis">
9100
- Connecting Nautobot Containers
9236
+ Build an up-to-date Nautobot Docker Image
9101
9237
  </span>
9102
9238
  </a>
9103
9239
 
9104
9240
  </li>
9105
-
9106
- <li class="md-nav__item">
9107
- <a href="#using-kubectl" class="md-nav__link">
9241
+
9242
+ <li class="md-nav__item">
9243
+ <a href="#starting-the-deployments-and-services" class="md-nav__link">
9244
+ <span class="md-ellipsis">
9245
+ Starting the Deployments and Services
9246
+ </span>
9247
+ </a>
9248
+
9249
+ </li>
9250
+
9251
+ <li class="md-nav__item">
9252
+ <a href="#starting-the-configuration-maps-and-persistent-volume-claims" class="md-nav__link">
9253
+ <span class="md-ellipsis">
9254
+ Starting the Configuration Maps and Persistent Volume Claims
9255
+ </span>
9256
+ </a>
9257
+
9258
+ </li>
9259
+
9260
+ <li class="md-nav__item">
9261
+ <a href="#port-forward-to-local-host" class="md-nav__link">
9108
9262
  <span class="md-ellipsis">
9109
- Using kubectl
9263
+ Port Forward to Local Host
9110
9264
  </span>
9111
9265
  </a>
9112
9266
 
9267
+ </li>
9268
+
9269
+ </ul>
9270
+ </nav>
9271
+
9113
9272
  </li>
9114
9273
 
9115
9274
  <li class="md-nav__item">
9116
- <a href="#running-a-test-job" class="md-nav__link">
9275
+ <a href="#run-a-kubernetes-job" class="md-nav__link">
9276
+ <span class="md-ellipsis">
9277
+ Run a Kubernetes Job
9278
+ </span>
9279
+ </a>
9280
+
9281
+ <nav class="md-nav" aria-label="Run a Kubernetes Job">
9282
+ <ul class="md-nav__list">
9283
+
9284
+ <li class="md-nav__item">
9285
+ <a href="#configure-a-new-job-queue-of-type-kubernetes" class="md-nav__link">
9286
+ <span class="md-ellipsis">
9287
+ Configure a New Job Queue of Type Kubernetes
9288
+ </span>
9289
+ </a>
9290
+
9291
+ </li>
9292
+
9293
+ <li class="md-nav__item">
9294
+ <a href="#assign-that-job-queue-to-a-job" class="md-nav__link">
9295
+ <span class="md-ellipsis">
9296
+ Assign that Job Queue to a Job
9297
+ </span>
9298
+ </a>
9299
+
9300
+ </li>
9301
+
9302
+ <li class="md-nav__item">
9303
+ <a href="#run-the-job" class="md-nav__link">
9117
9304
  <span class="md-ellipsis">
9118
- Running a Test Job
9305
+ Run the Job
9119
9306
  </span>
9120
9307
  </a>
9121
9308
 
9309
+ </li>
9310
+
9311
+ <li class="md-nav__item">
9312
+ <a href="#inspect-the-job-result" class="md-nav__link">
9313
+ <span class="md-ellipsis">
9314
+ Inspect the Job Result
9315
+ </span>
9316
+ </a>
9317
+
9318
+ </li>
9319
+
9320
+ <li class="md-nav__item">
9321
+ <a href="#running-a-scheduled-job" class="md-nav__link">
9322
+ <span class="md-ellipsis">
9323
+ Running a Scheduled Job
9324
+ </span>
9325
+ </a>
9326
+
9327
+ </li>
9328
+
9329
+ </ul>
9330
+ </nav>
9331
+
9122
9332
  </li>
9123
9333
 
9124
9334
  <li class="md-nav__item">
9125
- <a href="#cleaning-up" class="md-nav__link">
9335
+ <a href="#after-running-a-job" class="md-nav__link">
9126
9336
  <span class="md-ellipsis">
9127
- Cleaning Up
9337
+ After Running a Job
9128
9338
  </span>
9129
9339
  </a>
9130
9340
 
@@ -9148,153 +9358,244 @@
9148
9358
 
9149
9359
 
9150
9360
 
9151
- <h1 id="using-local-kubernetes-cluster">Using Local Kubernetes Cluster<a class="headerlink" href="#using-local-kubernetes-cluster" title="Permanent link">&para;</a></h1>
9152
- <p>This guide will help you set up a local Kubernetes cluster using <a href="https://kind.sigs.k8s.io/">Kind</a> and connect running Nautobot containers to the Kind network.</p>
9153
- <h2 id="installing-kind">Installing Kind<a class="headerlink" href="#installing-kind" title="Permanent link">&para;</a></h2>
9154
- <p>In this chapter we will install Kind on your local machine and create a new Kind Kubernetes cluster.</p>
9155
- <p>To install Kind on macOS:</p>
9156
- <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>brew<span class="w"> </span>install<span class="w"> </span>kind
9361
+ <h1 id="minikube-dev-environment-for-k8s-jobs">Minikube Dev Environment for K8s Jobs<a class="headerlink" href="#minikube-dev-environment-for-k8s-jobs" title="Permanent link">&para;</a></h1>
9362
+ <p>Kubernetes Job Support is added in Nautobot v2.4.0. This documentation is a end-to-end development guide on topics from how to set up your local Kubernetes cluster with <a href="https://minikube.sigs.k8s.io/docs/">minikube</a> and how to run a Nautobot Job in a Kubernetes job pod.</p>
9363
+ <h2 id="preliminary-setup">Preliminary Setup<a class="headerlink" href="#preliminary-setup" title="Permanent link">&para;</a></h2>
9364
+ <p>First you need to install minikube, go to the offical <a href="https://minikube.sigs.k8s.io/docs/start/">get started page</a> to learn how to download minikube for your specific OS and architecture.</p>
9365
+ <p>Once minikube is downloaded, create and start your minikube cluster with the following command:</p>
9366
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>minikube<span class="w"> </span>start
9157
9367
  </code></pre></div>
9158
- <p>To install Kind on Linux:</p>
9159
- <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>curl<span class="w"> </span>-fsSL<span class="w"> </span><span class="se">\</span>
9160
- <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="s2">&quot;https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64&quot;</span><span class="w"> </span><span class="se">\</span>
9161
- <a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span>--output<span class="w"> </span>/usr/local/bin/kind
9162
- <a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>chmod<span class="w"> </span>+x<span class="w"> </span>/usr/local/bin/kind
9368
+ <p>You should see the following output:</p>
9369
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>😄<span class="w"> </span>minikube<span class="w"> </span>v1.34.0<span class="w"> </span>on<span class="w"> </span>Darwin<span class="w"> </span><span class="m">14</span>.4<span class="w"> </span><span class="o">(</span>arm64<span class="o">)</span>
9370
+ <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>✨<span class="w"> </span>Using<span class="w"> </span>the<span class="w"> </span>docker<span class="w"> </span>driver<span class="w"> </span>based<span class="w"> </span>on<span class="w"> </span>existing<span class="w"> </span>profile
9371
+ <a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>👍<span class="w"> </span>Starting<span class="w"> </span><span class="s2">&quot;minikube&quot;</span><span class="w"> </span>primary<span class="w"> </span>control-plane<span class="w"> </span>node<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="s2">&quot;minikube&quot;</span><span class="w"> </span>cluster
9372
+ <a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>🚜<span class="w"> </span>Pulling<span class="w"> </span>base<span class="w"> </span>image<span class="w"> </span>v0.0.45<span class="w"> </span>...
9373
+ <a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a>🏃<span class="w"> </span>Updating<span class="w"> </span>the<span class="w"> </span>running<span class="w"> </span>docker<span class="w"> </span><span class="s2">&quot;minikube&quot;</span><span class="w"> </span>container<span class="w"> </span>...
9374
+ <a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a>🐳<span class="w"> </span>Preparing<span class="w"> </span>Kubernetes<span class="w"> </span>v1.31.0<span class="w"> </span>on<span class="w"> </span>Docker<span class="w"> </span><span class="m">27</span>.2.0<span class="w"> </span>...
9375
+ <a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a>🔎<span class="w"> </span>Verifying<span class="w"> </span>Kubernetes<span class="w"> </span>components...
9376
+ <a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="w"> </span>▪<span class="w"> </span>Using<span class="w"> </span>image<span class="w"> </span>gcr.io/k8s-minikube/storage-provisioner:v5
9377
+ <a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a>🌟<span class="w"> </span>Enabled<span class="w"> </span>addons:<span class="w"> </span>storage-provisioner,<span class="w"> </span>default-storageclass
9378
+ <a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a>🏄<span class="w"> </span>Done!<span class="w"> </span>kubectl<span class="w"> </span>is<span class="w"> </span>now<span class="w"> </span>configured<span class="w"> </span>to<span class="w"> </span>use<span class="w"> </span><span class="s2">&quot;minikube&quot;</span><span class="w"> </span>cluster<span class="w"> </span>and<span class="w"> </span><span class="s2">&quot;default&quot;</span><span class="w"> </span>namespace<span class="w"> </span>by<span class="w"> </span>default
9163
9379
  </code></pre></div>
9164
- <h2 id="creating-a-kind-kubernetes-cluster">Creating a Kind Kubernetes Cluster<a class="headerlink" href="#creating-a-kind-kubernetes-cluster" title="Permanent link">&para;</a></h2>
9165
- <p>In this chapter, we will create a new Kind Kubernetes cluster for local development, along with a client configuration file.</p>
9166
- <div class="admonition note">
9167
- <p class="admonition-title">Note</p>
9168
- <p>To access the cluster from the Nautobot containers, remember to regenerate the <code>kubeconfig</code> file as described in the second step of this chapter.</p>
9169
- </div>
9170
- <p>To create a new Kind cluster:</p>
9171
- <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>kind<span class="w"> </span>create<span class="w"> </span>cluster<span class="w"> </span><span class="se">\</span>
9172
- <a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span>--name<span class="o">=</span>nautobot<span class="w"> </span><span class="se">\</span>
9173
- <a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span>--config<span class="o">=</span>development/kind-config.yaml<span class="w"> </span><span class="se">\</span>
9174
- <a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span>--kubeconfig<span class="o">=</span>./development/kind-kube-config
9380
+ <p>Next you need <a href="https://kubernetes.io/docs/reference/kubectl/"><code>kubectl</code></a> to interact with the new cluster you just created. See <a href="https://kubernetes.io/docs/tasks/tools/#kubectl">Kubernetes official documentation</a> on how to download <code>kubectl</code> for your respective operating system.</p>
9381
+ <p>Once you have <code>kubectl</code> downloaded and installed, run the following command to ensure the version you installed is up-to-date:</p>
9382
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>kubectl<span class="w"> </span>version<span class="w"> </span>--client
9175
9383
  </code></pre></div>
9176
- <p>Expected output shows the cluster is created:</p>
9177
- <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>Creating cluster &quot;nautobot&quot; ...
9178
- <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a> Ensuring node image (kindest/node:v1.31.0) 🖼
9179
- <a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a> ✓ Preparing nodes 📦
9180
- <a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> ✓ Writing configuration 📜
9181
- <a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a> ✓ Starting control-plane 🕹️
9182
- <a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a> ✓ Installing CNI 🔌
9183
- <a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a> ✓ Installing StorageClass 💾
9184
- <a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a>Set kubectl context to &quot;kind-nautobot&quot;
9185
- <a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a>You can now use your cluster with:
9186
- <a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a>
9187
- <a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a>kubectl cluster-info --context kind-nautobot
9188
- <a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a>
9189
- <a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a>Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
9384
+ <p>You should see the following output:</p>
9385
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>Client<span class="w"> </span>Version:<span class="w"> </span>v1.31.2
9386
+ <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>Kustomize<span class="w"> </span>Version:<span class="w"> </span>v5.4.2
9190
9387
  </code></pre></div>
9191
- <p>To regenerate the <code>kubeconfig</code> file with an internal cluster IP address for access from connected Nautobot containers, run the following command:</p>
9192
- <div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>kind<span class="w"> </span>get<span class="w"> </span>kubeconfig<span class="w"> </span><span class="se">\</span>
9193
- <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span>--internal<span class="w"> </span><span class="se">\</span>
9194
- <a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span>--name<span class="o">=</span>nautobot<span class="w"> </span><span class="se">\</span>
9195
- <a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="w"> </span>&gt;<span class="w"> </span>./development/kind-kube-config
9388
+ <p>You also need to check if your default service account is enabled to create jobs, you can check the permission by executing the following command:</p>
9389
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>kubectl<span class="w"> </span>auth<span class="w"> </span>can-i<span class="w"> </span>--as<span class="o">=</span>system:serviceaccount:default:default<span class="w"> </span>create<span class="w"> </span><span class="nb">jobs</span><span class="w"> </span>-n<span class="w"> </span>default
9196
9390
  </code></pre></div>
9197
- <h2 id="connecting-nautobot-containers">Connecting Nautobot Containers<a class="headerlink" href="#connecting-nautobot-containers" title="Permanent link">&para;</a></h2>
9198
- <p>This chapter will help you connect running Nautobot containers to the Kind network.</p>
9199
- <div class="admonition note">
9200
- <p class="admonition-title">Note</p>
9201
- <p>These steps needs to be done every time you start the Nautobot containers.</p>
9202
- </div>
9203
- <p>Verify Nautobot containers are running:</p>
9204
- <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="c1"># Start Nautobot containers if they are not running</span>
9205
- <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>invoke<span class="w"> </span>start
9206
- <a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a>
9207
- <a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="c1"># Verify the containers are running</span>
9208
- <a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a>docker<span class="w"> </span>ps
9391
+ <p>If the output from the above command is <code>yes</code>, then you are all good to go. However, if the output is <code>no</code>, then you will need to create a role binding to grant the default user appropriate permissions. You can achieve this by running the following command:</p>
9392
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>kubectl<span class="w"> </span>create<span class="w"> </span>rolebinding<span class="w"> </span>admin-namespace-default-new<span class="w"> </span>--clusterrole<span class="o">=</span>admin<span class="w"> </span>--serviceaccount<span class="o">=</span>default:default<span class="w"> </span>--namespace<span class="o">=</span>default
9209
9393
  </code></pre></div>
9210
- <div class="admonition info">
9211
- <p class="admonition-title">Info</p>
9212
- <p>In this example, we are connecting the <code>nautobot</code> and <code>celery_worker</code> containers to the Kind network to allow access to the Kind cluster from these containers during development. Connecting the <code>celery_worker</code> container is necessary if you want to run Nautobot Jobs that access the Kind Kubernetes cluster.</p>
9213
- </div>
9214
- <p>You should see <code>nautobot-nautobot-1</code> and <code>nautobot-celery_worker-1</code> containers running and in a healthy state:</p>
9215
- <div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9216
- <a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>...
9217
- <a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a>1f191e104357 local/nautobot-dev:local-py3.11 &quot;watchmedo auto-rest…&quot; 2 minutes ago Up 37 seconds (healthy) 0.0.0.0:8081-&gt;8080/tcp, [::]:8081-&gt;8080/tcp nautobot-celery_worker-1
9218
- <a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a>d396ed398a4c local/nautobot-dev:local-py3.11 &quot;/docker-entrypoint.…&quot; 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:8080-&gt;8080/tcp, :::8080-&gt;8080/tcp nautobot-nautobot-1
9219
- <a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a>...
9394
+ <p>This command will assign the admin role to your default service account in the namespace <code>default</code>. Check out Kubernetes <a href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/">RBAC authorization page</a> to learn how to create more granular role and permission assignments.</p>
9395
+ <p>You can run the <code>kubectl auth can-i --as=system:serviceaccount:default:default create jobs -n default</code> again and this time the output should be <code>yes</code>.</p>
9396
+ <h2 id="starting-required-deployments">Starting Required Deployments<a class="headerlink" href="#starting-required-deployments" title="Permanent link">&para;</a></h2>
9397
+ <h3 id="check-required-files">Check Required Files<a class="headerlink" href="#check-required-files" title="Permanent link">&para;</a></h3>
9398
+ <p>If this is your first time installing <code>minikube</code> and creating a new cluster, there should be nothing running on the cluster yet. Assuming that your current working directory is in the <code>nautobot</code> folder, what you need to do is to confirm that you have all the deployment files that you need in the <code>/development/kubernetes</code> folder.</p>
9399
+ <p>You can confirm that by running the following command:</p>
9400
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>ls<span class="w"> </span>development/kubernetes
9220
9401
  </code></pre></div>
9221
- <p>Verify the Kind Docker network name is <code>kind</code>:</p>
9222
- <div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>docker<span class="w"> </span>network<span class="w"> </span>ls
9402
+ <p>You should see the following output:</p>
9403
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>celery-beat-deployment.yaml<span class="w"> </span>media-root-persistentvolumeclaim.yaml<span class="w"> </span>nautobot-service.yaml
9404
+ <a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>db-deployment.yaml<span class="w"> </span>nautobot-cm1-configmap.yaml<span class="w"> </span>pgdata-nautobot-persistentvolumeclaim.yaml
9405
+ <a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a>db-service.yaml<span class="w"> </span>nautobot-cm2-configmap.yaml<span class="w"> </span>redis-deployment.yaml
9406
+ <a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a>dev-env-configmap.yaml<span class="w"> </span>nautobot-deployment.yaml<span class="w"> </span>redis-service.yaml
9407
+ <a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a>docker-compose.min.yml
9223
9408
  </code></pre></div>
9224
- <p>You should see all networks, including the <code>kind</code> network.</p>
9225
- <div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>NETWORK ID NAME DRIVER SCOPE
9226
- <a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>...
9227
- <a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>6de64b53be75 kind bridge local
9228
- <a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a>...
9409
+ <p>You should see several yaml files with post-fixes like <code>*-deployment.yaml</code>, <code>*-service.yaml</code>, <code>*-persistentvolumeclaim.yaml</code>, and <code>*-configmap.yaml</code>.</p>
9410
+ <h3 id="build-an-up-to-date-nautobot-docker-image">Build an up-to-date Nautobot Docker Image<a class="headerlink" href="#build-an-up-to-date-nautobot-docker-image" title="Permanent link">&para;</a></h3>
9411
+ <p>An up-to-date Nautobot local Docker image named <code>local/nautobot-dev:local-${NAUTOBOT_VER}-py${PYTHON_VER}</code> is required before you start building your kubernetes deployments. The default <code>NAUTOBOT_VER</code> is set to <code>2.4</code> and the default <code>PYTHON_VER</code> is set to <code>3.12</code>. If you have a different version for either variable, you will need to replace every occurrence of <code>local/nautobot-dev:local-2.4-py3.12</code> in all of the <code>development/kubernetes/*.yaml</code> files to make sure that <code>minikube</code> picks up the correct local Nautobot image from your Docker environment.</p>
9412
+ <p>Run the following command to point your terminal to use the docker daemon inside minikube. This will ensure that your up-to-date local image named <code>local/nautobot-final-dev:local-${NAUTOBOT_VER}-py${PYTHON_VER}</code> is used when you build your kubernetes deployments.</p>
9413
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="nb">eval</span><span class="w"> </span><span class="k">$(</span>minikube<span class="w"> </span>docker-env<span class="k">)</span>
9229
9414
  </code></pre></div>
9230
- <p>Connect running Nautobot containers to the Kind network:</p>
9231
- <div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>docker<span class="w"> </span>network<span class="w"> </span>connect<span class="w"> </span>kind<span class="w"> </span>nautobot-nautobot-1
9232
- <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>docker<span class="w"> </span>network<span class="w"> </span>connect<span class="w"> </span>kind<span class="w"> </span>nautobot-celery_worker-1
9415
+ <p>Now you can build your nautobot image locally using the <code>invoke build</code> command. After the build is complete, you are ready to build your kubernetes deployments.</p>
9416
+ <h3 id="starting-the-deployments-and-services">Starting the Deployments and Services<a class="headerlink" href="#starting-the-deployments-and-services" title="Permanent link">&para;</a></h3>
9417
+ <p>Once you have confirmed that you have all the files listed above. You can start the required deployments and services:</p>
9418
+ <p>To start all deployments:</p>
9419
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span><span class="s2">&quot;development/kubernetes/*-deployment.yaml&quot;</span>
9233
9420
  </code></pre></div>
9234
- <p>Now the selected Nautobot containers are connected to the Kind network and can access the Kind Kubernetes cluster.</p>
9235
- <h2 id="using-kubectl">Using <code>kubectl</code><a class="headerlink" href="#using-kubectl" title="Permanent link">&para;</a></h2>
9236
- <p>To access the Kind Kubernetes cluster from the Nautobot container, you can use <code>kubectl</code> CLI tool.</p>
9237
- <div class="admonition note">
9238
- <p class="admonition-title">Note</p>
9239
- <p>If you just want to use Python scripts to interact with the cluster, you can skip this chapter. However, it's recommended to install <code>kubectl</code> as it is a powerful tool for interacting with the Kubernetes cluster for debugging and testing.</p>
9240
- </div>
9241
- <p>To verify the connection from Nautobot container to the Kind cluster:</p>
9242
- <div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="c1"># Open shell in the running Nautobot container</span>
9243
- <a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>invoke<span class="w"> </span>cli
9244
- <a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a>
9245
- <a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a><span class="c1"># Install kubectl</span>
9246
- <a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a>apt<span class="w"> </span>update
9247
- <a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a>apt<span class="w"> </span>install<span class="w"> </span>kubernetes-client
9248
- <a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a>
9249
- <a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a><span class="c1"># Test the connection</span>
9250
- <a id="__codelineno-10-9" name="__codelineno-10-9" href="#__codelineno-10-9"></a><span class="nb">export</span><span class="w"> </span><span class="nv">KUBECONFIG</span><span class="o">=</span>/source/development/kind-kube-config
9251
- <a id="__codelineno-10-10" name="__codelineno-10-10" href="#__codelineno-10-10"></a>kubectl<span class="w"> </span>cluster-info
9421
+ <p>You should see the following output:</p>
9422
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>deployment.apps/celery-beat<span class="w"> </span>created
9423
+ <a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>deployment.apps/db<span class="w"> </span>created
9424
+ <a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a>deployment.apps/nautobot<span class="w"> </span>created
9425
+ <a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a>deployment.apps/redis<span class="w"> </span>created
9426
+ </code></pre></div>
9427
+ <p>You can confirm the health of the deployment by running the following command:</p>
9428
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>kubectl<span class="w"> </span>get<span class="w"> </span>deployments
9252
9429
  </code></pre></div>
9253
9430
  <p>You should see the following output:</p>
9254
- <div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>Kubernetes control plane is running at https://nautobot-control-plane:6443
9255
- <a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a>CoreDNS is running at https://nautobot-control-plane:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
9256
- <a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a>
9257
- <a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a>To further debug and diagnose cluster problems, use &#39;kubectl cluster-info dump&#39;.
9431
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>NAME<span class="w"> </span>READY<span class="w"> </span>UP-TO-DATE<span class="w"> </span>AVAILABLE<span class="w"> </span>AGE
9432
+ <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>celery-beat<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>12m
9433
+ <a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a>db<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>12m
9434
+ <a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a>nautobot<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>12m
9435
+ <a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a>redis<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>14m
9258
9436
  </code></pre></div>
9259
- <h2 id="running-a-test-job">Running a Test Job<a class="headerlink" href="#running-a-test-job" title="Permanent link">&para;</a></h2>
9260
- <p>You can verify the connection by creating the testing Kubernetes job:</p>
9261
- <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>invoke<span class="w"> </span>cli
9262
- <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a>
9263
- <a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="nb">export</span><span class="w"> </span><span class="nv">KUBECONFIG</span><span class="o">=</span>/source/development/kind-kube-config
9264
- <a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a>./development/create_k8s_job.py
9437
+ <p>To start all services:</p>
9438
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span><span class="s2">&quot;development/kubernetes/*-service.yaml&quot;</span>
9265
9439
  </code></pre></div>
9266
- <div class="admonition note">
9267
- <p class="admonition-title">Note</p>
9268
- <p>For the following steps, the <code>kubectl</code> CLI tool must be installed as described in the previous chapter.</p>
9269
- </div>
9270
- <p>To verify the job is running.</p>
9271
- <div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>kubectl<span class="w"> </span>get<span class="w"> </span>job
9440
+ <p>You should see the following output:</p>
9441
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>service/db<span class="w"> </span>created
9442
+ <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>service/nautobot<span class="w"> </span>created
9443
+ <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a>service/redis<span class="w"> </span>created
9444
+ </code></pre></div>
9445
+ <p>You can confirm the health of the each service by running the following command:</p>
9446
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>kubectl<span class="w"> </span>get<span class="w"> </span>services
9272
9447
  </code></pre></div>
9273
9448
  <p>You should see the following output:</p>
9274
- <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>NAME STATUS COMPLETIONS DURATION AGE
9275
- <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>demo-job Running 0/1 6s 6s
9449
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>NAME<span class="w"> </span>TYPE<span class="w"> </span>CLUSTER-IP<span class="w"> </span>EXTERNAL-IP<span class="w"> </span>PORT<span class="o">(</span>S<span class="o">)</span><span class="w"> </span>AGE
9450
+ <a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a>db<span class="w"> </span>ClusterIP<span class="w"> </span><span class="m">10</span>.111.0.30<span class="w"> </span>&lt;none&gt;<span class="w"> </span><span class="m">5432</span>/TCP<span class="w"> </span>12m
9451
+ <a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a>kubernetes<span class="w"> </span>ClusterIP<span class="w"> </span><span class="m">10</span>.96.0.1<span class="w"> </span>&lt;none&gt;<span class="w"> </span><span class="m">443</span>/TCP<span class="w"> </span>12m
9452
+ <a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a>nautobot<span class="w"> </span>ClusterIP<span class="w"> </span><span class="m">10</span>.106.32.53<span class="w"> </span>&lt;none&gt;<span class="w"> </span><span class="m">8080</span>/TCP<span class="w"> </span>12m
9453
+ <a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a>redis<span class="w"> </span>ClusterIP<span class="w"> </span><span class="m">10</span>.102.99.143<span class="w"> </span>&lt;none&gt;<span class="w"> </span><span class="m">6379</span>/TCP<span class="w"> </span>12m
9276
9454
  </code></pre></div>
9277
- <div class="admonition info">
9278
- <p class="admonition-title">Info</p>
9279
- <p>The job will run for 10 seconds and then complete.</p>
9280
- </div>
9281
- <p>You can check the logs of the job:</p>
9282
- <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>kubectl<span class="w"> </span>logs<span class="w"> </span>job/demo-job<span class="w"> </span>--follow
9455
+ <h3 id="starting-the-configuration-maps-and-persistent-volume-claims">Starting the Configuration Maps and Persistent Volume Claims<a class="headerlink" href="#starting-the-configuration-maps-and-persistent-volume-claims" title="Permanent link">&para;</a></h3>
9456
+ <p>Once you have started all deployments and services. You can start the required configuration maps and persistent volume claims:</p>
9457
+ <p>To start all configuration maps:</p>
9458
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span><span class="s2">&quot;development/kubernetes/*-configmap.yaml&quot;</span>
9459
+ </code></pre></div>
9460
+ <p>You should see the following output:</p>
9461
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>configmap/dev-env<span class="w"> </span>created
9462
+ <a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a>configmap/nautobot-cm1<span class="w"> </span>created
9463
+ <a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a>configmap/nautobot-cm2<span class="w"> </span>created
9283
9464
  </code></pre></div>
9284
- <p>Expected output:</p>
9285
- <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>Hello, Kubernetes!
9465
+ <p>You can confirm that those configuration maps are created by running the following command:</p>
9466
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>kubectl<span class="w"> </span>get<span class="w"> </span>configmaps
9286
9467
  </code></pre></div>
9287
- <div class="admonition warning">
9288
- <p class="admonition-title">Warning</p>
9289
- <p>You should delete the job after you are done with it, to be able to run the script again.</p>
9290
- </div>
9291
- <p>To delete the job:</p>
9292
- <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>kubectl<span class="w"> </span>delete<span class="w"> </span>job<span class="w"> </span>demo-job
9468
+ <p>You should see the following output:</p>
9469
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>NAME<span class="w"> </span>DATA<span class="w"> </span>AGE
9470
+ <a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a>dev-env<span class="w"> </span><span class="m">32</span><span class="w"> </span>24s
9471
+ <a id="__codelineno-20-3" name="__codelineno-20-3" href="#__codelineno-20-3"></a>nautobot-cm1<span class="w"> </span><span class="m">1</span><span class="w"> </span>24s
9472
+ <a id="__codelineno-20-4" name="__codelineno-20-4" href="#__codelineno-20-4"></a>nautobot-cm2<span class="w"> </span><span class="m">1</span><span class="w"> </span>24s
9473
+ </code></pre></div>
9474
+ <p>To start all persistent volume claims:</p>
9475
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a>kubectl<span class="w"> </span>apply<span class="w"> </span>-f<span class="w"> </span><span class="s2">&quot;development/kubernetes/*-persistentvolumeclaim.yaml&quot;</span>
9476
+ </code></pre></div>
9477
+ <p>You should see the following output:</p>
9478
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a>persistentvolumeclaim/media-root<span class="w"> </span>created
9479
+ <a id="__codelineno-22-2" name="__codelineno-22-2" href="#__codelineno-22-2"></a>persistentvolumeclaim/pgdata-nautobot<span class="w"> </span>created
9480
+ </code></pre></div>
9481
+ <p>You can confirm that those persistent volume claims are created by running the following command:</p>
9482
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a>kubectl<span class="w"> </span>get<span class="w"> </span>persistentvolumeclaims
9483
+ </code></pre></div>
9484
+ <p>You should see the following output:</p>
9485
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a>NAME<span class="w"> </span>STATUS<span class="w"> </span>VOLUME<span class="w"> </span>CAPACITY<span class="w"> </span>ACCESS<span class="w"> </span>MODES<span class="w"> </span>STORAGECLASS<span class="w"> </span>VOLUMEATTRIBUTESCLASS<span class="w"> </span>AGE
9486
+ <a id="__codelineno-24-2" name="__codelineno-24-2" href="#__codelineno-24-2"></a>media-root<span class="w"> </span>Bound<span class="w"> </span>pvc-011f484b-2ccf-4fe0-953b-289a13ad0480<span class="w"> </span>200Mi<span class="w"> </span>RWO<span class="w"> </span>standard<span class="w"> </span>&lt;unset&gt;<span class="w"> </span>2m35s
9487
+ <a id="__codelineno-24-3" name="__codelineno-24-3" href="#__codelineno-24-3"></a>pgdata-nautobot<span class="w"> </span>Bound<span class="w"> </span>pvc-5954eb3f-75e3-4f6b-9b9c-a91e40ea96bf<span class="w"> </span>200Mi<span class="w"> </span>RWO<span class="w"> </span>standard<span class="w"> </span>&lt;unset&gt;<span class="w"> </span>2m35s
9488
+ </code></pre></div>
9489
+ <p>To confirm all required kubernetes entities are up and running, run the following command:</p>
9490
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>kubectl<span class="w"> </span>get<span class="w"> </span>all
9491
+ </code></pre></div>
9492
+ <p>You should see the following output, note that pods are automatically created when you create deployments:</p>
9493
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a>NAME<span class="w"> </span>READY<span class="w"> </span>STATUS<span class="w"> </span>RESTARTS<span class="w"> </span>AGE
9494
+ <a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a>pod/celery-beat-6fb67477b7-rsw62<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>30m
9495
+ <a id="__codelineno-26-3" name="__codelineno-26-3" href="#__codelineno-26-3"></a>pod/db-8687b48964-gtvtc<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>30m
9496
+ <a id="__codelineno-26-4" name="__codelineno-26-4" href="#__codelineno-26-4"></a>pod/nautobot-679bdc765-pl2ld<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>30m
9497
+ <a id="__codelineno-26-5" name="__codelineno-26-5" href="#__codelineno-26-5"></a>pod/redis-7cc58577c-tl5sq<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>30m
9498
+ <a id="__codelineno-26-6" name="__codelineno-26-6" href="#__codelineno-26-6"></a>
9499
+ <a id="__codelineno-26-7" name="__codelineno-26-7" href="#__codelineno-26-7"></a>NAME<span class="w"> </span>TYPE<span class="w"> </span>CLUSTER-IP<span class="w"> </span>EXTERNAL-IP<span class="w"> </span>PORT<span class="o">(</span>S<span class="o">)</span><span class="w"> </span>AGE
9500
+ <a id="__codelineno-26-8" name="__codelineno-26-8" href="#__codelineno-26-8"></a>service/db<span class="w"> </span>ClusterIP<span class="w"> </span><span class="m">10</span>.111.0.30<span class="w"> </span>&lt;none&gt;<span class="w"> </span><span class="m">5432</span>/TCP<span class="w"> </span>30m
9501
+ <a id="__codelineno-26-9" name="__codelineno-26-9" href="#__codelineno-26-9"></a>service/kubernetes<span class="w"> </span>ClusterIP<span class="w"> </span><span class="m">10</span>.96.0.1<span class="w"> </span>&lt;none&gt;<span class="w"> </span><span class="m">443</span>/TCP<span class="w"> </span>30m
9502
+ <a id="__codelineno-26-10" name="__codelineno-26-10" href="#__codelineno-26-10"></a>service/nautobot<span class="w"> </span>ClusterIP<span class="w"> </span><span class="m">10</span>.106.32.53<span class="w"> </span>&lt;none&gt;<span class="w"> </span><span class="m">8080</span>/TCP<span class="w"> </span>30m
9503
+ <a id="__codelineno-26-11" name="__codelineno-26-11" href="#__codelineno-26-11"></a>service/redis<span class="w"> </span>ClusterIP<span class="w"> </span><span class="m">10</span>.102.99.143<span class="w"> </span>&lt;none&gt;<span class="w"> </span><span class="m">6379</span>/TCP<span class="w"> </span>30m
9504
+ <a id="__codelineno-26-12" name="__codelineno-26-12" href="#__codelineno-26-12"></a>
9505
+ <a id="__codelineno-26-13" name="__codelineno-26-13" href="#__codelineno-26-13"></a>NAME<span class="w"> </span>READY<span class="w"> </span>UP-TO-DATE<span class="w"> </span>AVAILABLE<span class="w"> </span>AGE
9506
+ <a id="__codelineno-26-14" name="__codelineno-26-14" href="#__codelineno-26-14"></a>deployment.apps/celery-beat<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>30m
9507
+ <a id="__codelineno-26-15" name="__codelineno-26-15" href="#__codelineno-26-15"></a>deployment.apps/db<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>30m
9508
+ <a id="__codelineno-26-16" name="__codelineno-26-16" href="#__codelineno-26-16"></a>deployment.apps/nautobot<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>30m
9509
+ <a id="__codelineno-26-17" name="__codelineno-26-17" href="#__codelineno-26-17"></a>deployment.apps/redis<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>30m
9510
+ </code></pre></div>
9511
+ <h3 id="port-forward-to-local-host">Port Forward to Local Host<a class="headerlink" href="#port-forward-to-local-host" title="Permanent link">&para;</a></h3>
9512
+ <p>You can use the <code>port-forward</code> command from <code>kubectl</code> to make your Nautobot instance on the kubernetes cluster accessible in <code>localhost:8080</code>:</p>
9513
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a>kubectl<span class="w"> </span>port-forward<span class="w"> </span>&lt;nautobot-pod-name&gt;<span class="w"> </span><span class="m">8080</span>:8080
9514
+ </code></pre></div>
9515
+ <p>The output should be:</p>
9516
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a>Forwarding<span class="w"> </span>from<span class="w"> </span><span class="m">127</span>.0.0.1:8080<span class="w"> </span>-&gt;<span class="w"> </span><span class="m">8080</span>
9517
+ <a id="__codelineno-28-2" name="__codelineno-28-2" href="#__codelineno-28-2"></a>Forwarding<span class="w"> </span>from<span class="w"> </span><span class="o">[</span>::1<span class="o">]</span>:8080<span class="w"> </span>-&gt;<span class="w"> </span><span class="m">8080</span>
9518
+ <a id="__codelineno-28-3" name="__codelineno-28-3" href="#__codelineno-28-3"></a>Handling<span class="w"> </span>connection<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="m">8080</span>
9519
+ </code></pre></div>
9520
+ <p>Now go to your web browser and navigate to <code>localhost:8080</code>. You should see your Nautobot instance running.</p>
9521
+ <p><img alt="K8s Nautobot Login" src="../../media/development/core/kubernetes/k8s_nautobot_login.png" /></p>
9522
+ <h2 id="run-a-kubernetes-job">Run a Kubernetes Job<a class="headerlink" href="#run-a-kubernetes-job" title="Permanent link">&para;</a></h2>
9523
+ <h3 id="configure-a-new-job-queue-of-type-kubernetes">Configure a New Job Queue of Type Kubernetes<a class="headerlink" href="#configure-a-new-job-queue-of-type-kubernetes" title="Permanent link">&para;</a></h3>
9524
+ <p>Go to the Navigation bar on your left hand side and look at the Jobs Section. You should see Job Queues at the very end of the section. Click on the plus button next to the Job Queues entry and this will take you to a form for creating a new job queue.</p>
9525
+ <p><img alt="K8s Job Queue Add" src="../../media/development/core/kubernetes/k8s_job_queue_add.png" /></p>
9526
+ <p>You can give the name "kubernetes" to the new job queue and select "Kubernetes" from the Queue Type dropdown.</p>
9527
+ <p><img alt="K8s Job Queue Config" src="../../media/development/core/kubernetes/k8s_job_queue_config.png" /></p>
9528
+ <p>Scroll down and click on the create button. A new Job Queue with name "kubernetes" and with type Kubernetes should be created.</p>
9529
+ <p><img alt="K8s Job Queue Detail" src="../../media/development/core/kubernetes/k8s_job_queue.png" /></p>
9530
+ <h3 id="assign-that-job-queue-to-a-job">Assign that Job Queue to a Job<a class="headerlink" href="#assign-that-job-queue-to-a-job" title="Permanent link">&para;</a></h3>
9531
+ <p>Go to a Job's edit form and assign the newly created kubernetes job queue to the job. You will be using the "Export Object List" system job here.</p>
9532
+ <p><img alt="K8s Job Edit Button" src="../../media/development/core/kubernetes/k8s_job_edit_button.png" /></p>
9533
+ <p>Check the override default value checkbox on the <code>Job Queues</code> field and select the kubernetes job queue from the dropdown.
9534
+ Check the override default value checkbox on the <code>Default Job Queue</code> field and select the kubernetes job queue from the dropdown.</p>
9535
+ <p><img alt="K8s Job Edit" src="../../media/development/core/kubernetes/k8s_job_edit.png" /></p>
9536
+ <p>Click on the update button when you are finished.</p>
9537
+ <h3 id="run-the-job">Run the Job<a class="headerlink" href="#run-the-job" title="Permanent link">&para;</a></h3>
9538
+ <p>After clicking on the update button after the previous step, you should be redirected to the table of jobs. Click on the link that says "Export Object List". This should take you to the Job Run Form.</p>
9539
+ <p><img alt="K8s Run Job" src="../../media/development/core/kubernetes/k8s_run_job.png" /></p>
9540
+ <p>Select an option for the Content Type field dropdown and notice that the Job queue is already filled out with the kubernetes job queue that you assigned to this job from previous steps. So you do not need to make any changes there.</p>
9541
+ <p><img alt="K8s Run Job Form" src="../../media/development/core/kubernetes/k8s_job_run_form.png" /></p>
9542
+ <p>Click on the "Run Job Now" button and you should be directed to the job result page.</p>
9543
+ <p><img alt="K8s Job Result Pending" src="../../media/development/core/kubernetes/k8s_job_result_pending.png" /></p>
9544
+ <h3 id="inspect-the-job-result">Inspect the Job Result<a class="headerlink" href="#inspect-the-job-result" title="Permanent link">&para;</a></h3>
9545
+ <p>You can inspect the job result and the job logs in this page. Notice the two job log entries that reads something like "Creating job pod (pod-name) in namespace default" and "Reading job pod (pod-name) in namespace default". Those entries indicate that a Kubernetes Job pod was executing the job for you.</p>
9546
+ <p><img alt="K8s Job Result Completed" src="../../media/development/core/kubernetes/k8s_job_result_completed.png" /></p>
9547
+ <h3 id="running-a-scheduled-job">Running a Scheduled Job<a class="headerlink" href="#running-a-scheduled-job" title="Permanent link">&para;</a></h3>
9548
+ <p>You can run scheduled jobs as well. In order to run scheduled jobs, you do need celery beat which should already be running from previous steps. To confirm that the celery beat is running, you need to retrieve the celery beat pod name by running the command <code>kubectl get pods</code>. You should see the following output or something similar, copy the pod name with prefix <code>celery-beat-*</code>.</p>
9549
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a>NAME<span class="w"> </span>READY<span class="w"> </span>STATUS<span class="w"> </span>RESTARTS<span class="w"> </span>AGE
9550
+ <a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a>celery-beat-6fb67477b7-rsw62<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>10m
9551
+ <a id="__codelineno-29-3" name="__codelineno-29-3" href="#__codelineno-29-3"></a>db-8687b48964-gtvtc<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>10m
9552
+ <a id="__codelineno-29-4" name="__codelineno-29-4" href="#__codelineno-29-4"></a>nautobot-679bdc765-pl2ld<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>10m
9553
+ <a id="__codelineno-29-5" name="__codelineno-29-5" href="#__codelineno-29-5"></a>redis-7cc58577c-tl5sq<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>10m
9554
+ </code></pre></div>
9555
+ <p>you can run the command <code>kubectl logs &lt;celery-beat-pod-name&gt; -f</code> and you should see the following output or something similar:</p>
9556
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a>LocalTime<span class="w"> </span>-&gt;<span class="w"> </span><span class="m">2024</span>-11-20<span class="w"> </span><span class="m">18</span>:49:41
9557
+ <a id="__codelineno-30-2" name="__codelineno-30-2" href="#__codelineno-30-2"></a>Configuration<span class="w"> </span>-&gt;
9558
+ <a id="__codelineno-30-3" name="__codelineno-30-3" href="#__codelineno-30-3"></a><span class="w"> </span>.<span class="w"> </span>broker<span class="w"> </span>-&gt;<span class="w"> </span>redis://:**@redis:6379/0
9559
+ <a id="__codelineno-30-4" name="__codelineno-30-4" href="#__codelineno-30-4"></a><span class="w"> </span>.<span class="w"> </span>loader<span class="w"> </span>-&gt;<span class="w"> </span>celery.loaders.app.AppLoader
9560
+ <a id="__codelineno-30-5" name="__codelineno-30-5" href="#__codelineno-30-5"></a><span class="w"> </span>.<span class="w"> </span>scheduler<span class="w"> </span>-&gt;<span class="w"> </span>nautobot.core.celery.schedulers.NautobotDatabaseScheduler
9561
+ <a id="__codelineno-30-6" name="__codelineno-30-6" href="#__codelineno-30-6"></a>
9562
+ <a id="__codelineno-30-7" name="__codelineno-30-7" href="#__codelineno-30-7"></a><span class="w"> </span>.<span class="w"> </span>logfile<span class="w"> </span>-&gt;<span class="w"> </span><span class="o">[</span>stderr<span class="o">]</span>@%INFO
9563
+ <a id="__codelineno-30-8" name="__codelineno-30-8" href="#__codelineno-30-8"></a><span class="w"> </span>.<span class="w"> </span>maxinterval<span class="w"> </span>-&gt;<span class="w"> </span><span class="m">5</span>.00<span class="w"> </span>seconds<span class="w"> </span><span class="o">(</span>5s<span class="o">)</span>
9564
+ <a id="__codelineno-30-9" name="__codelineno-30-9" href="#__codelineno-30-9"></a><span class="o">[</span><span class="m">2024</span>-11-20<span class="w"> </span><span class="m">18</span>:49:41,161:<span class="w"> </span>INFO/MainProcess<span class="o">]</span><span class="w"> </span>beat:<span class="w"> </span>Starting...
9565
+ </code></pre></div>
9566
+ <p>Now you are going to create a new Scheduled Export Object List Job. Starting from Nautobot homepage, you can go to the Jobs dropdown on the left navigation menu and navigate to the job list view.</p>
9567
+ <p><img alt="K8s Job List Nav" src="../../media/development/core/kubernetes/k8s_job_list_nav.png" /></p>
9568
+ <p><img alt="K8s Job List View" src="../../media/development/core/kubernetes/k8s_job_list_view.png" /></p>
9569
+ <p>Click on the Run/Schedule link for Export Object List Job.</p>
9570
+ <p><img alt="K8s Run Job" src="../../media/development/core/kubernetes/k8s_run_job.png" /></p>
9571
+ <p>Fill in the data shown below (for the "Starting date and time" field, pick a date and time that is close to the current date and time) and click on the "Schedule Job" button on the bottom right.</p>
9572
+ <p><img alt="K8s Run Scheduled Job Form" src="../../media/development/core/kubernetes/k8s_run_scheduled_job_form.png" /></p>
9573
+ <p>To confirm that the Scheduled Job is running, you go back to the terminal that was logging celery beat. You should see the following logs or something similar:</p>
9574
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-31-1" name="__codelineno-31-1" href="#__codelineno-31-1"></a><span class="o">[</span><span class="m">2024</span>-11-21<span class="w"> </span><span class="m">02</span>:09:57,756:<span class="w"> </span>INFO/MainProcess<span class="o">]</span><span class="w"> </span>DatabaseScheduler:<span class="w"> </span>Schedule<span class="w"> </span>changed.
9575
+ <a id="__codelineno-31-2" name="__codelineno-31-2" href="#__codelineno-31-2"></a><span class="o">[</span><span class="m">2024</span>-11-21<span class="w"> </span><span class="m">02</span>:09:57,774:<span class="w"> </span>INFO/MainProcess<span class="o">]</span><span class="w"> </span>Scheduler:<span class="w"> </span>Sending<span class="w"> </span>due<span class="w"> </span>task<span class="w"> </span>Export<span class="w"> </span>Object<span class="w"> </span>List<span class="w"> </span>Hourly_85413d3f-1342-4adf-8d80-11e740ebb907<span class="w"> </span><span class="o">(</span>nautobot.extras.jobs.run_job<span class="o">)</span>
9576
+ <a id="__codelineno-31-3" name="__codelineno-31-3" href="#__codelineno-31-3"></a><span class="m">02</span>:09:57.782<span class="w"> </span>INFO<span class="w"> </span>nautobot.extras.utils<span class="w"> </span>utils.py<span class="w"> </span>run_kubernetes_job_and_return_job_result<span class="o">()</span><span class="w"> </span>:
9577
+ <a id="__codelineno-31-4" name="__codelineno-31-4" href="#__codelineno-31-4"></a><span class="w"> </span>Creating<span class="w"> </span>job<span class="w"> </span>pod<span class="w"> </span>nautobot-job<span class="w"> </span><span class="k">in</span><span class="w"> </span>namespace<span class="w"> </span>default
9578
+ <a id="__codelineno-31-5" name="__codelineno-31-5" href="#__codelineno-31-5"></a><span class="o">[</span><span class="m">2024</span>-11-21<span class="w"> </span><span class="m">02</span>:09:57,782:<span class="w"> </span>INFO/MainProcess<span class="o">]</span><span class="w"> </span>Creating<span class="w"> </span>job<span class="w"> </span>pod<span class="w"> </span>nautobot-job<span class="w"> </span><span class="k">in</span><span class="w"> </span>namespace<span class="w"> </span>default
9579
+ <a id="__codelineno-31-6" name="__codelineno-31-6" href="#__codelineno-31-6"></a><span class="m">02</span>:09:57.802<span class="w"> </span>INFO<span class="w"> </span>nautobot.extras.utils<span class="w"> </span>utils.py<span class="w"> </span>run_kubernetes_job_and_return_job_result<span class="o">()</span><span class="w"> </span>:
9580
+ <a id="__codelineno-31-7" name="__codelineno-31-7" href="#__codelineno-31-7"></a><span class="w"> </span>Reading<span class="w"> </span>job<span class="w"> </span>pod<span class="w"> </span>nautobot-job<span class="w"> </span><span class="k">in</span><span class="w"> </span>namespace<span class="w"> </span>default
9581
+ <a id="__codelineno-31-8" name="__codelineno-31-8" href="#__codelineno-31-8"></a><span class="o">[</span><span class="m">2024</span>-11-21<span class="w"> </span><span class="m">02</span>:09:57,802:<span class="w"> </span>INFO/MainProcess<span class="o">]</span><span class="w"> </span>Reading<span class="w"> </span>job<span class="w"> </span>pod<span class="w"> </span>nautobot-job<span class="w"> </span><span class="k">in</span><span class="w"> </span>namespace<span class="w"> </span>default
9582
+ <a id="__codelineno-31-9" name="__codelineno-31-9" href="#__codelineno-31-9"></a><span class="o">[</span><span class="m">2024</span>-11-21<span class="w"> </span><span class="m">02</span>:09:57,837:<span class="w"> </span>INFO/MainProcess<span class="o">]</span><span class="w"> </span>DatabaseScheduler:<span class="w"> </span>Schedule<span class="w"> </span>changed.
9583
+ </code></pre></div>
9584
+ <p>You can also confirm if the job is running or is completed by running <code>kubectl get jobs</code> and <code>kubectl get pods</code> in another terminal.</p>
9585
+ <p>Go back to your browser and click on the Job Results entry from the Jobs navigation menu.</p>
9586
+ <p><img alt="K8s Job Result Navigation" src="../../media/development/core/kubernetes/k8s_job_result_nav.png" /></p>
9587
+ <p>Inspect the Job Result</p>
9588
+ <p><img alt="K8s Scheduled Job Job Result" src="../../media/development/core/kubernetes/k8s_scheduled_job_result.png" /></p>
9589
+ <h2 id="after-running-a-job">After Running a Job<a class="headerlink" href="#after-running-a-job" title="Permanent link">&para;</a></h2>
9590
+ <p>Good news is that there is nothing for you to do after running a kubernetes job. The job pod with prefix <code>nautobot-job-pod-*</code> will clean up itself. Running <code>kubectl get pods</code> to confirm that <code>nautobot-job-pod-&lt;pod_id&gt;</code> no longer exists.</p>
9591
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a>NAME<span class="w"> </span>READY<span class="w"> </span>STATUS<span class="w"> </span>RESTARTS<span class="w"> </span>AGE
9592
+ <a id="__codelineno-32-2" name="__codelineno-32-2" href="#__codelineno-32-2"></a>celery-beat-6fb67477b7-rsw62<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>1h
9593
+ <a id="__codelineno-32-3" name="__codelineno-32-3" href="#__codelineno-32-3"></a>db-8687b48964-gtvtc<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>1h
9594
+ <a id="__codelineno-32-4" name="__codelineno-32-4" href="#__codelineno-32-4"></a>nautobot-679bdc765-pl2ld<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>1h
9595
+ <a id="__codelineno-32-5" name="__codelineno-32-5" href="#__codelineno-32-5"></a>redis-7cc58577c-tl5sq<span class="w"> </span><span class="m">1</span>/1<span class="w"> </span>Running<span class="w"> </span><span class="m">0</span><span class="w"> </span>1h
9293
9596
  </code></pre></div>
9294
- <h2 id="cleaning-up">Cleaning Up<a class="headerlink" href="#cleaning-up" title="Permanent link">&para;</a></h2>
9295
- <p>To clean up the Kind cluster and the <code>kubeconfig</code> file:</p>
9296
- <div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>kind<span class="w"> </span>delete<span class="w"> </span>cluster<span class="w"> </span>--name<span class="o">=</span>nautobot
9297
- <a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a>rm<span class="w"> </span>development/kind-kube-config
9597
+ <p>You can also run <code>kubectl get jobs</code> to confirm that <code>nautobot-job-&lt;pod_id&gt;</code> no longer exists as well.</p>
9598
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a>No<span class="w"> </span>resources<span class="w"> </span>found<span class="w"> </span><span class="k">in</span><span class="w"> </span>default<span class="w"> </span>namespace.
9298
9599
  </code></pre></div>
9299
9600
 
9300
9601
 
@@ -9442,7 +9743,7 @@
9442
9743
  <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>
9443
9744
 
9444
9745
 
9445
- <script src="../../assets/javascripts/bundle.83f73b43.min.js"></script>
9746
+ <script src="../../assets/javascripts/bundle.88dd0f4e.min.js"></script>
9446
9747
 
9447
9748
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
9448
9749