nautobot 2.2.3__py3-none-any.whl → 2.2.5__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 (327) hide show
  1. nautobot/circuits/forms.py +15 -0
  2. nautobot/circuits/navigation.py +9 -1
  3. nautobot/circuits/views.py +2 -0
  4. nautobot/core/filters.py +11 -0
  5. nautobot/core/settings.py +6 -4
  6. nautobot/core/settings.yaml +54 -19
  7. nautobot/core/templates/admin/base.html +2 -2
  8. nautobot/core/templates/base_django.html +2 -2
  9. nautobot/core/templates/buttons/export.html +47 -47
  10. nautobot/core/templates/inc/javascript.html +3 -0
  11. nautobot/core/templates/inc/media.html +3 -0
  12. nautobot/core/templates/login.html +2 -2
  13. nautobot/core/templates/nautobot_config.py.j2 +2 -0
  14. nautobot/core/testing/filters.py +24 -1
  15. nautobot/core/testing/views.py +13 -1
  16. nautobot/core/tests/test_jobs.py +79 -2
  17. nautobot/core/tests/test_views.py +33 -0
  18. nautobot/core/views/mixins.py +4 -0
  19. nautobot/core/views/utils.py +18 -1
  20. nautobot/dcim/filters/__init__.py +1 -1
  21. nautobot/dcim/forms.py +23 -4
  22. nautobot/dcim/tables/devicetypes.py +15 -4
  23. nautobot/dcim/tests/test_views.py +323 -55
  24. nautobot/dcim/views.py +26 -20
  25. nautobot/extras/api/serializers.py +17 -6
  26. nautobot/extras/api/views.py +2 -2
  27. nautobot/extras/context_managers.py +3 -0
  28. nautobot/extras/filters/__init__.py +15 -1
  29. nautobot/extras/forms/forms.py +33 -0
  30. nautobot/extras/forms/mixins.py +0 -6
  31. nautobot/extras/signals.py +6 -1
  32. nautobot/extras/tests/test_api.py +24 -2
  33. nautobot/extras/tests/test_context_managers.py +51 -1
  34. nautobot/extras/tests/test_filters.py +69 -0
  35. nautobot/extras/tests/test_forms.py +0 -3
  36. nautobot/extras/tests/test_views.py +48 -4
  37. nautobot/extras/utils.py +2 -1
  38. nautobot/extras/views.py +47 -31
  39. nautobot/ipam/forms.py +18 -0
  40. nautobot/ipam/tests/test_views.py +9 -2
  41. nautobot/ipam/views.py +17 -6
  42. nautobot/project-static/docs/404.html +107 -51
  43. nautobot/project-static/docs/apps/index.html +107 -51
  44. nautobot/project-static/docs/apps/nautobot-apps.html +107 -51
  45. nautobot/project-static/docs/assets/_mkdocstrings.css +6 -1
  46. nautobot/project-static/docs/assets/extra.css +7 -0
  47. nautobot/project-static/docs/assets/javascripts/bundle.ebd0bdb7.min.js +29 -0
  48. nautobot/project-static/docs/assets/javascripts/bundle.ebd0bdb7.min.js.map +7 -0
  49. nautobot/project-static/docs/assets/stylesheets/main.6543a935.min.css +1 -0
  50. nautobot/project-static/docs/assets/stylesheets/main.6543a935.min.css.map +1 -0
  51. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +107 -51
  52. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +107 -51
  53. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +107 -51
  54. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +107 -51
  55. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +107 -51
  56. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +107 -51
  57. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +107 -51
  58. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +107 -51
  59. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +107 -51
  60. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +107 -51
  61. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +107 -51
  62. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +107 -51
  63. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +107 -51
  64. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +107 -51
  65. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +107 -51
  66. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +107 -51
  67. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +107 -51
  68. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +107 -51
  69. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +107 -51
  70. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +107 -51
  71. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +107 -51
  72. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +107 -51
  73. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +107 -51
  74. nautobot/project-static/docs/development/apps/api/configuration-view.html +110 -54
  75. nautobot/project-static/docs/development/apps/api/database-backend-config.html +110 -54
  76. nautobot/project-static/docs/development/apps/api/models/django-admin.html +107 -51
  77. nautobot/project-static/docs/development/apps/api/models/global-search.html +110 -54
  78. nautobot/project-static/docs/development/apps/api/models/graphql.html +113 -57
  79. nautobot/project-static/docs/development/apps/api/models/index.html +107 -51
  80. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +113 -57
  81. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +107 -51
  82. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +111 -55
  83. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +107 -51
  84. nautobot/project-static/docs/development/apps/api/platform-features/index.html +107 -51
  85. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +110 -54
  86. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +110 -54
  87. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +110 -54
  88. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +110 -54
  89. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +107 -51
  90. nautobot/project-static/docs/development/apps/api/prometheus.html +110 -54
  91. nautobot/project-static/docs/development/apps/api/setup.html +107 -51
  92. nautobot/project-static/docs/development/apps/api/testing.html +113 -57
  93. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +110 -54
  94. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +110 -54
  95. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +107 -51
  96. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +107 -51
  97. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +113 -57
  98. nautobot/project-static/docs/development/apps/api/views/base-template.html +107 -51
  99. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +110 -54
  100. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +107 -51
  101. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +110 -54
  102. nautobot/project-static/docs/development/apps/api/views/index.html +107 -51
  103. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +113 -57
  104. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +122 -66
  105. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +110 -54
  106. nautobot/project-static/docs/development/apps/api/views/notes.html +110 -54
  107. nautobot/project-static/docs/development/apps/api/views/rest-api.html +107 -51
  108. nautobot/project-static/docs/development/apps/api/views/urls.html +107 -51
  109. nautobot/project-static/docs/development/apps/index.html +128 -72
  110. nautobot/project-static/docs/development/apps/migration/code-updates.html +107 -51
  111. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +107 -51
  112. nautobot/project-static/docs/development/apps/migration/from-v1.html +109 -53
  113. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +107 -51
  114. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +107 -51
  115. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +107 -51
  116. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +107 -51
  117. nautobot/project-static/docs/development/apps/porting-from-netbox.html +110 -54
  118. nautobot/project-static/docs/development/core/application-registry.html +120 -64
  119. nautobot/project-static/docs/development/core/best-practices.html +122 -66
  120. nautobot/project-static/docs/development/core/bootstrap-ui.html +107 -51
  121. nautobot/project-static/docs/development/core/caching.html +107 -51
  122. nautobot/project-static/docs/development/core/controllers.html +107 -51
  123. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +113 -57
  124. nautobot/project-static/docs/development/core/generic-views.html +110 -54
  125. nautobot/project-static/docs/development/core/getting-started.html +137 -81
  126. nautobot/project-static/docs/development/core/homepage.html +110 -54
  127. nautobot/project-static/docs/development/core/index.html +107 -51
  128. nautobot/project-static/docs/development/core/model-checklist.html +107 -51
  129. nautobot/project-static/docs/development/core/model-features.html +107 -51
  130. nautobot/project-static/docs/development/core/natural-keys.html +110 -54
  131. nautobot/project-static/docs/development/core/navigation-menu.html +107 -51
  132. nautobot/project-static/docs/development/core/release-checklist.html +107 -51
  133. nautobot/project-static/docs/development/core/role-internals.html +107 -51
  134. nautobot/project-static/docs/development/core/settings.html +107 -51
  135. nautobot/project-static/docs/development/core/style-guide.html +110 -54
  136. nautobot/project-static/docs/development/core/templates.html +113 -57
  137. nautobot/project-static/docs/development/core/testing.html +126 -70
  138. nautobot/project-static/docs/development/core/user-preferences.html +107 -51
  139. nautobot/project-static/docs/development/index.html +107 -51
  140. nautobot/project-static/docs/development/jobs/index.html +173 -117
  141. nautobot/project-static/docs/development/jobs/migration/from-v1.html +110 -54
  142. nautobot/project-static/docs/docker/index.html +3 -3
  143. nautobot/project-static/docs/index.html +125 -69
  144. nautobot/project-static/docs/installation/selinux-troubleshooting.html +3 -3
  145. nautobot/project-static/docs/release-notes/index.html +107 -51
  146. nautobot/project-static/docs/release-notes/version-1.0.html +108 -52
  147. nautobot/project-static/docs/release-notes/version-1.1.html +107 -51
  148. nautobot/project-static/docs/release-notes/version-1.2.html +109 -53
  149. nautobot/project-static/docs/release-notes/version-1.3.html +108 -52
  150. nautobot/project-static/docs/release-notes/version-1.4.html +109 -53
  151. nautobot/project-static/docs/release-notes/version-1.5.html +118 -62
  152. nautobot/project-static/docs/release-notes/version-1.6.html +721 -285
  153. nautobot/project-static/docs/release-notes/version-2.0.html +113 -57
  154. nautobot/project-static/docs/release-notes/version-2.1.html +107 -51
  155. nautobot/project-static/docs/release-notes/version-2.2.html +503 -120
  156. nautobot/project-static/docs/requirements.txt +4 -4
  157. nautobot/project-static/docs/search/search_index.json +1 -1
  158. nautobot/project-static/docs/sitemap.xml +262 -262
  159. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  160. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +107 -51
  161. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +107 -51
  162. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +109 -53
  163. nautobot/project-static/docs/user-guide/administration/configuration/index.html +108 -52
  164. nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +254 -167
  165. nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +113 -57
  166. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +107 -51
  167. nautobot/project-static/docs/user-guide/administration/guides/caching.html +113 -57
  168. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +107 -51
  169. nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +107 -51
  170. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +107 -51
  171. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +113 -57
  172. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +108 -52
  173. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +107 -51
  174. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +107 -51
  175. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +171 -112
  176. nautobot/project-static/docs/user-guide/administration/installation/docker.html +13 -8626
  177. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +117 -61
  178. nautobot/project-static/docs/user-guide/administration/installation/health-checks.html +13 -8614
  179. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +252 -165
  180. nautobot/project-static/docs/user-guide/administration/installation/index.html +165 -192
  181. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +411 -691
  182. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +249 -230
  183. nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +13 -8118
  184. nautobot/project-static/docs/user-guide/administration/installation/services.html +351 -241
  185. nautobot/project-static/docs/user-guide/administration/installation-extras/docker.html +8684 -0
  186. nautobot/project-static/docs/user-guide/administration/installation-extras/health-checks.html +8672 -0
  187. nautobot/project-static/docs/user-guide/administration/installation-extras/selinux-troubleshooting.html +8176 -0
  188. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +110 -54
  189. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +110 -54
  190. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +155 -99
  191. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +107 -51
  192. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +109 -53
  193. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +107 -51
  194. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +107 -51
  195. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +108 -52
  196. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +107 -51
  197. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +107 -51
  198. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +107 -70
  199. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +115 -59
  200. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +113 -57
  201. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +107 -51
  202. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +107 -51
  203. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +107 -51
  204. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +107 -51
  205. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +110 -54
  206. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +107 -51
  207. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +110 -54
  208. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +110 -54
  209. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +110 -54
  210. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +110 -54
  211. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +107 -51
  212. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +107 -51
  213. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +115 -59
  214. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +110 -54
  215. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +110 -54
  216. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +110 -54
  217. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +110 -54
  218. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +117 -61
  219. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +110 -54
  220. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +110 -54
  221. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +119 -63
  222. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +110 -54
  223. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +110 -54
  224. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +113 -57
  225. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +113 -57
  226. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +113 -57
  227. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +107 -51
  228. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +113 -57
  229. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +107 -51
  230. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +110 -54
  231. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +110 -54
  232. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +107 -51
  233. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +110 -54
  234. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +110 -54
  235. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +107 -51
  236. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +107 -51
  237. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +107 -51
  238. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +110 -54
  239. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +110 -54
  240. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +110 -54
  241. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +110 -54
  242. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +107 -51
  243. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +113 -57
  244. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +110 -54
  245. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +110 -54
  246. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +110 -54
  247. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +125 -69
  248. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +113 -57
  249. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +128 -72
  250. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +110 -54
  251. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +107 -51
  252. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +110 -54
  253. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +116 -60
  254. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +107 -51
  255. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +113 -57
  256. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +107 -51
  257. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +110 -54
  258. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +107 -51
  259. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +107 -51
  260. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +107 -51
  261. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +107 -51
  262. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +113 -57
  263. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +113 -57
  264. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +107 -51
  265. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +113 -57
  266. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +110 -54
  267. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +107 -51
  268. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +107 -51
  269. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +108 -52
  270. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +107 -51
  271. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +107 -51
  272. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +107 -51
  273. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +107 -51
  274. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +108 -52
  275. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +110 -54
  276. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +113 -57
  277. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +107 -51
  278. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +110 -54
  279. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +107 -51
  280. nautobot/project-static/docs/user-guide/index.html +109 -53
  281. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +107 -51
  282. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +113 -57
  283. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +128 -72
  284. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +107 -51
  285. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +125 -69
  286. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +107 -51
  287. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +110 -54
  288. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +125 -69
  289. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +110 -54
  290. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +107 -51
  291. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +107 -51
  292. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +128 -72
  293. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +114 -58
  294. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +113 -57
  295. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +110 -54
  296. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +121 -65
  297. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +109 -53
  298. nautobot/project-static/docs/user-guide/platform-functionality/note.html +110 -54
  299. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +116 -60
  300. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +110 -54
  301. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +131 -75
  302. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +149 -93
  303. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +110 -54
  304. nautobot/project-static/docs/user-guide/platform-functionality/role.html +108 -84
  305. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +116 -60
  306. nautobot/project-static/docs/user-guide/platform-functionality/status.html +119 -63
  307. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +110 -54
  308. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +137 -81
  309. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +110 -54
  310. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +107 -51
  311. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +110 -54
  312. nautobot/project-static/js/forms.js +2 -1
  313. nautobot/tenancy/forms.py +9 -0
  314. nautobot/tenancy/views.py +3 -6
  315. nautobot/virtualization/forms.py +18 -6
  316. nautobot/virtualization/templates/virtualization/clustertype.html +2 -2
  317. nautobot/virtualization/views.py +7 -9
  318. {nautobot-2.2.3.dist-info → nautobot-2.2.5.dist-info}/METADATA +2 -2
  319. {nautobot-2.2.3.dist-info → nautobot-2.2.5.dist-info}/RECORD +323 -320
  320. nautobot/project-static/docs/assets/javascripts/bundle.bd41221c.min.js +0 -29
  321. nautobot/project-static/docs/assets/javascripts/bundle.bd41221c.min.js.map +0 -7
  322. nautobot/project-static/docs/assets/stylesheets/main.bcfcd587.min.css +0 -1
  323. nautobot/project-static/docs/assets/stylesheets/main.bcfcd587.min.css.map +0 -1
  324. {nautobot-2.2.3.dist-info → nautobot-2.2.5.dist-info}/LICENSE.txt +0 -0
  325. {nautobot-2.2.3.dist-info → nautobot-2.2.5.dist-info}/NOTICE +0 -0
  326. {nautobot-2.2.3.dist-info → nautobot-2.2.5.dist-info}/WHEEL +0 -0
  327. {nautobot-2.2.3.dist-info → nautobot-2.2.5.dist-info}/entry_points.txt +0 -0
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
  <link rel="icon" href="../../../assets/favicon.ico">
21
- <meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.16">
21
+ <meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.23">
22
22
 
23
23
 
24
24
 
@@ -26,12 +26,20 @@
26
26
 
27
27
 
28
28
 
29
- <link rel="stylesheet" href="../../../assets/stylesheets/main.bcfcd587.min.css">
29
+ <link rel="stylesheet" href="../../../assets/stylesheets/main.6543a935.min.css">
30
30
 
31
31
 
32
32
  <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
33
33
 
34
34
 
35
+
36
+
37
+
38
+
39
+
40
+
41
+ <style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M288 0H128c-17.7 0-32 14.3-32 32s14.3 32 32 32v132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6 0 480.9 31.1 512 69.4 512h309.2c38.3 0 69.4-31.1 69.4-69.4 0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7 0 32-14.3 32-32S337.7 0 320 0h-32zm-96 196.8V64h64v132.8c0 23.7 6.6 46.9 19 67.1l34.5 56.1h-171l34.5-56.1c12.4-20.2 19-43.4 19-67.1z"/></svg>');}</style>
42
+
35
43
 
36
44
 
37
45
 
@@ -200,7 +208,7 @@
200
208
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
201
209
  <div class="md-source__icon md-icon">
202
210
 
203
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
211
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
204
212
  </div>
205
213
  <div class="md-source__repository">
206
214
  GitHub
@@ -360,7 +368,7 @@
360
368
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
361
369
  <div class="md-source__icon md-icon">
362
370
 
363
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
371
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
364
372
  </div>
365
373
  <div class="md-source__repository">
366
374
  GitHub
@@ -532,7 +540,7 @@
532
540
 
533
541
 
534
542
  <span class="md-ellipsis">
535
- Prerequisites
543
+ Getting Started
536
544
  </span>
537
545
 
538
546
 
@@ -856,11 +864,11 @@
856
864
 
857
865
 
858
866
  <li class="md-nav__item">
859
- <a href="external-authentication.html" class="md-nav__link">
867
+ <a href="app-install.html" class="md-nav__link">
860
868
 
861
869
 
862
870
  <span class="md-ellipsis">
863
- External Authentication (Optional)
871
+ Installing and Using Apps
864
872
  </span>
865
873
 
866
874
 
@@ -877,11 +885,11 @@
877
885
 
878
886
 
879
887
  <li class="md-nav__item">
880
- <a href="app-install.html" class="md-nav__link">
888
+ <a href="external-authentication.html" class="md-nav__link">
881
889
 
882
890
 
883
891
  <span class="md-ellipsis">
884
- Installing and Using Plugins
892
+ External Authentication (Optional)
885
893
  </span>
886
894
 
887
895
 
@@ -891,6 +899,52 @@
891
899
 
892
900
 
893
901
 
902
+ </ul>
903
+ </nav>
904
+
905
+ </li>
906
+
907
+
908
+
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+
922
+
923
+ <li class="md-nav__item md-nav__item--nested">
924
+
925
+
926
+
927
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2" >
928
+
929
+
930
+ <label class="md-nav__link" for="__nav_2_1_2" id="__nav_2_1_2_label" tabindex="0">
931
+
932
+
933
+ <span class="md-ellipsis">
934
+ Installation Extras
935
+ </span>
936
+
937
+
938
+ <span class="md-nav__icon md-icon"></span>
939
+ </label>
940
+
941
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_2_label" aria-expanded="false">
942
+ <label class="md-nav__title" for="__nav_2_1_2">
943
+ <span class="md-nav__icon md-icon"></span>
944
+ Installation Extras
945
+ </label>
946
+ <ul class="md-nav__list" data-md-scrollfix>
947
+
894
948
 
895
949
 
896
950
 
@@ -898,7 +952,7 @@
898
952
 
899
953
 
900
954
  <li class="md-nav__item">
901
- <a href="docker.html" class="md-nav__link">
955
+ <a href="../installation-extras/docker.html" class="md-nav__link">
902
956
 
903
957
 
904
958
  <span class="md-ellipsis">
@@ -919,7 +973,7 @@
919
973
 
920
974
 
921
975
  <li class="md-nav__item">
922
- <a href="health-checks.html" class="md-nav__link">
976
+ <a href="../installation-extras/health-checks.html" class="md-nav__link">
923
977
 
924
978
 
925
979
  <span class="md-ellipsis">
@@ -940,7 +994,7 @@
940
994
 
941
995
 
942
996
  <li class="md-nav__item">
943
- <a href="selinux-troubleshooting.html" class="md-nav__link">
997
+ <a href="../installation-extras/selinux-troubleshooting.html" class="md-nav__link">
944
998
 
945
999
 
946
1000
  <span class="md-ellipsis">
@@ -979,10 +1033,10 @@
979
1033
 
980
1034
 
981
1035
 
982
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2" >
1036
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_3" >
983
1037
 
984
1038
 
985
- <label class="md-nav__link" for="__nav_2_1_2" id="__nav_2_1_2_label" tabindex="0">
1039
+ <label class="md-nav__link" for="__nav_2_1_3" id="__nav_2_1_3_label" tabindex="0">
986
1040
 
987
1041
 
988
1042
  <span class="md-ellipsis">
@@ -993,8 +1047,8 @@
993
1047
  <span class="md-nav__icon md-icon"></span>
994
1048
  </label>
995
1049
 
996
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_2_label" aria-expanded="false">
997
- <label class="md-nav__title" for="__nav_2_1_2">
1050
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_3_label" aria-expanded="false">
1051
+ <label class="md-nav__title" for="__nav_2_1_3">
998
1052
  <span class="md-nav__icon md-icon"></span>
999
1053
  Upgrading
1000
1054
  </label>
@@ -1059,7 +1113,7 @@
1059
1113
 
1060
1114
 
1061
1115
 
1062
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_3" >
1116
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_3_3" >
1063
1117
 
1064
1118
 
1065
1119
 
@@ -1075,14 +1129,14 @@
1075
1129
  </a>
1076
1130
 
1077
1131
 
1078
- <label class="md-nav__link " for="__nav_2_1_2_3" id="__nav_2_1_2_3_label" tabindex="0">
1132
+ <label class="md-nav__link " for="__nav_2_1_3_3" id="__nav_2_1_3_3_label" tabindex="0">
1079
1133
  <span class="md-nav__icon md-icon"></span>
1080
1134
  </label>
1081
1135
 
1082
1136
  </div>
1083
1137
 
1084
- <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_1_2_3_label" aria-expanded="false">
1085
- <label class="md-nav__title" for="__nav_2_1_2_3">
1138
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_1_3_3_label" aria-expanded="false">
1139
+ <label class="md-nav__title" for="__nav_2_1_3_3">
1086
1140
  <span class="md-nav__icon md-icon"></span>
1087
1141
  Upgrading Nautobot from v1.X to v2.0
1088
1142
  </label>
@@ -1126,7 +1180,7 @@
1126
1180
 
1127
1181
 
1128
1182
 
1129
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_2_3_2" >
1183
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_3_3_2" >
1130
1184
 
1131
1185
 
1132
1186
 
@@ -1142,14 +1196,14 @@
1142
1196
  </a>
1143
1197
 
1144
1198
 
1145
- <label class="md-nav__link " for="__nav_2_1_2_3_2" id="__nav_2_1_2_3_2_label" tabindex="0">
1199
+ <label class="md-nav__link " for="__nav_2_1_3_3_2" id="__nav_2_1_3_3_2_label" tabindex="0">
1146
1200
  <span class="md-nav__icon md-icon"></span>
1147
1201
  </label>
1148
1202
 
1149
1203
  </div>
1150
1204
 
1151
- <nav class="md-nav" data-md-level="5" aria-labelledby="__nav_2_1_2_3_2_label" aria-expanded="false">
1152
- <label class="md-nav__title" for="__nav_2_1_2_3_2">
1205
+ <nav class="md-nav" data-md-level="5" aria-labelledby="__nav_2_1_3_3_2_label" aria-expanded="false">
1206
+ <label class="md-nav__title" for="__nav_2_1_3_3_2">
1153
1207
  <span class="md-nav__icon md-icon"></span>
1154
1208
  IPAM Migration Guide
1155
1209
  </label>
@@ -1280,10 +1334,10 @@
1280
1334
 
1281
1335
 
1282
1336
 
1283
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_3" >
1337
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_4" >
1284
1338
 
1285
1339
 
1286
- <label class="md-nav__link" for="__nav_2_1_3" id="__nav_2_1_3_label" tabindex="0">
1340
+ <label class="md-nav__link" for="__nav_2_1_4" id="__nav_2_1_4_label" tabindex="0">
1287
1341
 
1288
1342
 
1289
1343
  <span class="md-ellipsis">
@@ -1294,8 +1348,8 @@
1294
1348
  <span class="md-nav__icon md-icon"></span>
1295
1349
  </label>
1296
1350
 
1297
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_3_label" aria-expanded="false">
1298
- <label class="md-nav__title" for="__nav_2_1_3">
1351
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_4_label" aria-expanded="false">
1352
+ <label class="md-nav__title" for="__nav_2_1_4">
1299
1353
  <span class="md-nav__icon md-icon"></span>
1300
1354
  Migration
1301
1355
  </label>
@@ -1368,7 +1422,7 @@
1368
1422
 
1369
1423
 
1370
1424
 
1371
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_4" >
1425
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_5" >
1372
1426
 
1373
1427
 
1374
1428
 
@@ -1384,14 +1438,14 @@
1384
1438
  </a>
1385
1439
 
1386
1440
 
1387
- <label class="md-nav__link " for="__nav_2_1_4" id="__nav_2_1_4_label" tabindex="0">
1441
+ <label class="md-nav__link " for="__nav_2_1_5" id="__nav_2_1_5_label" tabindex="0">
1388
1442
  <span class="md-nav__icon md-icon"></span>
1389
1443
  </label>
1390
1444
 
1391
1445
  </div>
1392
1446
 
1393
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_4_label" aria-expanded="false">
1394
- <label class="md-nav__title" for="__nav_2_1_4">
1447
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_5_label" aria-expanded="false">
1448
+ <label class="md-nav__title" for="__nav_2_1_5">
1395
1449
  <span class="md-nav__icon md-icon"></span>
1396
1450
  Configuration
1397
1451
  </label>
@@ -1477,10 +1531,10 @@
1477
1531
 
1478
1532
 
1479
1533
 
1480
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_4_4" >
1534
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_5_4" >
1481
1535
 
1482
1536
 
1483
- <label class="md-nav__link" for="__nav_2_1_4_4" id="__nav_2_1_4_4_label" tabindex="0">
1537
+ <label class="md-nav__link" for="__nav_2_1_5_4" id="__nav_2_1_5_4_label" tabindex="0">
1484
1538
 
1485
1539
 
1486
1540
  <span class="md-ellipsis">
@@ -1491,8 +1545,8 @@
1491
1545
  <span class="md-nav__icon md-icon"></span>
1492
1546
  </label>
1493
1547
 
1494
- <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_1_4_4_label" aria-expanded="false">
1495
- <label class="md-nav__title" for="__nav_2_1_4_4">
1548
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_1_5_4_label" aria-expanded="false">
1549
+ <label class="md-nav__title" for="__nav_2_1_5_4">
1496
1550
  <span class="md-nav__icon md-icon"></span>
1497
1551
  External Authentication
1498
1552
  </label>
@@ -1594,10 +1648,10 @@
1594
1648
 
1595
1649
 
1596
1650
 
1597
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_5" >
1651
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_6" >
1598
1652
 
1599
1653
 
1600
- <label class="md-nav__link" for="__nav_2_1_5" id="__nav_2_1_5_label" tabindex="0">
1654
+ <label class="md-nav__link" for="__nav_2_1_6" id="__nav_2_1_6_label" tabindex="0">
1601
1655
 
1602
1656
 
1603
1657
  <span class="md-ellipsis">
@@ -1608,8 +1662,8 @@
1608
1662
  <span class="md-nav__icon md-icon"></span>
1609
1663
  </label>
1610
1664
 
1611
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_5_label" aria-expanded="false">
1612
- <label class="md-nav__title" for="__nav_2_1_5">
1665
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_6_label" aria-expanded="false">
1666
+ <label class="md-nav__title" for="__nav_2_1_6">
1613
1667
  <span class="md-nav__icon md-icon"></span>
1614
1668
  Tools
1615
1669
  </label>
@@ -1682,10 +1736,10 @@
1682
1736
 
1683
1737
 
1684
1738
 
1685
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_6" >
1739
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1_7" >
1686
1740
 
1687
1741
 
1688
- <label class="md-nav__link" for="__nav_2_1_6" id="__nav_2_1_6_label" tabindex="0">
1742
+ <label class="md-nav__link" for="__nav_2_1_7" id="__nav_2_1_7_label" tabindex="0">
1689
1743
 
1690
1744
 
1691
1745
  <span class="md-ellipsis">
@@ -1696,8 +1750,8 @@
1696
1750
  <span class="md-nav__icon md-icon"></span>
1697
1751
  </label>
1698
1752
 
1699
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_6_label" aria-expanded="false">
1700
- <label class="md-nav__title" for="__nav_2_1_6">
1753
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_1_7_label" aria-expanded="false">
1754
+ <label class="md-nav__title" for="__nav_2_1_7">
1701
1755
  <span class="md-nav__icon md-icon"></span>
1702
1756
  Guides
1703
1757
  </label>
@@ -8139,77 +8193,89 @@
8139
8193
  <p>This document will guide you through setting up uWSGI and establishing Nautobot web and Celery worker services to run on system startup.</p>
8140
8194
  <h3 id="web-service">Web Service<a class="headerlink" href="#web-service" title="Permanent link">&para;</a></h3>
8141
8195
  <p>Nautobot includes a <code>nautobot-server start</code> management command that directly invokes uWSGI. This command behaves exactly as uWSGI does, but allows us to maintain a single entrypoint into the Nautobot application.</p>
8142
- <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>nautobot-server start --help
8196
+ <div class="highlight"><span class="filename">Show help for the nautobot-server start command</span><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>nautobot-server start --help
8143
8197
  </code></pre></div>
8144
8198
  <h3 id="worker-service">Worker Service<a class="headerlink" href="#worker-service" title="Permanent link">&para;</a></h3>
8145
8199
  <p>Nautobot requires at least one worker to consume background tasks required for advanced background features. A <code>nautobot-server celery</code> command is included that directly invokes Celery. This command behaves exactly as the Celery command-line utility does, but launches it through Nautobot's environment to share Redis and database connection settings transparently.</p>
8146
- <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>nautobot-server celery --help
8200
+ <div class="highlight"><span class="filename">Show help for the Nautobot worker service</span><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>nautobot-server celery --help
8147
8201
  </code></pre></div>
8148
- <div class="admonition version-changed">
8149
- <p class="admonition-title">Changed in version 1.1.0</p>
8202
+ <details class="version-changed">
8203
+ <summary>Changed in version 1.1.0</summary>
8150
8204
  <p>Prior to version 1.1.0, Nautobot utilized RQ as the primary background task worker. As of Nautobot 1.1.0, RQ is now <em>deprecated</em>. RQ and the <code>@job</code> decorator for custom tasks were still supported for the remainder of the 1.x.y releases, but users should <a href="#migrating-to-celery-from-rq">migrate the primary worker to Celery</a>.</p>
8151
- </div>
8152
- <div class="admonition version-removed">
8153
- <p class="admonition-title">Removed in version 2.0.0</p>
8205
+ </details>
8206
+ <details class="version-removed">
8207
+ <summary>Removed in version 2.0.0</summary>
8154
8208
  <p>Support for RQ has been completely removed from Nautobot.</p>
8155
- </div>
8209
+ </details>
8156
8210
  <h4 id="advanced-task-queue-configuration">Advanced Task Queue Configuration<a class="headerlink" href="#advanced-task-queue-configuration" title="Permanent link">&para;</a></h4>
8157
8211
  <p>You may want to deploy multiple workers and/or multiple queues. For more information see the <a href="../guides/celery-queues.html">task queues</a> documentation.</p>
8158
8212
  <h2 id="configuration">Configuration<a class="headerlink" href="#configuration" title="Permanent link">&para;</a></h2>
8159
- <p>As the <code>nautobot</code> user, copy and paste the following into <code>$NAUTOBOT_ROOT/uwsgi.ini</code>:</p>
8160
- <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">[uwsgi]</span>
8161
- <a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="c1">; The IP address (typically localhost) and port that the WSGI process should listen on</span>
8162
- <a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="na">socket</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">127.0.0.1:8001</span>
8163
- <a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a>
8164
- <a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="c1">; Fail to start if any parameter in the configuration file isn’t explicitly understood by uWSGI</span>
8165
- <a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="na">strict</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8166
- <a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a>
8167
- <a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a><span class="c1">; Enable master process to gracefully re-spawn and pre-fork workers</span>
8168
- <a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a><span class="na">master</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8169
- <a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a>
8170
- <a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a><span class="c1">; Allow Python app-generated threads to run</span>
8171
- <a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a><span class="na">enable-threads</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8172
- <a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a>
8173
- <a id="__codelineno-2-14" name="__codelineno-2-14" href="#__codelineno-2-14"></a><span class="c1">;Try to remove all of the generated file/sockets during shutdown</span>
8174
- <a id="__codelineno-2-15" name="__codelineno-2-15" href="#__codelineno-2-15"></a><span class="na">vacuum</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8175
- <a id="__codelineno-2-16" name="__codelineno-2-16" href="#__codelineno-2-16"></a>
8176
- <a id="__codelineno-2-17" name="__codelineno-2-17" href="#__codelineno-2-17"></a><span class="c1">; Do not use multiple interpreters, allowing only Nautobot to run</span>
8177
- <a id="__codelineno-2-18" name="__codelineno-2-18" href="#__codelineno-2-18"></a><span class="na">single-interpreter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8178
- <a id="__codelineno-2-19" name="__codelineno-2-19" href="#__codelineno-2-19"></a>
8179
- <a id="__codelineno-2-20" name="__codelineno-2-20" href="#__codelineno-2-20"></a><span class="c1">; Shutdown when receiving SIGTERM (default is respawn)</span>
8180
- <a id="__codelineno-2-21" name="__codelineno-2-21" href="#__codelineno-2-21"></a><span class="na">die-on-term</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8181
- <a id="__codelineno-2-22" name="__codelineno-2-22" href="#__codelineno-2-22"></a>
8182
- <a id="__codelineno-2-23" name="__codelineno-2-23" href="#__codelineno-2-23"></a><span class="c1">; Prevents uWSGI from starting if it is unable load Nautobot (usually due to errors)</span>
8183
- <a id="__codelineno-2-24" name="__codelineno-2-24" href="#__codelineno-2-24"></a><span class="na">need-app</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8184
- <a id="__codelineno-2-25" name="__codelineno-2-25" href="#__codelineno-2-25"></a>
8185
- <a id="__codelineno-2-26" name="__codelineno-2-26" href="#__codelineno-2-26"></a><span class="c1">; By default, uWSGI has rather verbose logging that can be noisy</span>
8186
- <a id="__codelineno-2-27" name="__codelineno-2-27" href="#__codelineno-2-27"></a><span class="na">disable-logging</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8187
- <a id="__codelineno-2-28" name="__codelineno-2-28" href="#__codelineno-2-28"></a>
8188
- <a id="__codelineno-2-29" name="__codelineno-2-29" href="#__codelineno-2-29"></a><span class="c1">; Assert that critical 4xx and 5xx errors are still logged</span>
8189
- <a id="__codelineno-2-30" name="__codelineno-2-30" href="#__codelineno-2-30"></a><span class="na">log-4xx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8190
- <a id="__codelineno-2-31" name="__codelineno-2-31" href="#__codelineno-2-31"></a><span class="na">log-5xx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8191
- <a id="__codelineno-2-32" name="__codelineno-2-32" href="#__codelineno-2-32"></a>
8192
- <a id="__codelineno-2-33" name="__codelineno-2-33" href="#__codelineno-2-33"></a><span class="c1">; Enable HTTP 1.1 keepalive support</span>
8193
- <a id="__codelineno-2-34" name="__codelineno-2-34" href="#__codelineno-2-34"></a><span class="na">http-keepalive</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">1</span>
8194
- <a id="__codelineno-2-35" name="__codelineno-2-35" href="#__codelineno-2-35"></a>
8195
- <a id="__codelineno-2-36" name="__codelineno-2-36" href="#__codelineno-2-36"></a><span class="c1">;</span>
8196
- <a id="__codelineno-2-37" name="__codelineno-2-37" href="#__codelineno-2-37"></a><span class="c1">; Advanced settings (disabled by default)</span>
8197
- <a id="__codelineno-2-38" name="__codelineno-2-38" href="#__codelineno-2-38"></a><span class="c1">; Customize these for your environment if and only if you need them.</span>
8198
- <a id="__codelineno-2-39" name="__codelineno-2-39" href="#__codelineno-2-39"></a><span class="c1">; Ref: https://uwsgi-docs.readthedocs.io/en/latest/Options.html</span>
8199
- <a id="__codelineno-2-40" name="__codelineno-2-40" href="#__codelineno-2-40"></a><span class="c1">;</span>
8200
- <a id="__codelineno-2-41" name="__codelineno-2-41" href="#__codelineno-2-41"></a>
8201
- <a id="__codelineno-2-42" name="__codelineno-2-42" href="#__codelineno-2-42"></a><span class="c1">; Number of uWSGI workers to spawn. This should typically be 2n+1, where n is the number of CPU cores present.</span>
8202
- <a id="__codelineno-2-43" name="__codelineno-2-43" href="#__codelineno-2-43"></a><span class="c1">; processes = 5</span>
8203
- <a id="__codelineno-2-44" name="__codelineno-2-44" href="#__codelineno-2-44"></a>
8204
- <a id="__codelineno-2-45" name="__codelineno-2-45" href="#__codelineno-2-45"></a><span class="c1">; If using subdirectory hosting e.g. example.com/nautobot, you must uncomment this line. Otherwise you&#39;ll get double paths e.g. example.com/nautobot/nautobot/.</span>
8205
- <a id="__codelineno-2-46" name="__codelineno-2-46" href="#__codelineno-2-46"></a><span class="c1">; Ref: https://uwsgi-docs.readthedocs.io/en/latest/Changelog-2.0.11.html#fixpathinfo-routing-action</span>
8206
- <a id="__codelineno-2-47" name="__codelineno-2-47" href="#__codelineno-2-47"></a><span class="c1">; route-run = fixpathinfo:</span>
8207
- <a id="__codelineno-2-48" name="__codelineno-2-48" href="#__codelineno-2-48"></a>
8208
- <a id="__codelineno-2-49" name="__codelineno-2-49" href="#__codelineno-2-49"></a><span class="c1">; If hosted behind a load balancer uncomment these lines, the harakiri timeout should be greater than your load balancer timeout.</span>
8209
- <a id="__codelineno-2-50" name="__codelineno-2-50" href="#__codelineno-2-50"></a><span class="c1">; Ref: https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html?highlight=keepalive#http-keep-alive</span>
8210
- <a id="__codelineno-2-51" name="__codelineno-2-51" href="#__codelineno-2-51"></a><span class="c1">; harakiri = 65</span>
8211
- <a id="__codelineno-2-52" name="__codelineno-2-52" href="#__codelineno-2-52"></a><span class="c1">; add-header = Connection: Keep-Alive</span>
8212
- <a id="__codelineno-2-53" name="__codelineno-2-53" href="#__codelineno-2-53"></a><span class="c1">; http-keepalive = 1</span>
8213
+ <p>As the <code>nautobot</code> user, copy and paste the following into the file:</p>
8214
+ <div class="tabbed-set tabbed-alternate" data-tabs="1:2"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Vim</label><label for="__tabbed_1_2">Nano</label></div>
8215
+ <div class="tabbed-content">
8216
+ <div class="tabbed-block">
8217
+ <div class="highlight"><span class="filename">Edit uwsgi file with Vim</span><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>vim $NAUTOBOT_ROOT/uwsgi.ini
8218
+ </code></pre></div>
8219
+ </div>
8220
+ <div class="tabbed-block">
8221
+ <div class="highlight"><span class="filename">Edit uwsgi file with Nano</span><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>nano $NAUTOBOT_ROOT/uwsgi.ini
8222
+ </code></pre></div>
8223
+ </div>
8224
+ </div>
8225
+ </div>
8226
+ <div class="highlight"><span class="filename">$NAUTOBOT_ROOT/uwsgi.ini</span><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="k">[uwsgi]</span>
8227
+ <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="c1">; The IP address (typically localhost) and port that the WSGI process should listen on</span>
8228
+ <a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="na">socket</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">127.0.0.1:8001</span>
8229
+ <a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a>
8230
+ <a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="c1">; Fail to start if any parameter in the configuration file isn’t explicitly understood by uWSGI</span>
8231
+ <a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a><span class="na">strict</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8232
+ <a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a>
8233
+ <a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="c1">; Enable master process to gracefully re-spawn and pre-fork workers</span>
8234
+ <a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a><span class="na">master</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8235
+ <a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a>
8236
+ <a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a><span class="c1">; Allow Python app-generated threads to run</span>
8237
+ <a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a><span class="na">enable-threads</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8238
+ <a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a>
8239
+ <a id="__codelineno-4-14" name="__codelineno-4-14" href="#__codelineno-4-14"></a><span class="c1">;Try to remove all of the generated file/sockets during shutdown</span>
8240
+ <a id="__codelineno-4-15" name="__codelineno-4-15" href="#__codelineno-4-15"></a><span class="na">vacuum</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8241
+ <a id="__codelineno-4-16" name="__codelineno-4-16" href="#__codelineno-4-16"></a>
8242
+ <a id="__codelineno-4-17" name="__codelineno-4-17" href="#__codelineno-4-17"></a><span class="c1">; Do not use multiple interpreters, allowing only Nautobot to run</span>
8243
+ <a id="__codelineno-4-18" name="__codelineno-4-18" href="#__codelineno-4-18"></a><span class="na">single-interpreter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8244
+ <a id="__codelineno-4-19" name="__codelineno-4-19" href="#__codelineno-4-19"></a>
8245
+ <a id="__codelineno-4-20" name="__codelineno-4-20" href="#__codelineno-4-20"></a><span class="c1">; Shutdown when receiving SIGTERM (default is respawn)</span>
8246
+ <a id="__codelineno-4-21" name="__codelineno-4-21" href="#__codelineno-4-21"></a><span class="na">die-on-term</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8247
+ <a id="__codelineno-4-22" name="__codelineno-4-22" href="#__codelineno-4-22"></a>
8248
+ <a id="__codelineno-4-23" name="__codelineno-4-23" href="#__codelineno-4-23"></a><span class="c1">; Prevents uWSGI from starting if it is unable load Nautobot (usually due to errors)</span>
8249
+ <a id="__codelineno-4-24" name="__codelineno-4-24" href="#__codelineno-4-24"></a><span class="na">need-app</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8250
+ <a id="__codelineno-4-25" name="__codelineno-4-25" href="#__codelineno-4-25"></a>
8251
+ <a id="__codelineno-4-26" name="__codelineno-4-26" href="#__codelineno-4-26"></a><span class="c1">; By default, uWSGI has rather verbose logging that can be noisy</span>
8252
+ <a id="__codelineno-4-27" name="__codelineno-4-27" href="#__codelineno-4-27"></a><span class="na">disable-logging</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8253
+ <a id="__codelineno-4-28" name="__codelineno-4-28" href="#__codelineno-4-28"></a>
8254
+ <a id="__codelineno-4-29" name="__codelineno-4-29" href="#__codelineno-4-29"></a><span class="c1">; Assert that critical 4xx and 5xx errors are still logged</span>
8255
+ <a id="__codelineno-4-30" name="__codelineno-4-30" href="#__codelineno-4-30"></a><span class="na">log-4xx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8256
+ <a id="__codelineno-4-31" name="__codelineno-4-31" href="#__codelineno-4-31"></a><span class="na">log-5xx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">true</span>
8257
+ <a id="__codelineno-4-32" name="__codelineno-4-32" href="#__codelineno-4-32"></a>
8258
+ <a id="__codelineno-4-33" name="__codelineno-4-33" href="#__codelineno-4-33"></a><span class="c1">; Enable HTTP 1.1 keepalive support</span>
8259
+ <a id="__codelineno-4-34" name="__codelineno-4-34" href="#__codelineno-4-34"></a><span class="na">http-keepalive</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">1</span>
8260
+ <a id="__codelineno-4-35" name="__codelineno-4-35" href="#__codelineno-4-35"></a>
8261
+ <a id="__codelineno-4-36" name="__codelineno-4-36" href="#__codelineno-4-36"></a><span class="c1">;</span>
8262
+ <a id="__codelineno-4-37" name="__codelineno-4-37" href="#__codelineno-4-37"></a><span class="c1">; Advanced settings (disabled by default)</span>
8263
+ <a id="__codelineno-4-38" name="__codelineno-4-38" href="#__codelineno-4-38"></a><span class="c1">; Customize these for your environment if and only if you need them.</span>
8264
+ <a id="__codelineno-4-39" name="__codelineno-4-39" href="#__codelineno-4-39"></a><span class="c1">; Ref: https://uwsgi-docs.readthedocs.io/en/latest/Options.html</span>
8265
+ <a id="__codelineno-4-40" name="__codelineno-4-40" href="#__codelineno-4-40"></a><span class="c1">;</span>
8266
+ <a id="__codelineno-4-41" name="__codelineno-4-41" href="#__codelineno-4-41"></a>
8267
+ <a id="__codelineno-4-42" name="__codelineno-4-42" href="#__codelineno-4-42"></a><span class="c1">; Number of uWSGI workers to spawn. This should typically be 2n+1, where n is the number of CPU cores present.</span>
8268
+ <a id="__codelineno-4-43" name="__codelineno-4-43" href="#__codelineno-4-43"></a><span class="c1">; processes = 5</span>
8269
+ <a id="__codelineno-4-44" name="__codelineno-4-44" href="#__codelineno-4-44"></a>
8270
+ <a id="__codelineno-4-45" name="__codelineno-4-45" href="#__codelineno-4-45"></a><span class="c1">; If using subdirectory hosting e.g. example.com/nautobot, you must uncomment this line. Otherwise you&#39;ll get double paths e.g. example.com/nautobot/nautobot/.</span>
8271
+ <a id="__codelineno-4-46" name="__codelineno-4-46" href="#__codelineno-4-46"></a><span class="c1">; Ref: https://uwsgi-docs.readthedocs.io/en/latest/Changelog-2.0.11.html#fixpathinfo-routing-action</span>
8272
+ <a id="__codelineno-4-47" name="__codelineno-4-47" href="#__codelineno-4-47"></a><span class="c1">; route-run = fixpathinfo:</span>
8273
+ <a id="__codelineno-4-48" name="__codelineno-4-48" href="#__codelineno-4-48"></a>
8274
+ <a id="__codelineno-4-49" name="__codelineno-4-49" href="#__codelineno-4-49"></a><span class="c1">; If hosted behind a load balancer uncomment these lines, the harakiri timeout should be greater than your load balancer timeout.</span>
8275
+ <a id="__codelineno-4-50" name="__codelineno-4-50" href="#__codelineno-4-50"></a><span class="c1">; Ref: https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html?highlight=keepalive#http-keep-alive</span>
8276
+ <a id="__codelineno-4-51" name="__codelineno-4-51" href="#__codelineno-4-51"></a><span class="c1">; harakiri = 65</span>
8277
+ <a id="__codelineno-4-52" name="__codelineno-4-52" href="#__codelineno-4-52"></a><span class="c1">; add-header = Connection: Keep-Alive</span>
8278
+ <a id="__codelineno-4-53" name="__codelineno-4-53" href="#__codelineno-4-53"></a><span class="c1">; http-keepalive = 1</span>
8213
8279
  </code></pre></div>
8214
8280
  <p>This configuration should suffice for most initial installations, you may wish to edit this file to change the bound IP
8215
8281
  address and/or port number, or to make performance-related adjustments. See <a href="https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html">uWSGI
@@ -8225,109 +8291,148 @@ documentation</a> for the available configuration parameters.</p>
8225
8291
  <p>The following steps must be performed with root permissions.</p>
8226
8292
  </div>
8227
8293
  <h3 id="nautobot-service">Nautobot Service<a class="headerlink" href="#nautobot-service" title="Permanent link">&para;</a></h3>
8228
- <p>First, we'll establish the <code>systemd</code> unit file for the Nautobot web service. Copy and paste the following into <code>/etc/systemd/system/nautobot.service</code>:</p>
8229
- <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="k">[Unit]</span>
8230
- <a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="na">Description</span><span class="o">=</span><span class="s">Nautobot WSGI Service</span>
8231
- <a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="na">Documentation</span><span class="o">=</span><span class="s">https://docs.nautobot.com/projects/core/en/stable/</span>
8232
- <a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="na">After</span><span class="o">=</span><span class="s">network-online.target</span>
8233
- <a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a><span class="na">Wants</span><span class="o">=</span><span class="s">network-online.target</span>
8234
- <a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a>
8235
- <a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a><span class="k">[Service]</span>
8236
- <a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a><span class="na">Type</span><span class="o">=</span><span class="s">simple</span>
8237
- <a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a><span class="na">Environment</span><span class="o">=</span><span class="s">&quot;NAUTOBOT_ROOT=/opt/nautobot&quot;</span>
8238
- <a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a>
8239
- <a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a><span class="na">User</span><span class="o">=</span><span class="s">nautobot</span>
8240
- <a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a><span class="na">Group</span><span class="o">=</span><span class="s">nautobot</span>
8241
- <a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a><span class="na">PIDFile</span><span class="o">=</span><span class="s">/var/tmp/nautobot.pid</span>
8242
- <a id="__codelineno-3-14" name="__codelineno-3-14" href="#__codelineno-3-14"></a><span class="na">WorkingDirectory</span><span class="o">=</span><span class="s">/opt/nautobot</span>
8243
- <a id="__codelineno-3-15" name="__codelineno-3-15" href="#__codelineno-3-15"></a>
8244
- <a id="__codelineno-3-16" name="__codelineno-3-16" href="#__codelineno-3-16"></a><span class="na">ExecStart</span><span class="o">=</span><span class="s">/opt/nautobot/bin/nautobot-server start --pidfile /var/tmp/nautobot.pid --ini /opt/nautobot/uwsgi.ini</span>
8245
- <a id="__codelineno-3-17" name="__codelineno-3-17" href="#__codelineno-3-17"></a><span class="na">ExecStop</span><span class="o">=</span><span class="s">/opt/nautobot/bin/nautobot-server start --stop /var/tmp/nautobot.pid</span>
8246
- <a id="__codelineno-3-18" name="__codelineno-3-18" href="#__codelineno-3-18"></a><span class="na">ExecReload</span><span class="o">=</span><span class="s">/opt/nautobot/bin/nautobot-server start --reload /var/tmp/nautobot.pid</span>
8247
- <a id="__codelineno-3-19" name="__codelineno-3-19" href="#__codelineno-3-19"></a>
8248
- <a id="__codelineno-3-20" name="__codelineno-3-20" href="#__codelineno-3-20"></a><span class="na">Restart</span><span class="o">=</span><span class="s">on-failure</span>
8249
- <a id="__codelineno-3-21" name="__codelineno-3-21" href="#__codelineno-3-21"></a><span class="na">RestartSec</span><span class="o">=</span><span class="s">30</span>
8250
- <a id="__codelineno-3-22" name="__codelineno-3-22" href="#__codelineno-3-22"></a><span class="na">PrivateTmp</span><span class="o">=</span><span class="s">true</span>
8251
- <a id="__codelineno-3-23" name="__codelineno-3-23" href="#__codelineno-3-23"></a>
8252
- <a id="__codelineno-3-24" name="__codelineno-3-24" href="#__codelineno-3-24"></a><span class="k">[Install]</span>
8253
- <a id="__codelineno-3-25" name="__codelineno-3-25" href="#__codelineno-3-25"></a><span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span>
8294
+ <p>First, we'll establish the <code>systemd</code> unit file for the Nautobot web service. Copy and paste the following into the Nautobot service file.</p>
8295
+ <div class="tabbed-set tabbed-alternate" data-tabs="2:2"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Vim</label><label for="__tabbed_2_2">Nano</label></div>
8296
+ <div class="tabbed-content">
8297
+ <div class="tabbed-block">
8298
+ <div class="highlight"><span class="filename">Edit Nautobot service file with Vim</span><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>sudo vim /etc/systemd/system/nautobot.service
8299
+ </code></pre></div>
8300
+ </div>
8301
+ <div class="tabbed-block">
8302
+ <div class="highlight"><span class="filename">Edit Nautobot service file with Nano</span><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>sudo nano /etc/systemd/system/nautobot.service
8303
+ </code></pre></div>
8304
+ </div>
8305
+ </div>
8306
+ </div>
8307
+ <div class="highlight"><span class="filename">/etc/systemd/system/nautobot.service</span><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="k">[Unit]</span>
8308
+ <a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="na">Description</span><span class="o">=</span><span class="s">Nautobot WSGI Service</span>
8309
+ <a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="na">Documentation</span><span class="o">=</span><span class="s">https://docs.nautobot.com/projects/core/en/stable/</span>
8310
+ <a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="na">After</span><span class="o">=</span><span class="s">network-online.target</span>
8311
+ <a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a><span class="na">Wants</span><span class="o">=</span><span class="s">network-online.target</span>
8312
+ <a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a>
8313
+ <a id="__codelineno-7-7" name="__codelineno-7-7" href="#__codelineno-7-7"></a><span class="k">[Service]</span>
8314
+ <a id="__codelineno-7-8" name="__codelineno-7-8" href="#__codelineno-7-8"></a><span class="na">Type</span><span class="o">=</span><span class="s">simple</span>
8315
+ <a id="__codelineno-7-9" name="__codelineno-7-9" href="#__codelineno-7-9"></a><span class="na">Environment</span><span class="o">=</span><span class="s">&quot;NAUTOBOT_ROOT=/opt/nautobot&quot;</span>
8316
+ <a id="__codelineno-7-10" name="__codelineno-7-10" href="#__codelineno-7-10"></a>
8317
+ <a id="__codelineno-7-11" name="__codelineno-7-11" href="#__codelineno-7-11"></a><span class="na">User</span><span class="o">=</span><span class="s">nautobot</span>
8318
+ <a id="__codelineno-7-12" name="__codelineno-7-12" href="#__codelineno-7-12"></a><span class="na">Group</span><span class="o">=</span><span class="s">nautobot</span>
8319
+ <a id="__codelineno-7-13" name="__codelineno-7-13" href="#__codelineno-7-13"></a><span class="na">PIDFile</span><span class="o">=</span><span class="s">/var/tmp/nautobot.pid</span>
8320
+ <a id="__codelineno-7-14" name="__codelineno-7-14" href="#__codelineno-7-14"></a><span class="na">WorkingDirectory</span><span class="o">=</span><span class="s">/opt/nautobot</span>
8321
+ <a id="__codelineno-7-15" name="__codelineno-7-15" href="#__codelineno-7-15"></a>
8322
+ <a id="__codelineno-7-16" name="__codelineno-7-16" href="#__codelineno-7-16"></a><span class="na">ExecStart</span><span class="o">=</span><span class="s">/opt/nautobot/bin/nautobot-server start --pidfile /var/tmp/nautobot.pid --ini /opt/nautobot/uwsgi.ini</span>
8323
+ <a id="__codelineno-7-17" name="__codelineno-7-17" href="#__codelineno-7-17"></a><span class="na">ExecStop</span><span class="o">=</span><span class="s">/opt/nautobot/bin/nautobot-server start --stop /var/tmp/nautobot.pid</span>
8324
+ <a id="__codelineno-7-18" name="__codelineno-7-18" href="#__codelineno-7-18"></a><span class="na">ExecReload</span><span class="o">=</span><span class="s">/opt/nautobot/bin/nautobot-server start --reload /var/tmp/nautobot.pid</span>
8325
+ <a id="__codelineno-7-19" name="__codelineno-7-19" href="#__codelineno-7-19"></a>
8326
+ <a id="__codelineno-7-20" name="__codelineno-7-20" href="#__codelineno-7-20"></a><span class="na">Restart</span><span class="o">=</span><span class="s">on-failure</span>
8327
+ <a id="__codelineno-7-21" name="__codelineno-7-21" href="#__codelineno-7-21"></a><span class="na">RestartSec</span><span class="o">=</span><span class="s">30</span>
8328
+ <a id="__codelineno-7-22" name="__codelineno-7-22" href="#__codelineno-7-22"></a><span class="na">PrivateTmp</span><span class="o">=</span><span class="s">true</span>
8329
+ <a id="__codelineno-7-23" name="__codelineno-7-23" href="#__codelineno-7-23"></a>
8330
+ <a id="__codelineno-7-24" name="__codelineno-7-24" href="#__codelineno-7-24"></a><span class="k">[Install]</span>
8331
+ <a id="__codelineno-7-25" name="__codelineno-7-25" href="#__codelineno-7-25"></a><span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span>
8254
8332
  </code></pre></div>
8255
8333
  <h3 id="nautobot-background-services">Nautobot Background Services<a class="headerlink" href="#nautobot-background-services" title="Permanent link">&para;</a></h3>
8256
- <div class="admonition version-changed">
8257
- <p class="admonition-title">Changed in version 1.1.0</p>
8334
+ <details class="version-changed">
8335
+ <summary>Changed in version 1.1.0</summary>
8258
8336
  <p>Prior to version 1.1.0, Nautobot utilized RQ as the primary background task worker. As of Nautobot 1.1.0, RQ is now <em>deprecated</em> and has been replaced with Celery. RQ and the <code>@job</code> decorator for custom tasks were still supported for the remainder of the 1.x.y releases, but users should <a href="#migrating-to-celery-from-rq">migrate the primary worker to Celery</a>.</p>
8259
- </div>
8260
- <div class="admonition version-removed">
8261
- <p class="admonition-title">Removed in version 2.0.0</p>
8337
+ </details>
8338
+ <details class="version-removed">
8339
+ <summary>Removed in version 2.0.0</summary>
8262
8340
  <p>RQ support has been fully removed from Nautobot.</p>
8263
- </div>
8341
+ </details>
8264
8342
  <p>Next, we will setup the <code>systemd</code> units for the Celery worker and Celery Beat scheduler.</p>
8265
8343
  <h4 id="celery-worker">Celery Worker<a class="headerlink" href="#celery-worker" title="Permanent link">&para;</a></h4>
8266
- <div class="admonition version-added">
8267
- <p class="admonition-title">Added in version 1.1.0</p>
8268
- </div>
8344
+ <details class="version-added">
8345
+ <summary>Added in version 1.1.0</summary>
8346
+ </details>
8269
8347
  <p>The Celery worker service consumes tasks from background task queues and is required for taking advantage of advanced
8270
8348
  Nautobot features including <a href="../../platform-functionality/jobs/index.html">Jobs</a>, <a href="../../platform-functionality/customfield.html">Custom
8271
8349
  Fields</a>, and <a href="../../platform-functionality/gitrepository.html">Git Repositories</a>, among others.</p>
8272
- <p>To establish the <code>systemd</code> unit file for the Celery worker, copy and paste the following into <code>/etc/systemd/system/nautobot-worker.service</code>:</p>
8273
- <div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="k">[Unit]</span>
8274
- <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="na">Description</span><span class="o">=</span><span class="s">Nautobot Celery Worker</span>
8275
- <a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="na">Documentation</span><span class="o">=</span><span class="s">https://docs.nautobot.com/projects/core/en/stable/</span>
8276
- <a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="na">After</span><span class="o">=</span><span class="s">network-online.target</span>
8277
- <a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="na">Wants</span><span class="o">=</span><span class="s">network-online.target</span>
8278
- <a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a>
8279
- <a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a><span class="k">[Service]</span>
8280
- <a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="na">Type</span><span class="o">=</span><span class="s">exec</span>
8281
- <a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a><span class="na">Environment</span><span class="o">=</span><span class="s">&quot;NAUTOBOT_ROOT=/opt/nautobot&quot;</span>
8282
- <a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a>
8283
- <a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a><span class="na">User</span><span class="o">=</span><span class="s">nautobot</span>
8284
- <a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a><span class="na">Group</span><span class="o">=</span><span class="s">nautobot</span>
8285
- <a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a><span class="na">PIDFile</span><span class="o">=</span><span class="s">/var/tmp/nautobot-worker.pid</span>
8286
- <a id="__codelineno-4-14" name="__codelineno-4-14" href="#__codelineno-4-14"></a><span class="na">WorkingDirectory</span><span class="o">=</span><span class="s">/opt/nautobot</span>
8287
- <a id="__codelineno-4-15" name="__codelineno-4-15" href="#__codelineno-4-15"></a>
8288
- <a id="__codelineno-4-16" name="__codelineno-4-16" href="#__codelineno-4-16"></a><span class="na">ExecStart</span><span class="o">=</span><span class="s">/opt/nautobot/bin/nautobot-server celery worker --loglevel INFO --pidfile /var/tmp/nautobot-worker.pid</span>
8289
- <a id="__codelineno-4-17" name="__codelineno-4-17" href="#__codelineno-4-17"></a>
8290
- <a id="__codelineno-4-18" name="__codelineno-4-18" href="#__codelineno-4-18"></a><span class="na">Restart</span><span class="o">=</span><span class="s">always</span>
8291
- <a id="__codelineno-4-19" name="__codelineno-4-19" href="#__codelineno-4-19"></a><span class="na">RestartSec</span><span class="o">=</span><span class="s">30</span>
8292
- <a id="__codelineno-4-20" name="__codelineno-4-20" href="#__codelineno-4-20"></a><span class="na">PrivateTmp</span><span class="o">=</span><span class="s">true</span>
8293
- <a id="__codelineno-4-21" name="__codelineno-4-21" href="#__codelineno-4-21"></a>
8294
- <a id="__codelineno-4-22" name="__codelineno-4-22" href="#__codelineno-4-22"></a><span class="k">[Install]</span>
8295
- <a id="__codelineno-4-23" name="__codelineno-4-23" href="#__codelineno-4-23"></a><span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span>
8350
+ <p>To establish the <code>systemd</code> unit file for the Celery worker, copy and paste the following into the Celery service definition.</p>
8351
+ <div class="tabbed-set tabbed-alternate" data-tabs="3:2"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><input id="__tabbed_3_2" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">Vim</label><label for="__tabbed_3_2">Nano</label></div>
8352
+ <div class="tabbed-content">
8353
+ <div class="tabbed-block">
8354
+ <div class="highlight"><span class="filename">Edit worker service with Vim</span><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>sudo vim /etc/systemd/system/nautobot-worker.service
8355
+ </code></pre></div>
8356
+ </div>
8357
+ <div class="tabbed-block">
8358
+ <div class="highlight"><span class="filename">Edit worker service with Nano</span><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>sudo nano /etc/systemd/system/nautobot-worker.service
8359
+ </code></pre></div>
8360
+ </div>
8361
+ </div>
8362
+ </div>
8363
+ <div class="highlight"><span class="filename">/etc/systemd/system/nautobot-worker.service</span><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="k">[Unit]</span>
8364
+ <a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a><span class="na">Description</span><span class="o">=</span><span class="s">Nautobot Celery Worker</span>
8365
+ <a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a><span class="na">Documentation</span><span class="o">=</span><span class="s">https://docs.nautobot.com/projects/core/en/stable/</span>
8366
+ <a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a><span class="na">After</span><span class="o">=</span><span class="s">network-online.target</span>
8367
+ <a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a><span class="na">Wants</span><span class="o">=</span><span class="s">network-online.target</span>
8368
+ <a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a>
8369
+ <a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a><span class="k">[Service]</span>
8370
+ <a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a><span class="na">Type</span><span class="o">=</span><span class="s">exec</span>
8371
+ <a id="__codelineno-10-9" name="__codelineno-10-9" href="#__codelineno-10-9"></a><span class="na">Environment</span><span class="o">=</span><span class="s">&quot;NAUTOBOT_ROOT=/opt/nautobot&quot;</span>
8372
+ <a id="__codelineno-10-10" name="__codelineno-10-10" href="#__codelineno-10-10"></a>
8373
+ <a id="__codelineno-10-11" name="__codelineno-10-11" href="#__codelineno-10-11"></a><span class="na">User</span><span class="o">=</span><span class="s">nautobot</span>
8374
+ <a id="__codelineno-10-12" name="__codelineno-10-12" href="#__codelineno-10-12"></a><span class="na">Group</span><span class="o">=</span><span class="s">nautobot</span>
8375
+ <a id="__codelineno-10-13" name="__codelineno-10-13" href="#__codelineno-10-13"></a><span class="na">PIDFile</span><span class="o">=</span><span class="s">/var/tmp/nautobot-worker.pid</span>
8376
+ <a id="__codelineno-10-14" name="__codelineno-10-14" href="#__codelineno-10-14"></a><span class="na">WorkingDirectory</span><span class="o">=</span><span class="s">/opt/nautobot</span>
8377
+ <a id="__codelineno-10-15" name="__codelineno-10-15" href="#__codelineno-10-15"></a>
8378
+ <a id="__codelineno-10-16" name="__codelineno-10-16" href="#__codelineno-10-16"></a><span class="na">ExecStart</span><span class="o">=</span><span class="s">/opt/nautobot/bin/nautobot-server celery worker --loglevel INFO --pidfile /var/tmp/nautobot-worker.pid</span>
8379
+ <a id="__codelineno-10-17" name="__codelineno-10-17" href="#__codelineno-10-17"></a>
8380
+ <a id="__codelineno-10-18" name="__codelineno-10-18" href="#__codelineno-10-18"></a><span class="na">Restart</span><span class="o">=</span><span class="s">always</span>
8381
+ <a id="__codelineno-10-19" name="__codelineno-10-19" href="#__codelineno-10-19"></a><span class="na">RestartSec</span><span class="o">=</span><span class="s">30</span>
8382
+ <a id="__codelineno-10-20" name="__codelineno-10-20" href="#__codelineno-10-20"></a><span class="na">PrivateTmp</span><span class="o">=</span><span class="s">true</span>
8383
+ <a id="__codelineno-10-21" name="__codelineno-10-21" href="#__codelineno-10-21"></a>
8384
+ <a id="__codelineno-10-22" name="__codelineno-10-22" href="#__codelineno-10-22"></a><span class="k">[Install]</span>
8385
+ <a id="__codelineno-10-23" name="__codelineno-10-23" href="#__codelineno-10-23"></a><span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span>
8296
8386
  </code></pre></div>
8297
8387
  <h4 id="celery-beat-scheduler">Celery Beat Scheduler<a class="headerlink" href="#celery-beat-scheduler" title="Permanent link">&para;</a></h4>
8298
- <div class="admonition version-added">
8299
- <p class="admonition-title">Added in version 1.2.0</p>
8388
+ <details class="version-added">
8389
+ <summary>Added in version 1.2.0</summary>
8390
+ </details>
8391
+ <p>The Celery Beat scheduler enables the periodic execution of and scheduling of background tasks. It is required to take advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-approvals.html">job scheduling and approval</a> features.</p>
8392
+ <div class="admonition warning">
8393
+ <p class="admonition-title">Warning</p>
8394
+ <p>You should only have a single instance of the scheduler running. Having more than one scheduler will cause multiple task executions.</p>
8300
8395
  </div>
8301
- <p>The Celery Beat scheduler enables the periodic execution of and scheduling of background tasks. It is required to take
8302
- advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-approvals.html">job scheduling and approval</a> features.</p>
8303
8396
  <div class="admonition warning">
8304
8397
  <p class="admonition-title">Warning</p>
8305
8398
  <p>It's important that the <a href="../configuration/optional-settings.html#time_zone"><code>TIME_ZONE</code></a> setting on your Nautobot servers and Celery Beat server match to prevent scheduled jobs from running at the wrong time. See the <a href="../configuration/time-zones.html">time zones</a> documentation for more information.</p>
8306
8399
  </div>
8307
- <p>To establish the <code>systemd</code> unit file for the Celery Beat scheduler, copy and paste the following into <code>/etc/systemd/system/nautobot-scheduler.service</code>:</p>
8308
- <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="k">[Unit]</span>
8309
- <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="na">Description</span><span class="o">=</span><span class="s">Nautobot Celery Beat Scheduler</span>
8310
- <a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="na">Documentation</span><span class="o">=</span><span class="s">https://docs.nautobot.com/projects/core/en/stable/</span>
8311
- <a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="na">After</span><span class="o">=</span><span class="s">network-online.target</span>
8312
- <a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="na">Wants</span><span class="o">=</span><span class="s">network-online.target</span>
8313
- <a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a>
8314
- <a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a><span class="k">[Service]</span>
8315
- <a id="__codelineno-5-8" name="__codelineno-5-8" href="#__codelineno-5-8"></a><span class="na">Type</span><span class="o">=</span><span class="s">exec</span>
8316
- <a id="__codelineno-5-9" name="__codelineno-5-9" href="#__codelineno-5-9"></a><span class="na">Environment</span><span class="o">=</span><span class="s">&quot;NAUTOBOT_ROOT=/opt/nautobot&quot;</span>
8317
- <a id="__codelineno-5-10" name="__codelineno-5-10" href="#__codelineno-5-10"></a>
8318
- <a id="__codelineno-5-11" name="__codelineno-5-11" href="#__codelineno-5-11"></a><span class="na">User</span><span class="o">=</span><span class="s">nautobot</span>
8319
- <a id="__codelineno-5-12" name="__codelineno-5-12" href="#__codelineno-5-12"></a><span class="na">Group</span><span class="o">=</span><span class="s">nautobot</span>
8320
- <a id="__codelineno-5-13" name="__codelineno-5-13" href="#__codelineno-5-13"></a><span class="na">PIDFile</span><span class="o">=</span><span class="s">/var/tmp/nautobot-scheduler.pid</span>
8321
- <a id="__codelineno-5-14" name="__codelineno-5-14" href="#__codelineno-5-14"></a><span class="na">WorkingDirectory</span><span class="o">=</span><span class="s">/opt/nautobot</span>
8322
- <a id="__codelineno-5-15" name="__codelineno-5-15" href="#__codelineno-5-15"></a>
8323
- <a id="__codelineno-5-16" name="__codelineno-5-16" href="#__codelineno-5-16"></a><span class="na">ExecStart</span><span class="o">=</span><span class="s">/opt/nautobot/bin/nautobot-server celery beat --loglevel INFO --pidfile /var/tmp/nautobot-scheduler.pid</span>
8324
- <a id="__codelineno-5-17" name="__codelineno-5-17" href="#__codelineno-5-17"></a>
8325
- <a id="__codelineno-5-18" name="__codelineno-5-18" href="#__codelineno-5-18"></a><span class="na">Restart</span><span class="o">=</span><span class="s">always</span>
8326
- <a id="__codelineno-5-19" name="__codelineno-5-19" href="#__codelineno-5-19"></a><span class="na">RestartSec</span><span class="o">=</span><span class="s">30</span>
8327
- <a id="__codelineno-5-20" name="__codelineno-5-20" href="#__codelineno-5-20"></a><span class="na">PrivateTmp</span><span class="o">=</span><span class="s">true</span>
8328
- <a id="__codelineno-5-21" name="__codelineno-5-21" href="#__codelineno-5-21"></a>
8329
- <a id="__codelineno-5-22" name="__codelineno-5-22" href="#__codelineno-5-22"></a><span class="k">[Install]</span>
8330
- <a id="__codelineno-5-23" name="__codelineno-5-23" href="#__codelineno-5-23"></a><span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span>
8400
+ <p>To establish the <code>systemd</code> unit file for the Celery Beat scheduler, copy and paste the following into the scheduler service file.</p>
8401
+ <div class="tabbed-set tabbed-alternate" data-tabs="4:2"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">Vim</label><label for="__tabbed_4_2">Nano</label></div>
8402
+ <div class="tabbed-content">
8403
+ <div class="tabbed-block">
8404
+ <div class="highlight"><span class="filename">Edit scheduler service file with Vim</span><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>sudo vim /etc/systemd/system/nautobot-scheduler.service
8405
+ </code></pre></div>
8406
+ </div>
8407
+ <div class="tabbed-block">
8408
+ <div class="highlight"><span class="filename">Edit scheduler service file with Nano</span><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>sudo nano /etc/systemd/system/nautobot-scheduler.service
8409
+ </code></pre></div>
8410
+ </div>
8411
+ </div>
8412
+ </div>
8413
+ <div class="highlight"><span class="filename">/etc/systemd/system/nautobot-scheduler.service</span><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="k">[Unit]</span>
8414
+ <a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a><span class="na">Description</span><span class="o">=</span><span class="s">Nautobot Celery Beat Scheduler</span>
8415
+ <a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a><span class="na">Documentation</span><span class="o">=</span><span class="s">https://docs.nautobot.com/projects/core/en/stable/</span>
8416
+ <a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a><span class="na">After</span><span class="o">=</span><span class="s">network-online.target</span>
8417
+ <a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a><span class="na">Wants</span><span class="o">=</span><span class="s">network-online.target</span>
8418
+ <a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a>
8419
+ <a id="__codelineno-13-7" name="__codelineno-13-7" href="#__codelineno-13-7"></a><span class="k">[Service]</span>
8420
+ <a id="__codelineno-13-8" name="__codelineno-13-8" href="#__codelineno-13-8"></a><span class="na">Type</span><span class="o">=</span><span class="s">exec</span>
8421
+ <a id="__codelineno-13-9" name="__codelineno-13-9" href="#__codelineno-13-9"></a><span class="na">Environment</span><span class="o">=</span><span class="s">&quot;NAUTOBOT_ROOT=/opt/nautobot&quot;</span>
8422
+ <a id="__codelineno-13-10" name="__codelineno-13-10" href="#__codelineno-13-10"></a>
8423
+ <a id="__codelineno-13-11" name="__codelineno-13-11" href="#__codelineno-13-11"></a><span class="na">User</span><span class="o">=</span><span class="s">nautobot</span>
8424
+ <a id="__codelineno-13-12" name="__codelineno-13-12" href="#__codelineno-13-12"></a><span class="na">Group</span><span class="o">=</span><span class="s">nautobot</span>
8425
+ <a id="__codelineno-13-13" name="__codelineno-13-13" href="#__codelineno-13-13"></a><span class="na">PIDFile</span><span class="o">=</span><span class="s">/var/tmp/nautobot-scheduler.pid</span>
8426
+ <a id="__codelineno-13-14" name="__codelineno-13-14" href="#__codelineno-13-14"></a><span class="na">WorkingDirectory</span><span class="o">=</span><span class="s">/opt/nautobot</span>
8427
+ <a id="__codelineno-13-15" name="__codelineno-13-15" href="#__codelineno-13-15"></a>
8428
+ <a id="__codelineno-13-16" name="__codelineno-13-16" href="#__codelineno-13-16"></a><span class="na">ExecStart</span><span class="o">=</span><span class="s">/opt/nautobot/bin/nautobot-server celery beat --loglevel INFO --pidfile /var/tmp/nautobot-scheduler.pid</span>
8429
+ <a id="__codelineno-13-17" name="__codelineno-13-17" href="#__codelineno-13-17"></a>
8430
+ <a id="__codelineno-13-18" name="__codelineno-13-18" href="#__codelineno-13-18"></a><span class="na">Restart</span><span class="o">=</span><span class="s">always</span>
8431
+ <a id="__codelineno-13-19" name="__codelineno-13-19" href="#__codelineno-13-19"></a><span class="na">RestartSec</span><span class="o">=</span><span class="s">30</span>
8432
+ <a id="__codelineno-13-20" name="__codelineno-13-20" href="#__codelineno-13-20"></a><span class="na">PrivateTmp</span><span class="o">=</span><span class="s">true</span>
8433
+ <a id="__codelineno-13-21" name="__codelineno-13-21" href="#__codelineno-13-21"></a>
8434
+ <a id="__codelineno-13-22" name="__codelineno-13-22" href="#__codelineno-13-22"></a><span class="k">[Install]</span>
8435
+ <a id="__codelineno-13-23" name="__codelineno-13-23" href="#__codelineno-13-23"></a><span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span>
8331
8436
  </code></pre></div>
8332
8437
  <h4 id="migrating-to-celery-from-rq">Migrating to Celery from RQ<a class="headerlink" href="#migrating-to-celery-from-rq" title="Permanent link">&para;</a></h4>
8333
8438
  <p>Prior to migrating, you need to determine whether you have any Apps installed that run custom background tasks that still rely on the RQ worker. There are a few ways to do this. Two of them are:</p>
@@ -8344,20 +8449,20 @@ advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-a
8344
8449
  <li>Replace each decorator of <code>@job</code> with <code>@nautobot_task</code></li>
8345
8450
  </ul>
8346
8451
  <p>For example:</p>
8347
- <div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="gh">diff --git a/task_example.py b/task_example.py</span>
8348
- <a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="gh">index f84073fb5..52baf6096 100644</span>
8349
- <a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="gd">--- a/task_example.py</span>
8350
- <a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a><span class="gi">+++ b/task_example.py</span>
8351
- <a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a><span class="gu">@@ -1,6 +1,6 @@</span>
8352
- <a id="__codelineno-6-6" name="__codelineno-6-6" href="#__codelineno-6-6"></a><span class="gd">-from django_rq import job</span>
8353
- <a id="__codelineno-6-7" name="__codelineno-6-7" href="#__codelineno-6-7"></a><span class="gi">+from nautobot.core.celery import nautobot_task</span>
8354
- <a id="__codelineno-6-8" name="__codelineno-6-8" href="#__codelineno-6-8"></a>
8355
- <a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a>
8356
- <a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a><span class="gd">-@job(&quot;default&quot;)</span>
8357
- <a id="__codelineno-6-11" name="__codelineno-6-11" href="#__codelineno-6-11"></a><span class="gi">+@nautobot_task</span>
8358
- <a id="__codelineno-6-12" name="__codelineno-6-12" href="#__codelineno-6-12"></a><span class="w"> </span>def example_task(*args, **kwargs):
8359
- <a id="__codelineno-6-13" name="__codelineno-6-13" href="#__codelineno-6-13"></a><span class="w"> </span> return &quot;examples are cool!&quot;
8360
- <a id="__codelineno-6-14" name="__codelineno-6-14" href="#__codelineno-6-14"></a>(END)
8452
+ <div class="highlight"><span class="filename">Diff of tasks for celery vs rq</span><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="gh">diff --git a/task_example.py b/task_example.py</span>
8453
+ <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a><span class="gh">index f84073fb5..52baf6096 100644</span>
8454
+ <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="gd">--- a/task_example.py</span>
8455
+ <a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a><span class="gi">+++ b/task_example.py</span>
8456
+ <a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a><span class="gu">@@ -1,6 +1,6 @@</span>
8457
+ <a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a><span class="gd">-from django_rq import job</span>
8458
+ <a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a><span class="gi">+from nautobot.core.celery import nautobot_task</span>
8459
+ <a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a>
8460
+ <a id="__codelineno-14-9" name="__codelineno-14-9" href="#__codelineno-14-9"></a>
8461
+ <a id="__codelineno-14-10" name="__codelineno-14-10" href="#__codelineno-14-10"></a><span class="gd">-@job(&quot;default&quot;)</span>
8462
+ <a id="__codelineno-14-11" name="__codelineno-14-11" href="#__codelineno-14-11"></a><span class="gi">+@nautobot_task</span>
8463
+ <a id="__codelineno-14-12" name="__codelineno-14-12" href="#__codelineno-14-12"></a><span class="w"> </span>def example_task(*args, **kwargs):
8464
+ <a id="__codelineno-14-13" name="__codelineno-14-13" href="#__codelineno-14-13"></a><span class="w"> </span> return &quot;examples are cool!&quot;
8465
+ <a id="__codelineno-14-14" name="__codelineno-14-14" href="#__codelineno-14-14"></a>(END)
8361
8466
  </code></pre></div>
8362
8467
  <div class="admonition warning">
8363
8468
  <p class="admonition-title">Warning</p>
@@ -8365,27 +8470,27 @@ advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-a
8365
8470
  </div>
8366
8471
  <h3 id="configure-systemd">Configure systemd<a class="headerlink" href="#configure-systemd" title="Permanent link">&para;</a></h3>
8367
8472
  <p>Because we just added new service files, you'll need to reload the systemd daemon:</p>
8368
- <div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>sudo systemctl daemon-reload
8473
+ <div class="highlight"><span class="filename">Reload the systemd daemon</span><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>sudo systemctl daemon-reload
8369
8474
  </code></pre></div>
8370
8475
  <p>Then, start the <code>nautobot</code>, <code>nautobot-worker</code>, and <code>nautobot-scheduler</code> services and enable them to initiate at boot time:</p>
8371
- <div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>sudo systemctl enable --now nautobot nautobot-worker nautobot-scheduler
8476
+ <div class="highlight"><span class="filename">Enable Nautobot services</span><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>sudo systemctl enable --now nautobot nautobot-worker nautobot-scheduler
8372
8477
  </code></pre></div>
8373
8478
  <h3 id="verify-the-service">Verify the service<a class="headerlink" href="#verify-the-service" title="Permanent link">&para;</a></h3>
8374
8479
  <p>You can use the command <code>systemctl status nautobot.service</code> to verify that the WSGI service is running:</p>
8375
- <div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>● nautobot.service - Nautobot WSGI Service
8376
- <a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a> Loaded: loaded (/etc/systemd/system/nautobot.service; enabled; vendor preset: enabled)
8377
- <a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a> Active: active (running) since Fri 2021-03-05 22:23:33 UTC; 35min ago
8378
- <a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a> Docs: https://docs.nautobot.com/projects/core/en/stable/
8379
- <a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a> Main PID: 6992 (nautobot-server)
8380
- <a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a> Tasks: 16 (limit: 9513)
8381
- <a id="__codelineno-9-7" name="__codelineno-9-7" href="#__codelineno-9-7"></a> Memory: 221.1M
8382
- <a id="__codelineno-9-8" name="__codelineno-9-8" href="#__codelineno-9-8"></a> CGroup: /system.slice/nautobot.service
8383
- <a id="__codelineno-9-9" name="__codelineno-9-9" href="#__codelineno-9-9"></a> ├─6992 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8384
- <a id="__codelineno-9-10" name="__codelineno-9-10" href="#__codelineno-9-10"></a> ├─7007 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8385
- <a id="__codelineno-9-11" name="__codelineno-9-11" href="#__codelineno-9-11"></a> ├─7010 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8386
- <a id="__codelineno-9-12" name="__codelineno-9-12" href="#__codelineno-9-12"></a> ├─7013 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8387
- <a id="__codelineno-9-13" name="__codelineno-9-13" href="#__codelineno-9-13"></a> ├─7016 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8388
- <a id="__codelineno-9-14" name="__codelineno-9-14" href="#__codelineno-9-14"></a> └─7019 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8480
+ <div class="highlight"><span class="filename">Validate services are running</span><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>● nautobot.service - Nautobot WSGI Service
8481
+ <a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a> Loaded: loaded (/etc/systemd/system/nautobot.service; enabled; vendor preset: enabled)
8482
+ <a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a> Active: active (running) since Fri 2021-03-05 22:23:33 UTC; 35min ago
8483
+ <a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a> Docs: https://docs.nautobot.com/projects/core/en/stable/
8484
+ <a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a> Main PID: 6992 (nautobot-server)
8485
+ <a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a> Tasks: 16 (limit: 9513)
8486
+ <a id="__codelineno-17-7" name="__codelineno-17-7" href="#__codelineno-17-7"></a> Memory: 221.1M
8487
+ <a id="__codelineno-17-8" name="__codelineno-17-8" href="#__codelineno-17-8"></a> CGroup: /system.slice/nautobot.service
8488
+ <a id="__codelineno-17-9" name="__codelineno-17-9" href="#__codelineno-17-9"></a> ├─6992 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8489
+ <a id="__codelineno-17-10" name="__codelineno-17-10" href="#__codelineno-17-10"></a> ├─7007 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8490
+ <a id="__codelineno-17-11" name="__codelineno-17-11" href="#__codelineno-17-11"></a> ├─7010 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8491
+ <a id="__codelineno-17-12" name="__codelineno-17-12" href="#__codelineno-17-12"></a> ├─7013 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8492
+ <a id="__codelineno-17-13" name="__codelineno-17-13" href="#__codelineno-17-13"></a> ├─7016 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8493
+ <a id="__codelineno-17-14" name="__codelineno-17-14" href="#__codelineno-17-14"></a> └─7019 /opt/nautobot/bin/python3 /opt/nautobot/bin/nautobot-server start /&gt;
8389
8494
  </code></pre></div>
8390
8495
  <div class="admonition note">
8391
8496
  <p class="admonition-title">Note</p>
@@ -8395,25 +8500,28 @@ advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-a
8395
8500
  <h2 id="troubleshooting">Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permanent link">&para;</a></h2>
8396
8501
  <h3 id="operational-error-incorrect-string-value">Operational Error: Incorrect string value<a class="headerlink" href="#operational-error-incorrect-string-value" title="Permanent link">&para;</a></h3>
8397
8502
  <p>When using MySQL as a database backend, if you encounter a server error along the lines of <code>Incorrect string value: '\\xF0\\x9F\\x92\\x80' for column</code>, it is because you are running afoul of the legacy implementation of Unicode (aka <code>utf8</code>) encoding in MySQL. This often occurs when using modern Unicode glyphs like the famous poop emoji.</p>
8398
- <p>Please see the <a href="../configuration/required-settings.html#mysql-unicode-settings">configuration guide on MySQL Unicode settings</a> for instructions on how to address this.</p>
8503
+ <p>Please see the <a href="../configuration/required-settings.html#databases">configuration guide on MySQL Unicode settings</a> for instructions on how to address this.</p>
8399
8504
  <p>Please see <a href="https://github.com/nautobot/nautobot/issues/645">Computed fields with fallback value that is unicode results in OperationalError (#645)</a> for more details.</p>
8400
8505
  <h3 id="svg-images-not-rendered">SVG images not rendered<a class="headerlink" href="#svg-images-not-rendered" title="Permanent link">&para;</a></h3>
8401
8506
  <p>When serving Nautobot directly from uWSGI on RedHat or CentOS there may be a problem rendering .svg images to include the Nautobot logo. On the RedHat based operating systems there is no file <code>/etc/mime.types</code> by default, unfortunately, uWSGI looks for this file to serve static files (see <a href="https://uwsgi-docs.readthedocs.io/en/latest/StaticFiles.html#mime-types">Serving static files with uWSGI</a>). To work around this copy the file <code>/etc/mime.types</code> from a known good system for example an Ubuntu/Debian system or even the Nautobot container to /opt/nautobot/mime.types. Then add the following line to your <code>uwsgi.ini</code> file and restart the Nautobot services:</p>
8402
- <div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>mime-file = /opt/nautobot/mime.types
8507
+ <div class="highlight"><span class="filename">Add MIME file settings to uwsgi.ini</span><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>mime-file = /opt/nautobot/mime.types
8403
8508
  </code></pre></div>
8404
8509
  <p>Alternatively, host Nautobot behind Nginx as instructed in <a href="http-server.html">HTTP server setup</a>.</p>
8405
8510
  <h3 id="test-redis-connectivity">Test Redis Connectivity<a class="headerlink" href="#test-redis-connectivity" title="Permanent link">&para;</a></h3>
8511
+ <details class="info">
8512
+ <summary>Test Redis Connectivity with Python</summary>
8406
8513
  <p>From a nautobot shell (<code>nautobot-server shell_plus</code>) use the following Python commands to test connectivity to your Redis server. If successful, python should not return any exceptions.</p>
8407
- <div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="kn">import</span> <span class="nn">os</span>
8408
- <a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a><span class="kn">import</span> <span class="nn">redis</span>
8409
- <a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="kn">from</span> <span class="nn">nautobot.core.settings_funcs</span> <span class="kn">import</span> <span class="n">parse_redis_connection</span>
8410
- <a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a>
8411
- <a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a><span class="n">connection</span> <span class="o">=</span> <span class="n">parse_redis_connection</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
8412
- <a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a><span class="n">client</span> <span class="o">=</span> <span class="n">redis</span><span class="o">.</span><span class="n">from_url</span><span class="p">(</span><span class="n">connection</span><span class="p">)</span>
8413
- <a id="__codelineno-11-7" name="__codelineno-11-7" href="#__codelineno-11-7"></a><span class="n">client</span><span class="o">.</span><span class="n">ping</span><span class="p">()</span> <span class="c1"># test basic connectivity</span>
8414
- <a id="__codelineno-11-8" name="__codelineno-11-8" href="#__codelineno-11-8"></a><span class="n">client</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="c1"># retrieve a list of keys in the redis database</span>
8415
- <a id="__codelineno-11-9" name="__codelineno-11-9" href="#__codelineno-11-9"></a><span class="n">client</span><span class="o">.</span><span class="n">auth</span><span class="p">(</span><span class="n">password</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;NAUTOBOT_REDIS_PASSWORD&quot;</span><span class="p">))</span> <span class="c1"># test password authentication</span>
8514
+ <div class="highlight"><span class="filename">Test Redis Connectivity via Python</span><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="kn">import</span> <span class="nn">os</span>
8515
+ <a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a><span class="kn">import</span> <span class="nn">redis</span>
8516
+ <a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a><span class="kn">from</span> <span class="nn">nautobot.core.settings_funcs</span> <span class="kn">import</span> <span class="n">parse_redis_connection</span>
8517
+ <a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a>
8518
+ <a id="__codelineno-19-5" name="__codelineno-19-5" href="#__codelineno-19-5"></a><span class="n">connection</span> <span class="o">=</span> <span class="n">parse_redis_connection</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
8519
+ <a id="__codelineno-19-6" name="__codelineno-19-6" href="#__codelineno-19-6"></a><span class="n">client</span> <span class="o">=</span> <span class="n">redis</span><span class="o">.</span><span class="n">from_url</span><span class="p">(</span><span class="n">connection</span><span class="p">)</span>
8520
+ <a id="__codelineno-19-7" name="__codelineno-19-7" href="#__codelineno-19-7"></a><span class="n">client</span><span class="o">.</span><span class="n">ping</span><span class="p">()</span> <span class="c1"># test basic connectivity</span>
8521
+ <a id="__codelineno-19-8" name="__codelineno-19-8" href="#__codelineno-19-8"></a><span class="n">client</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="c1"># retrieve a list of keys in the redis database</span>
8522
+ <a id="__codelineno-19-9" name="__codelineno-19-9" href="#__codelineno-19-9"></a><span class="n">client</span><span class="o">.</span><span class="n">auth</span><span class="p">(</span><span class="n">password</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;NAUTOBOT_REDIS_PASSWORD&quot;</span><span class="p">))</span> <span class="c1"># test password authentication</span>
8416
8523
  </code></pre></div>
8524
+ </details>
8417
8525
 
8418
8526
 
8419
8527
 
@@ -8431,6 +8539,8 @@ advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-a
8431
8539
  </div>
8432
8540
 
8433
8541
 
8542
+ <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
8543
+
8434
8544
  <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
8435
8545
  </div>
8436
8546
 
@@ -8508,7 +8618,7 @@ advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-a
8508
8618
 
8509
8619
 
8510
8620
  <a href="https://blog.networktocode.com/blog/tags/nautobot" target="_blank" rel="noopener" title="Network to Code Blog" class="md-social__link">
8511
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64zm0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0zm32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32z"/></svg>
8621
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64zm0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0zm32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32z"/></svg>
8512
8622
  </a>
8513
8623
 
8514
8624
 
@@ -8516,7 +8626,7 @@ advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-a
8516
8626
 
8517
8627
 
8518
8628
  <a href="https://www.youtube.com/playlist?list=PLjA0bhxgryJ2Ts4GJMDA-tPzVWEncv4pb" target="_blank" rel="noopener" title="Nautobot Videos" class="md-social__link">
8519
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
8629
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
8520
8630
  </a>
8521
8631
 
8522
8632
 
@@ -8524,7 +8634,7 @@ advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-a
8524
8634
 
8525
8635
 
8526
8636
  <a href="https://www.networktocode.com/community/" target="_blank" rel="noopener" title="Network to Code Community" class="md-social__link">
8527
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z"/></svg>
8637
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z"/></svg>
8528
8638
  </a>
8529
8639
 
8530
8640
 
@@ -8532,7 +8642,7 @@ advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-a
8532
8642
 
8533
8643
 
8534
8644
  <a href="https://github.com/nautobot/nautobot" target="_blank" rel="noopener" title="GitHub Repo" class="md-social__link">
8535
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
8645
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
8536
8646
  </a>
8537
8647
 
8538
8648
 
@@ -8540,7 +8650,7 @@ advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-a
8540
8650
 
8541
8651
 
8542
8652
  <a href="https://twitter.com/networktocode" target="_blank" rel="noopener" title="Network to Code Twitter" class="md-social__link">
8543
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
8653
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
8544
8654
  </a>
8545
8655
 
8546
8656
  </div>
@@ -8555,10 +8665,10 @@ advantage of the <a href="../../platform-functionality/jobs/job-scheduling-and-a
8555
8665
  </div>
8556
8666
 
8557
8667
 
8558
- <script id="__config" type="application/json">{"base": "../../..", "features": ["content.code.copy", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../../../assets/javascripts/workers/search.b8dbb3d2.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>
8668
+ <script id="__config" type="application/json">{"base": "../../..", "features": ["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.b8dbb3d2.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>
8559
8669
 
8560
8670
 
8561
- <script src="../../../assets/javascripts/bundle.bd41221c.min.js"></script>
8671
+ <script src="../../../assets/javascripts/bundle.ebd0bdb7.min.js"></script>
8562
8672
 
8563
8673
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
8564
8674