nautobot 2.4.2__py3-none-any.whl → 2.4.4__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.
Files changed (267) hide show
  1. nautobot/apps/filters.py +2 -0
  2. nautobot/circuits/filters.py +1 -1
  3. nautobot/circuits/templates/circuits/inc/circuit_termination.html +1 -1
  4. nautobot/circuits/tests/integration/test_circuit.py +135 -0
  5. nautobot/circuits/tests/test_models.py +5 -3
  6. nautobot/circuits/views.py +4 -1
  7. nautobot/cloud/api/views.py +3 -3
  8. nautobot/cloud/filters.py +3 -6
  9. nautobot/cloud/tests/test_filters.py +21 -0
  10. nautobot/core/admin.py +2 -0
  11. nautobot/core/constants.py +0 -1
  12. nautobot/core/forms/__init__.py +2 -0
  13. nautobot/core/forms/forms.py +2 -1
  14. nautobot/core/forms/widgets.py +8 -0
  15. nautobot/core/jobs/__init__.py +2 -1
  16. nautobot/core/management/commands/generate_performance_test_endpoints.py +271 -0
  17. nautobot/core/models/utils.py +6 -1
  18. nautobot/core/templates/generic/object_bulk_delete.html +1 -1
  19. nautobot/core/templates/generic/object_bulk_edit.html +1 -1
  20. nautobot/core/templates/generic/object_bulk_import.html +1 -1
  21. nautobot/core/templates/generic/object_create.html +5 -0
  22. nautobot/core/templates/generic/object_delete.html +1 -1
  23. nautobot/core/templates/generic/object_detail.html +1 -1
  24. nautobot/core/templates/generic/object_edit.html +1 -1
  25. nautobot/core/templates/inc/javascript.html +3 -0
  26. nautobot/core/templates/widgets/clearable_file.html +5 -0
  27. nautobot/core/templatetags/helpers.py +3 -3
  28. nautobot/core/templatetags/ui_framework.py +20 -4
  29. nautobot/core/testing/forms.py +1 -1
  30. nautobot/core/testing/integration.py +37 -7
  31. nautobot/core/tests/test_api.py +1 -1
  32. nautobot/core/tests/test_commands.py +31 -0
  33. nautobot/core/tests/test_graphql.py +3 -3
  34. nautobot/core/tests/test_jobs.py +4 -1
  35. nautobot/core/tests/test_utils.py +17 -2
  36. nautobot/core/ui/object_detail.py +1 -1
  37. nautobot/core/utils/lookup.py +12 -1
  38. nautobot/core/views/generic.py +9 -1
  39. nautobot/core/views/mixins.py +9 -1
  40. nautobot/dcim/api/serializers.py +36 -0
  41. nautobot/dcim/api/views.py +12 -11
  42. nautobot/dcim/elevations.py +17 -4
  43. nautobot/dcim/factory.py +9 -1
  44. nautobot/dcim/filters/__init__.py +27 -1
  45. nautobot/dcim/forms.py +16 -7
  46. nautobot/dcim/models/devices.py +12 -7
  47. nautobot/dcim/signals.py +26 -0
  48. nautobot/dcim/templates/dcim/cable_trace.html +4 -4
  49. nautobot/dcim/templates/dcim/consoleport.html +14 -4
  50. nautobot/dcim/templates/dcim/consoleserverport.html +14 -4
  51. nautobot/dcim/templates/dcim/device/lldp_neighbors.html +3 -3
  52. nautobot/dcim/templates/dcim/frontport.html +7 -2
  53. nautobot/dcim/templates/dcim/interface.html +9 -4
  54. nautobot/dcim/templates/dcim/powerfeed.html +8 -3
  55. nautobot/dcim/templates/dcim/poweroutlet.html +14 -4
  56. nautobot/dcim/templates/dcim/powerport.html +14 -4
  57. nautobot/dcim/templates/dcim/rearport.html +7 -2
  58. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +0 -62
  59. nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +6 -0
  60. nautobot/dcim/tests/integration/test_fileinputpicker.py +87 -0
  61. nautobot/dcim/tests/test_api.py +176 -0
  62. nautobot/dcim/tests/test_filters.py +56 -3
  63. nautobot/dcim/tests/test_models.py +41 -1
  64. nautobot/dcim/views.py +24 -14
  65. nautobot/extras/api/mixins.py +1 -1
  66. nautobot/extras/api/views.py +4 -4
  67. nautobot/extras/filters/__init__.py +4 -0
  68. nautobot/extras/forms/forms.py +4 -0
  69. nautobot/extras/jobs.py +8 -1
  70. nautobot/extras/models/datasources.py +7 -3
  71. nautobot/extras/plugins/__init__.py +26 -1
  72. nautobot/extras/templates/extras/inc/jobresult.html +12 -13
  73. nautobot/extras/templates/extras/job.html +1 -0
  74. nautobot/extras/templates/extras/objectchange.html +28 -12
  75. nautobot/extras/tests/test_api.py +16 -15
  76. nautobot/extras/tests/test_dynamicgroups.py +14 -0
  77. nautobot/extras/tests/test_filters.py +2 -0
  78. nautobot/extras/tests/test_plugins.py +32 -1
  79. nautobot/extras/tests/test_views.py +209 -11
  80. nautobot/extras/utils.py +30 -0
  81. nautobot/extras/views.py +32 -14
  82. nautobot/ipam/api/serializers.py +7 -8
  83. nautobot/ipam/api/views.py +5 -5
  84. nautobot/ipam/factory.py +27 -8
  85. nautobot/ipam/filters.py +67 -29
  86. nautobot/ipam/formfields.py +51 -0
  87. nautobot/ipam/forms.py +15 -7
  88. nautobot/ipam/migrations/0051_added_optional_vrf_relationship_to_vdc.py +41 -0
  89. nautobot/ipam/models.py +63 -5
  90. nautobot/ipam/tables.py +21 -7
  91. nautobot/ipam/tests/test_api.py +107 -66
  92. nautobot/ipam/tests/test_filters.py +145 -5
  93. nautobot/ipam/tests/test_views.py +15 -2
  94. nautobot/project-static/bootstrap-filestyle-1.2.3/bootstrap-filestyle.min.js +11 -0
  95. nautobot/project-static/css/base.css +11 -0
  96. nautobot/project-static/css/dark.css +2 -1
  97. nautobot/project-static/docs/apps/index.html +1 -1
  98. nautobot/project-static/docs/apps/nautobot-apps.html +1 -1
  99. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +62 -0
  100. nautobot/project-static/docs/development/apps/api/configuration-view.html +0 -3
  101. nautobot/project-static/docs/development/apps/api/models/graphql.html +9 -13
  102. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +94 -1
  103. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +2 -5
  104. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +0 -3
  105. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +0 -3
  106. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +0 -3
  107. nautobot/project-static/docs/development/apps/api/prometheus.html +0 -3
  108. nautobot/project-static/docs/development/apps/api/setup.html +1 -1
  109. nautobot/project-static/docs/development/apps/api/testing.html +0 -6
  110. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +0 -3
  111. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +0 -3
  112. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +0 -3
  113. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +0 -3
  114. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +1 -7
  115. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +0 -7
  116. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +0 -4
  117. nautobot/project-static/docs/development/apps/api/views/notes.html +0 -3
  118. nautobot/project-static/docs/development/apps/index.html +2 -35
  119. nautobot/project-static/docs/development/apps/migration/code-updates.html +7 -6
  120. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +2 -2
  121. nautobot/project-static/docs/development/apps/migration/from-v1.html +3 -3
  122. nautobot/project-static/docs/development/core/application-registry.html +0 -6
  123. nautobot/project-static/docs/development/core/best-practices.html +1 -28
  124. nautobot/project-static/docs/development/core/bootstrap-ui.html +1 -1
  125. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +65 -11
  126. nautobot/project-static/docs/development/core/getting-started.html +14 -18
  127. nautobot/project-static/docs/development/core/homepage.html +0 -3
  128. nautobot/project-static/docs/development/core/index.html +1 -1
  129. nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +3 -3
  130. nautobot/project-static/docs/development/core/model-checklist.html +1 -1
  131. nautobot/project-static/docs/development/core/navigation-menu.html +1 -1
  132. nautobot/project-static/docs/development/core/release-checklist.html +1 -1
  133. nautobot/project-static/docs/development/core/settings.html +1 -1
  134. nautobot/project-static/docs/development/core/style-guide.html +4 -9
  135. nautobot/project-static/docs/development/core/templates.html +0 -3
  136. nautobot/project-static/docs/development/core/testing.html +0 -9
  137. nautobot/project-static/docs/development/jobs/index.html +11 -30
  138. nautobot/project-static/docs/development/jobs/migration/from-v1.html +3 -2
  139. nautobot/project-static/docs/index.html +3 -2
  140. nautobot/project-static/docs/objects.inv +0 -0
  141. nautobot/project-static/docs/overview/application_stack.html +2 -20
  142. nautobot/project-static/docs/release-notes/version-1.0.html +2 -2
  143. nautobot/project-static/docs/release-notes/version-1.1.html +2 -2
  144. nautobot/project-static/docs/release-notes/version-1.2.html +3 -3
  145. nautobot/project-static/docs/release-notes/version-1.3.html +1 -1
  146. nautobot/project-static/docs/release-notes/version-1.4.html +17 -17
  147. nautobot/project-static/docs/release-notes/version-1.5.html +8 -8
  148. nautobot/project-static/docs/release-notes/version-1.6.html +4 -4
  149. nautobot/project-static/docs/release-notes/version-2.0.html +10 -10
  150. nautobot/project-static/docs/release-notes/version-2.1.html +7 -7
  151. nautobot/project-static/docs/release-notes/version-2.2.html +1 -1
  152. nautobot/project-static/docs/release-notes/version-2.3.html +4 -4
  153. nautobot/project-static/docs/release-notes/version-2.4.html +379 -0
  154. nautobot/project-static/docs/requirements.txt +1 -1
  155. nautobot/project-static/docs/search/search_index.json +1 -1
  156. nautobot/project-static/docs/sitemap.xml +290 -290
  157. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  158. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +3 -3
  159. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +4 -4
  160. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +1 -1
  161. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +3 -13
  162. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +5 -5
  163. nautobot/project-static/docs/user-guide/administration/guides/docker.html +3 -18
  164. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +1 -1
  165. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +4 -4
  166. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +15 -15
  167. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +2 -2
  168. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +1 -1
  169. nautobot/project-static/docs/user-guide/administration/installation/index.html +0 -16
  170. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +1 -1
  171. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +7 -10
  172. nautobot/project-static/docs/user-guide/administration/installation/services.html +1 -12
  173. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +3 -3
  174. nautobot/project-static/docs/user-guide/administration/security/index.html +1 -1
  175. nautobot/project-static/docs/user-guide/administration/security/notices.html +1 -0
  176. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +5 -35
  177. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +1 -1
  178. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/tables/v2-code-location-changes.yaml +1 -1
  179. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +12 -9
  180. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +0 -4
  181. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +0 -3
  182. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +0 -4
  183. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +0 -4
  184. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +0 -4
  185. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +0 -4
  186. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +0 -4
  187. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +0 -4
  188. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +0 -3
  189. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +0 -4
  190. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +0 -4
  191. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +0 -4
  192. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +1 -17
  193. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +0 -3
  194. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +0 -4
  195. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +0 -4
  196. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +0 -3
  197. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +1 -7
  198. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +0 -4
  199. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +0 -4
  200. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +0 -4
  201. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +0 -4
  202. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +0 -4
  203. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +0 -4
  204. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +0 -4
  205. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +0 -6
  206. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +0 -3
  207. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +0 -4
  208. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +0 -4
  209. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +0 -8
  210. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +15 -15
  211. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +1 -1
  212. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +0 -6
  213. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +0 -3
  214. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +3 -15
  215. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +1 -27
  216. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +0 -8
  217. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +3 -6
  218. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +0 -8
  219. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +0 -7
  220. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +0 -3
  221. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +0 -3
  222. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +2 -2
  223. nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +6 -6
  224. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +0 -14
  225. nautobot/project-static/docs/user-guide/platform-functionality/note.html +0 -3
  226. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +1 -10
  227. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +0 -3
  228. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +0 -14
  229. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +0 -19
  230. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +3 -9
  231. nautobot/project-static/docs/user-guide/platform-functionality/status.html +0 -8
  232. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +0 -4
  233. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +1 -13
  234. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +0 -5
  235. nautobot/project-static/js/dropdown.js +28 -0
  236. nautobot/project-static/js/editor.js +292 -0
  237. nautobot/project-static/monaco-editor-0.52.2/README.md +81 -0
  238. nautobot/project-static/monaco-editor-0.52.2/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  239. nautobot/project-static/monaco-editor-0.52.2/vs/base/worker/workerMain.js +31 -0
  240. nautobot/project-static/monaco-editor-0.52.2/vs/basic-languages/xml/xml.js +10 -0
  241. nautobot/project-static/monaco-editor-0.52.2/vs/basic-languages/yaml/yaml.js +10 -0
  242. nautobot/project-static/monaco-editor-0.52.2/vs/editor/editor.main.css +8 -0
  243. nautobot/project-static/monaco-editor-0.52.2/vs/editor/editor.main.js +798 -0
  244. nautobot/project-static/monaco-editor-0.52.2/vs/language/json/jsonMode.js +19 -0
  245. nautobot/project-static/monaco-editor-0.52.2/vs/language/json/jsonWorker.js +42 -0
  246. nautobot/project-static/monaco-editor-0.52.2/vs/loader.js +11 -0
  247. nautobot/tenancy/filters/__init__.py +3 -5
  248. nautobot/tenancy/forms.py +9 -0
  249. nautobot/tenancy/templates/tenancy/tenant_create.html +21 -0
  250. nautobot/tenancy/templates/tenancy/tenant_edit.html +2 -21
  251. nautobot/tenancy/templates/tenancy/tenantgroup.html +2 -44
  252. nautobot/tenancy/templates/tenancy/tenantgroup_retrieve.html +1 -0
  253. nautobot/tenancy/tests/test_filters.py +10 -0
  254. nautobot/tenancy/tests/test_views.py +5 -1
  255. nautobot/tenancy/urls.py +7 -79
  256. nautobot/tenancy/views.py +51 -80
  257. nautobot/virtualization/views.py +0 -1
  258. nautobot/wireless/api/serializers.py +6 -1
  259. nautobot/wireless/api/views.py +3 -3
  260. nautobot/wireless/tables.py +9 -4
  261. nautobot/wireless/tests/test_api.py +5 -9
  262. {nautobot-2.4.2.dist-info → nautobot-2.4.4.dist-info}/METADATA +9 -9
  263. {nautobot-2.4.2.dist-info → nautobot-2.4.4.dist-info}/RECORD +267 -246
  264. {nautobot-2.4.2.dist-info → nautobot-2.4.4.dist-info}/LICENSE.txt +0 -0
  265. {nautobot-2.4.2.dist-info → nautobot-2.4.4.dist-info}/NOTICE +0 -0
  266. {nautobot-2.4.2.dist-info → nautobot-2.4.4.dist-info}/WHEEL +0 -0
  267. {nautobot-2.4.2.dist-info → nautobot-2.4.4.dist-info}/entry_points.txt +0 -0
@@ -9131,14 +9131,6 @@
9131
9131
  <li>Decommissioning</li>
9132
9132
  <li>Failed</li>
9133
9133
  </ul>
9134
- <details class="version-added">
9135
- <summary>Added in version 1.4.0</summary>
9136
- <ul>
9137
- <li>Added <code>bridge</code> field.</li>
9138
- <li>Added <code>parent_interface</code> field.</li>
9139
- <li>Added <code>status</code> field.</li>
9140
- </ul>
9141
- </details>
9142
9134
  <details class="version-changed">
9143
9135
  <summary>Changed in version 2.0.0</summary>
9144
9136
  <p>The relationship to IP addresses has been changed to a many-to-many relationship. This allows an IP address to be assigned to multiple VM interfaces, and a VM interface to have multiple IP addresses assigned to it.</p>
@@ -2364,7 +2364,7 @@
2364
2364
  <li class="md-nav__item">
2365
2365
  <a href="#retrieve-custom-field-data-in-the-rest-api" class="md-nav__link">
2366
2366
  <span class="md-ellipsis">
2367
- Retrieve Custom Field Data in the Rest API
2367
+ Retrieve Custom Field Data in the REST API
2368
2368
  </span>
2369
2369
  </a>
2370
2370
 
@@ -2439,7 +2439,7 @@
2439
2439
  <li class="md-nav__item">
2440
2440
  <a href="#modify-custom-field-data-in-the-rest-api" class="md-nav__link">
2441
2441
  <span class="md-ellipsis">
2442
- Modify Custom Field Data in the Rest API
2442
+ Modify Custom Field Data in the REST API
2443
2443
  </span>
2444
2444
  </a>
2445
2445
 
@@ -9713,7 +9713,7 @@
9713
9713
  <li class="md-nav__item">
9714
9714
  <a href="#retrieve-custom-field-data-in-the-rest-api" class="md-nav__link">
9715
9715
  <span class="md-ellipsis">
9716
- Retrieve Custom Field Data in the Rest API
9716
+ Retrieve Custom Field Data in the REST API
9717
9717
  </span>
9718
9718
  </a>
9719
9719
 
@@ -9788,7 +9788,7 @@
9788
9788
  <li class="md-nav__item">
9789
9789
  <a href="#modify-custom-field-data-in-the-rest-api" class="md-nav__link">
9790
9790
  <span class="md-ellipsis">
9791
- Modify Custom Field Data in the Rest API
9791
+ Modify Custom Field Data in the REST API
9792
9792
  </span>
9793
9793
  </a>
9794
9794
 
@@ -9858,10 +9858,10 @@
9858
9858
  <p>The default value for a select or multi-select field must match one of the existing choices. If the desired default value is not in the list of choices, the choices must be updated and saved before the default can be changed. As a result of this behavior, default values cannot be set on select and multi-select fields when a custom field is created.</p>
9859
9859
  </div>
9860
9860
  <h4 id="filter-logic">Filter Logic<a class="headerlink" href="#filter-logic" title="Permanent link">&para;</a></h4>
9861
- <details class="version-changed">
9862
- <summary>Changed in version 1.4.0</summary>
9861
+ <div class="admonition tip">
9862
+ <p class="admonition-title">Tip</p>
9863
9863
  <p>Custom field <a href="../platform-functionality/rest-api/filtering.html#lookup-expressions">extended filtering</a> introduced extended lookup expression filters for <code>exact</code> and <code>icontains</code>, duplicating the functionality of both the <code>Strict</code> and <code>Loose</code> settings.</p>
9864
- </details>
9864
+ </div>
9865
9865
  <p>The filter logic setting applies to filtering on custom fields in the UI and API. For example, when filtering in the API to find a device with the custom field <code>cf1</code> set to <code>"abc"</code> you would query <code>/api/dcim/devices/?cf_cf1=abc</code>. If the filter logic setting is set to <code>Loose</code> this would match on <code>"ABC"</code> and <code>"abcdef"</code>. If the filter logic setting is set to <code>Strict</code> only devices with the custom field set to exactly "abc" (case sensitive) would be returned. If the filter logic setting is set to <code>disabled</code>, no filters will be available for this custom field, including extended lookup filters. The <code>Loose</code> and <code>Strict</code> settings only change the behavior of the default filter (<code>cf_customfieldname</code>) on <code>text</code>, <code>url</code> and <code>json</code> custom fields.</p>
9866
9866
  <h4 id="move-to-advanced-tab">Move to Advanced Tab<a class="headerlink" href="#move-to-advanced-tab" title="Permanent link">&para;</a></h4>
9867
9867
  <p>When selected, the custom field will appear in the "Advanced" tab of the object detail view instead of the default tab.</p>
@@ -9879,7 +9879,7 @@
9879
9879
  <h4 id="maximum-value">Maximum value<a class="headerlink" href="#maximum-value" title="Permanent link">&para;</a></h4>
9880
9880
  <p>Maximum allowed value for <code>Integer</code> fields. Maximum allowed length for <code>Text</code>, <code>URL</code>, <code>JSON</code>, and <code>Markdown</code> fields. Maximum allowed length of each defined choice for a <code>Select</code> or <code>Multiple Selection</code> field.</p>
9881
9881
  <h4 id="validation-regex">Validation Regex<a class="headerlink" href="#validation-regex" title="Permanent link">&para;</a></h4>
9882
- <p>Regular expression to enforce on <code>Text</code>, <code>URL</code>, <code>JSON</code>, <code>Markdown</code>, <code>Selection</code> and <code>Multiple selection</code> field values. Regex validation is handled by the <a href="https://docs.python.org/3/library/re.html">python re engine</a> which uses a PCRE or perl-like regular expression syntax. Examples of common regex validations:</p>
9882
+ <p>Regular expression to enforce on <code>Text</code>, <code>URL</code>, <code>JSON</code>, <code>Markdown</code>, <code>Selection</code> and <code>Multiple selection</code> field values. Regex validation is handled by the <a href="https://docs.python.org/3/library/re.html">Python <code>re</code> engine</a> which uses a PCRE or perl-like regular expression syntax. Examples of common regex validations:</p>
9883
9883
  <p>Must start with companyname</p>
9884
9884
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>^companyname
9885
9885
  </code></pre></div>
@@ -9923,7 +9923,7 @@
9923
9923
  <a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a><span class="s1">&#39;1970-01-01&#39;</span>
9924
9924
  </code></pre></div>
9925
9925
  <p>The <code>key</code> of the custom field is used as the key for the associated object's data dictionary.</p>
9926
- <h3 id="retrieve-custom-field-data-in-the-rest-api">Retrieve Custom Field Data in the Rest API<a class="headerlink" href="#retrieve-custom-field-data-in-the-rest-api" title="Permanent link">&para;</a></h3>
9926
+ <h3 id="retrieve-custom-field-data-in-the-rest-api">Retrieve Custom Field Data in the REST API<a class="headerlink" href="#retrieve-custom-field-data-in-the-rest-api" title="Permanent link">&para;</a></h3>
9927
9927
  <p>Custom fields are returned in the API for all supported models in the <code>custom_fields</code> key:</p>
9928
9928
  <details class="info">
9929
9929
  <summary><code>GET http://localhost:8080/api/dcim/devices/ffd8df99-6d1a-41c3-b19f-b8357eefc481/</code></summary>
@@ -10006,7 +10006,7 @@
10006
10006
  </code></pre></div>
10007
10007
  </details>
10008
10008
  <h4 id="filter-queries-on-custom-field-data-in-graphql">Filter Queries on Custom Field Data in GraphQL<a class="headerlink" href="#filter-queries-on-custom-field-data-in-graphql" title="Permanent link">&para;</a></h4>
10009
- <p>Queries can also be filtered by custom field values using any of the filters available in the UI and Rest API:</p>
10009
+ <p>Queries can also be filtered by custom field values using any of the filters available in the UI and REST API:</p>
10010
10010
  <div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a># Retrieve devices where custom field support_group
10011
10011
  <a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a># does not contain &quot;Network Operations&quot; (case insensitive)
10012
10012
  <a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a>{
@@ -10034,7 +10034,7 @@
10034
10034
  </details>
10035
10035
  <h2 id="modifying-custom-field-data">Modifying Custom Field Data<a class="headerlink" href="#modifying-custom-field-data" title="Permanent link">&para;</a></h2>
10036
10036
  <h3 id="modify-custom-field-data-in-nautobot-shell">Modify Custom Field Data in Nautobot Shell<a class="headerlink" href="#modify-custom-field-data-in-nautobot-shell" title="Permanent link">&para;</a></h3>
10037
- <p>Custom field data behaves like a python dictionary in the Nautobot Shell. When modifying custom fields through the Nautobot Shell, make sure to use the <code>.validated_save()</code> method to save the object to ensure that custom field validation is performed. Example:</p>
10037
+ <p>Custom field data behaves like a Python dictionary in the Nautobot Shell. When modifying custom fields through the Nautobot Shell, make sure to use the <code>.validated_save()</code> method to save the object to ensure that custom field validation is performed. Example:</p>
10038
10038
  <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="o">&gt;&gt;&gt;</span> <span class="n">device</span><span class="o">.</span><span class="n">cf</span><span class="p">[</span><span class="s2">&quot;support_group&quot;</span><span class="p">]</span>
10039
10039
  <a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a><span class="s1">&#39;Network Operations (555-4357)&#39;</span>
10040
10040
  <a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="o">&gt;&gt;&gt;</span> <span class="n">device</span><span class="o">.</span><span class="n">cf</span><span class="p">[</span><span class="s2">&quot;support_group&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;Network Testing (555-8080)&quot;</span>
@@ -10043,12 +10043,12 @@
10043
10043
  <a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a><span class="s1">&#39;Network Testing (555-8080)&#39;</span>
10044
10044
  </code></pre></div>
10045
10045
  <p>If you do not use <code>.validated_save()</code> when creating or updating objects, the custom field dictionary will not be populated with default values or even empty values and this can lead to unintuitive behaviour.</p>
10046
- <h3 id="modify-custom-field-data-in-the-rest-api">Modify Custom Field Data in the Rest API<a class="headerlink" href="#modify-custom-field-data-in-the-rest-api" title="Permanent link">&para;</a></h3>
10047
- <p>Individual custom field data can be modified by sending a PATCH to the Rest API and setting the new value in the <code>custom_fields</code> key:</p>
10046
+ <h3 id="modify-custom-field-data-in-the-rest-api">Modify Custom Field Data in the REST API<a class="headerlink" href="#modify-custom-field-data-in-the-rest-api" title="Permanent link">&para;</a></h3>
10047
+ <p>Individual custom field data can be modified by sending a PATCH to the REST API and setting the new value in the <code>custom_fields</code> key:</p>
10048
10048
  <div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>PATCH http://localhost:8080/api/dcim/devices/ffd8df99-6d1a-41c3-b19f-b8357eefc481/
10049
10049
  <a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a>{
10050
10050
  <a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a> &quot;custom_fields&quot;: {
10051
- <a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a> &quot;support_group&quot;: &quot;Rest API test&quot;
10051
+ <a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a> &quot;support_group&quot;: &quot;REST API test&quot;
10052
10052
  <a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a> }
10053
10053
  <a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a>}
10054
10054
  </code></pre></div>
@@ -10061,7 +10061,7 @@
10061
10061
  <a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a><span class="w"> </span><span class="nt">&quot;dmz_device&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
10062
10062
  <a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a><span class="w"> </span><span class="nt">&quot;eol_date&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1970-01-01&quot;</span><span class="p">,</span>
10063
10063
  <a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a><span class="w"> </span><span class="nt">&quot;cmdb_id&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">12345</span><span class="p">,</span>
10064
- <a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a><span class="w"> </span><span class="nt">&quot;support_group&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Rest API test&quot;</span>
10064
+ <a id="__codelineno-16-8" name="__codelineno-16-8" href="#__codelineno-16-8"></a><span class="w"> </span><span class="nt">&quot;support_group&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;REST API test&quot;</span>
10065
10065
  <a id="__codelineno-16-9" name="__codelineno-16-9" href="#__codelineno-16-9"></a><span class="w"> </span><span class="p">}</span>
10066
10066
  <a id="__codelineno-16-10" name="__codelineno-16-10" href="#__codelineno-16-10"></a><span class="p">}</span>
10067
10067
  </code></pre></div>
@@ -9766,7 +9766,7 @@ Navigate to <strong>Git Repositories</strong> and select the repository in quest
9766
9766
  <a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a>├── query2.gql
9767
9767
  </code></pre></div>
9768
9768
  <h2 id="additional-git-data-sources">Additional Git Data Sources<a class="headerlink" href="#additional-git-data-sources" title="Permanent link">&para;</a></h2>
9769
- <p>As seen in <a href="#fill-out-repository-details">Fill out Repository Details</a>, the standard installation of Nautobot will come natively with export templates, jobs, and config contexts. Additional data sources can be incorporated using the Nautobot App system. For example, the <a href="https://github.com/nautobot/nautobot-app-golden-config">nautobot-golden-config</a> App implements four additional data sources.</p>
9769
+ <p>As seen in <a href="#fill-out-repository-details">Fill out Repository Details</a>, the standard installation of Nautobot will come natively with export templates, jobs, and config contexts. Additional data sources can be incorporated using the Nautobot App system. For example, the <a href="https://github.com/nautobot/nautobot-app-golden-config">Golden Configuration</a> App implements four additional data sources.</p>
9770
9770
  <ul>
9771
9771
  <li>Config Contexts</li>
9772
9772
  <li>Backup Configs</li>
@@ -9541,9 +9541,6 @@
9541
9541
  <a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a><span class="w"> </span><span class="p">}</span>
9542
9542
  <a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a><span class="p">}</span>
9543
9543
  </code></pre></div>
9544
- <details class="version-added">
9545
- <summary>Added in version 1.3.0</summary>
9546
- </details>
9547
9544
  <p>You can also paginate the results returned to you when the data set gets larger. To do so, use the keywords "limit" and "offset". The "limit" keyword will limit the count of results returned after the "offset". If no "offset" is specified, then the default offset is zero.</p>
9548
9545
  <div class="highlight"><pre><span></span><code>```graphql
9549
9546
  query {
@@ -9622,9 +9619,6 @@ query {
9622
9619
  </code></pre></div>
9623
9620
  <p>In the updated script, we add the <code>variables = {"location_name": "ams"}</code> variable. We then update the query to let GraphQL know that we will be sending parameters to to filter by <code>location</code>. The updated output is still a JSON object. Instead of fetching all devices, we are filtering by devices in the <code>ams</code> location. The PyNautobot SDK has some <a href="https://pynautobot.readthedocs.io/en/latest/api/core/graphql.html">excellent GraphQL examples</a>. Be sure to check out the documentation.</p>
9624
9621
  <h3 id="saving-queries">Saving Queries<a class="headerlink" href="#saving-queries" title="Permanent link">&para;</a></h3>
9625
- <details class="version-added">
9626
- <summary>Added in version 1.1.0</summary>
9627
- </details>
9628
9622
  <p>Queries can now be stored inside of Nautobot, allowing the user to easily rerun previously defined queries.</p>
9629
9623
  <p>Inside of <strong>Extensibility -&gt; Data Management -&gt; GraphQL Queries</strong>, there are views to create and manage GraphQL queries.</p>
9630
9624
  <p>Saved queries can be executed from the detailed query view or via a REST API request. The queries can also be populated from the detailed query view into GraphiQL by using the "Open in GraphiQL" button. Additionally, in the GraphiQL UI, there is now a menu item, "Queries", which can be used to populate GraphiQL with any previously saved query.</p>
@@ -9230,9 +9230,6 @@
9230
9230
 
9231
9231
 
9232
9232
  <h1 id="computed-fields">Computed Fields<a class="headerlink" href="#computed-fields" title="Permanent link">&para;</a></h1>
9233
- <details class="version-added">
9234
- <summary>Added in version 1.1.0</summary>
9235
- </details>
9236
9233
  <p>Computed fields are very similar in design and implementation to custom fields. See the overview of <a href="customfield.html">Custom Fields</a>. As the name suggests, computed fields serve the need for a custom field where the value is generated using data that Nautobot stores in its database and merging it into a Jinja2 template and associated filters.</p>
9237
9234
  <p>As an example, within your automation system, you may want to be able to have an automatically generated field on the Device model that combines the name of the device and the location name in uppercase. To do that, you would define a Jinja2 template for this field that looks like such:</p>
9238
9235
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>{{ obj.name }}_{{ obj.location.name | upper }}
@@ -9295,24 +9295,12 @@
9295
9295
  <li>Selection: A selection of one of several pre-defined custom choices</li>
9296
9296
  <li>Multiple selection: A selection field which supports the assignment of multiple values</li>
9297
9297
  </ul>
9298
- <details class="version-added">
9299
- <summary>Added in version 1.3.0</summary>
9300
- <p>Support for JSON-type custom fields was added.</p>
9301
- </details>
9302
- <details class="version-added">
9303
- <summary>Added in version 1.6.0</summary>
9304
- <p>Support for Markdown-type custom fields was added.</p>
9305
- </details>
9306
9298
  <details class="version-changed">
9307
9299
  <summary>Changed in version 2.1.8</summary>
9308
9300
  <p>Prior to this release, text-type custom fields were always limited to a maximum of 255 characters. In this and later releases, text-type custom fields have no intrinsic length limit unless one is <a href="#custom-field-validation">explicitly defined</a>.</p>
9309
9301
  </details>
9310
9302
  <p>Each custom field must have a key; this should be a simple database-friendly string, e.g. <code>tps_report</code>. You may also assign a corresponding human-friendly label (e.g. "TPS report"); the label will be displayed on web forms. A weight is also required: Higher-weight fields will be ordered lower within a form. (The default weight is 100.) If a description is provided, it will appear beneath the field in a form.</p>
9311
9303
  <details class="version-changed">
9312
- <summary>Changed in version 1.4.0</summary>
9313
- <p>Custom fields now have both a <code>name</code> and a <code>slug</code>; in older versions there was no <code>slug</code> field. When migrating existing data to Nautobot 1.4.0 or later, the <code>label</code> and <code>slug</code> will be automatically populated for existing custom fields if necessary.</p>
9314
- </details>
9315
- <details class="version-changed">
9316
9304
  <summary>Changed in version 2.0.0</summary>
9317
9305
  <p>The custom field <code>slug</code> has been renamed to <code>key</code>, and <code>name</code> to <code>label</code>, in order to provide more clarity around their usage. Existing custom fields will automatically be migrated when upgrading to Nautobot 2.0.0 or later.</p>
9318
9306
  <p>Additionally, the <code>key</code> now <strong>must</strong> be a valid GraphQL identifier, which in general means that it must start with a lowercase letter and contain only lowercase letters, numbers, and underscores.</p>
@@ -9323,10 +9311,10 @@
9323
9311
  </div>
9324
9312
  <p>Marking a field as required will force the user to provide a value for the field when creating a new object or when saving an existing object. A default value for the field may also be provided. Use "true" or "false" for boolean fields, or the exact value of a choice for selection fields.</p>
9325
9313
  <p>The filter logic controls how values are matched when filtering objects by the custom field. Loose filtering (the default) matches on a partial value, whereas exact matching requires a complete match of the given string to a field's value. For example, exact filtering with the string "red" will only match the exact value "red", whereas loose filtering will match on the values "red", "red-orange", or "bored". Setting the filter logic to "disabled" disables filtering by the field entirely.</p>
9326
- <details class="version-changed">
9327
- <summary>Changed in version 1.4.0</summary>
9314
+ <div class="admonition tip">
9315
+ <p class="admonition-title">Tip</p>
9328
9316
  <p>Custom field <a href="rest-api/filtering.html#lookup-expressions">extended filtering</a> introduced extended lookup expression filters for <code>exact</code> and <code>icontains</code>, duplicating the functionality of both the <code>Strict</code> and <code>Loose</code> settings.</p>
9329
- </details>
9317
+ </div>
9330
9318
  <p>A custom field must be assigned to one or more object types, or models, in Nautobot. Once created, custom fields will automatically appear as part of these models in the web UI and REST API.</p>
9331
9319
  <p>When creating a custom field, if "Move to Advanced tab" is checked, this custom field won't appear on the object's main detail tab in the UI, but will appear in the "Advanced" tab. This is useful when the requirement is to hide this field from the main detail tab when, for instance, it is only required for machine-to-machine communication and not user consumption.</p>
9332
9320
  <h3 id="custom-field-validation">Custom Field Validation<a class="headerlink" href="#custom-field-validation" title="Permanent link">&para;</a></h3>
@@ -9468,9 +9468,6 @@
9468
9468
 
9469
9469
 
9470
9470
  <h1 id="dynamic-groups">Dynamic Groups<a class="headerlink" href="#dynamic-groups" title="Permanent link">&para;</a></h1>
9471
- <details class="version-added">
9472
- <summary>Added in version 1.3.0</summary>
9473
- </details>
9474
9471
  <p>Dynamic Groups provide a general-purpose way to collect related objects of a given Content Type, such as Devices associated with a given Location(s) and Status(es), Circuits attached to a given set of Devices, and so forth. A given Dynamic Group may contain any number of objects of the appropriate type as members, and an object may belong to any number of Dynamic Groups of the appropriate content-type as a member of each. It is possible both to query the members of a given Dynamic Group, and also to query which Dynamic Groups a given object is a member of.</p>
9475
9472
  <p>There are currently three ways to define the object members of a Dynamic group:</p>
9476
9473
  <ol>
@@ -9479,10 +9476,6 @@
9479
9476
  <li>Static assignment directly to the group (for example, "Device XYZ01, Device XYZ02, and Device XYZ04")</li>
9480
9477
  </ol>
9481
9478
  <details class="version-added">
9482
- <summary>Added in version 1.4.0 — Set-based group assignment</summary>
9483
- <p>Support for set-based assignment to groups was added.</p>
9484
- </details>
9485
- <details class="version-added">
9486
9479
  <summary>Added in version 2.3.0 — Static group assignment</summary>
9487
9480
  <p>Support for static assignment to groups was added, and the distinction between filter-based and set-based assignment was formally established.</p>
9488
9481
  </details>
@@ -9515,19 +9508,11 @@
9515
9508
  </div>
9516
9509
  <h2 id="dynamic-group-types">Dynamic Group Types<a class="headerlink" href="#dynamic-group-types" title="Permanent link">&para;</a></h2>
9517
9510
  <h3 id="filter-based-dynamic-groups">Filter-Based Dynamic Groups<a class="headerlink" href="#filter-based-dynamic-groups" title="Permanent link">&para;</a></h3>
9518
- <p>Assignment of objects to a filter-based Dynamic Group is powered by Nautobot <strong>FilterSet</strong> classes underneath the hood. The <a href="https://django-filter.readthedocs.io/en/stable/">django-filter</a> documentation may be a useful reference for users wanting to develop an in-depth understanding of FilterSets, but is by no means required to understand Dynamic Groups.</p>
9511
+ <p>Assignment of objects to a filter-based Dynamic Group is powered by Nautobot <strong>FilterSet</strong> classes underneath the hood. The <a href="https://django-filter.readthedocs.io/en/stable/"><code>django-filter</code></a> documentation may be a useful reference for users wanting to develop an in-depth understanding of FilterSets, but is by no means required to understand Dynamic Groups.</p>
9519
9512
  <p>A filter-based Dynamic Group defines a <code>filter</code> field, which is stored in the database as a JSON dict. An object is considered to be a member of such a Dynamic Group if it has the correct Content Type and it is not excluded by the filter criteria defined by the group. By default, a freshly created Dynamic Group has an empty filter (<code>{}</code>), which means that all objects of the matching Content Type are members of this group, just as a default list view of these objects would display all such objects prior to any filter fields being selected in the web UI.</p>
9520
9513
  <p>For example, for a Dynamic Group with Content Type of <code>dcim.device</code> and an empty filter, the list of members would be equivalent to the default Device list view, which in turn is equivalent to the queryset for <code>Device.objects.all()</code> from the database ORM.</p>
9521
- <details class="version-changed">
9522
- <summary>Changed in version 1.4.0 — Change in empty filter behavior</summary>
9523
- <p>In Nautobot v1.3.0 the default for a Dynamic Group with an empty filter was to "fail closed" and have zero members.</p>
9524
- <p>As of v1.4.0, this behavior has been inverted to default to include all objects matching the Content Type, instead of matching no objects as was previously the case. This was necessary to implement the progressive layering of child filters similarly to how we use filters to reduce desired objects from basic list view filters. This will be described in more detail below.</p>
9525
- </details>
9526
9514
  <p>When editing a filter-based Dynamic Group, under the <strong>Filter Options</strong> section, you will find a <strong>Filter Fields</strong> tab that allows you to select filter criteria. The filter fields available for a given Content Type are backed and validated by underlying FilterSet classes (for example <code>nautobot.dcim.filters.DeviceFilterSet</code>) and are represented in the web interface as a dynamically-generated filter form that corresponds to each eligible filter field.</p>
9527
9515
  <h3 id="set-based-dynamic-groups">Set-Based Dynamic Groups<a class="headerlink" href="#set-based-dynamic-groups" title="Permanent link">&para;</a></h3>
9528
- <details class="version-added">
9529
- <summary>Added in version 1.4.0</summary>
9530
- </details>
9531
9516
  <p>Set-based Dynamic Groups do not directly define a filter for identifying member objects; instead, they define their members based on set operations (AND, OR, and NOT, or Union, Intersection, and Difference if you prefer) involving <em>other</em> Dynamic Groups.</p>
9532
9517
  <div class="admonition tip">
9533
9518
  <p class="admonition-title">Tip</p>
@@ -9571,9 +9556,6 @@
9571
9556
  <p>Keep in mind that the <code>Filter Query Logic</code> will also contain any descendants of the selected model instance. As we can see above the <code>Filter Query Logic</code> uses both location "BKK01" and "AMSO1" and their descendants.</p>
9572
9557
  </div>
9573
9558
  <h3 id="advanced-filtering-defining-a-set-based-dynamic-group-to-combine-two-others">Advanced Filtering: Defining a Set-Based Dynamic Group to Combine Two Others<a class="headerlink" href="#advanced-filtering-defining-a-set-based-dynamic-group-to-combine-two-others" title="Permanent link">&para;</a></h3>
9574
- <details class="version-added">
9575
- <summary>Added in version 1.4.0</summary>
9576
- </details>
9577
9559
  <p>Now, let's say that you add a third location to your network. This location is currently being built out, and you don't care about Devices from this location that are Offline status at present. What you want for your "Devices of Interest" Dynamic Group is logic similar to:</p>
9578
9560
  <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>(
9579
9561
  <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a> (
@@ -9612,9 +9594,6 @@
9612
9594
  <a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a>)
9613
9595
  </code></pre></div>
9614
9596
  <h3 id="advanced-filtering-nested-groups-and-negation">Advanced Filtering: Nested Groups and Negation<a class="headerlink" href="#advanced-filtering-nested-groups-and-negation" title="Permanent link">&para;</a></h3>
9615
- <details class="version-added">
9616
- <summary>Added in version 1.4.0</summary>
9617
- </details>
9618
9597
  <p>Next, let's say you add a fourth location to your network. This location is in bad shape, and has Devices in a wide range of statuses. You want your "Devices of Interest" group to include all Devices from this location, <em>except for those in Decommissioning status</em>. To express this logic and add these devices to our parent group, we will need to use a combination of groups and the "Exclude (NOT)" operator.</p>
9619
9598
  <p>First, you will create an "Location D All Devices" group. This will simply match Devices at Location "DEL01", regardless of their status.</p>
9620
9599
  <p><img alt="Another Child Group" src="../../media/models/dynamicgroup_workflow_advanced_2_01.png" /></p>
@@ -9803,11 +9782,6 @@
9803
9782
  <p class="admonition-title">Note</p>
9804
9783
  <p>Please refer to either the source code definition of the <code>{model_name}FilterSet</code> (e.g. for <code>Device</code> it would be <code>nautobot.dcim.filters.DeviceFilterSet</code>) or the API documentation for the list endpoint (e.g. <code>/api/dcim/devices/</code>) for a given model object, to view the available filter fields and their expectations.</p>
9805
9784
  </div>
9806
- <details class="version-changed">
9807
- <summary>Changed in version 1.4.0</summary>
9808
- <p>Prior to v1.4.0, any invalid field names that are not eligible for filtering objects will be discarded upon validation.</p>
9809
- <p>As of v1.4.0, <a href="../administration/configuration/settings.html#strict_filtering">strict filtering is enabled by default</a>, which causes any invalid field names to result in a <code>ValidationError</code>.</p>
9810
- </details>
9811
9785
  <h3 id="managing-dynamic-groups-in-the-rest-api">Managing Dynamic Groups in the REST API<a class="headerlink" href="#managing-dynamic-groups-in-the-rest-api" title="Permanent link">&para;</a></h3>
9812
9786
  <h4 id="creating-a-dynamic-group-via-rest">Creating a Dynamic Group via REST<a class="headerlink" href="#creating-a-dynamic-group-via-rest" title="Permanent link">&para;</a></h4>
9813
9787
  <p>A Dynamic Group may be created by performing a <code>POST</code> to the Dynamic Groups list endpoint at <code>/api/extras/dynamic-groups/</code>.</p>
@@ -9541,10 +9541,6 @@
9541
9541
  <p class="admonition-title">Important</p>
9542
9542
  <p>Nautobot's Git integration depends on the availability of the <code>git</code> program. If <code>git</code> is not installed, Nautobot will be unable to pull data from Git repositories.</p>
9543
9543
  </div>
9544
- <details class="version-changed">
9545
- <summary>Changed in version 1.6.2</summary>
9546
- <p>To proactively avoid conflicts in data, it is no longer possible to configure multiple Git repository entries that both have the same <code>remote_url</code> and also provide the same data type(s). Configuration of multiple entries with the same <code>remote_url</code> is still permitted if they are configured to provide entirely distinct types of data.</p>
9547
- </details>
9548
9544
  <h2 id="repository-configuration">Repository Configuration<a class="headerlink" href="#repository-configuration" title="Permanent link">&para;</a></h2>
9549
9545
  <p>When defining a Git repository for Nautobot to consume, the <code>name</code>, <code>remote URL</code>, and <code>branch</code> parameters are mandatory - the name acts as a unique identifier, and the remote URL and branch are needed for Nautobot to be able to locate and access the specified repository. Additionally, if the repository is private you may specify a <code>secrets group</code> that can be used to gain access to the repository.</p>
9550
9546
  <div class="admonition note">
@@ -9594,10 +9590,6 @@ in order for the repository to sync.</p>
9594
9590
  <li><strong>Implicit</strong>: They're defined using a specific folder and file structure to apply the config context to a specific scope.</li>
9595
9591
  <li><strong>Local</strong>: Defined at the device/virtual machine level and only being applied to the specific device/virtual machine.</li>
9596
9592
  </ul>
9597
- <details class="version-added">
9598
- <summary>Added in version 1.5.6</summary>
9599
- <p>Config contexts provided in a Git repository can now be filtered by <code>locations</code> in addition to all previously supported filters.</p>
9600
- </details>
9601
9593
  <h4 id="metadata">Metadata<a class="headerlink" href="#metadata" title="Permanent link">&para;</a></h4>
9602
9594
  <p>The metadata used to create the config context has the following options and is specified by the <code>_metadata</code> key.</p>
9603
9595
  <table>
@@ -9113,7 +9113,7 @@
9113
9113
  <li class="md-nav__item">
9114
9114
  <a href="#querying-the-graphql-interface-over-the-rest-api" class="md-nav__link">
9115
9115
  <span class="md-ellipsis">
9116
- Querying the GraphQL interface over the rest API
9116
+ Querying the GraphQL interface over the REST API
9117
9117
  </span>
9118
9118
  </a>
9119
9119
 
@@ -9216,8 +9216,8 @@
9216
9216
  <a id="__codelineno-1-23" name="__codelineno-1-23" href="#__codelineno-1-23"></a><span class="p">}</span>
9217
9217
  </code></pre></div>
9218
9218
  <p>It is possible to explore the Graph and create some queries in a human friendly UI at the endpoint <code>graphql/</code>. This interface (called <code>graphqli</code>) provides a great playground to build new queries as it provides full autocompletion and type validation.</p>
9219
- <h2 id="querying-the-graphql-interface-over-the-rest-api">Querying the GraphQL interface over the rest API<a class="headerlink" href="#querying-the-graphql-interface-over-the-rest-api" title="Permanent link">&para;</a></h2>
9220
- <p>It is possible to query the GraphQL interface via the rest API as well, the endpoint is available at <code>api/graphql/</code> and supports the same Token based authentication as all other Nautobot APIs.</p>
9219
+ <h2 id="querying-the-graphql-interface-over-the-rest-api">Querying the GraphQL interface over the REST API<a class="headerlink" href="#querying-the-graphql-interface-over-the-rest-api" title="Permanent link">&para;</a></h2>
9220
+ <p>It is possible to query the GraphQL interface via the REST API as well, the endpoint is available at <code>api/graphql/</code> and supports the same Token based authentication as all other Nautobot APIs.</p>
9221
9221
  <p>A GraphQL Query must be encapsulated in a JSON payload with the <code>query</code> key and sent with a POST request. Optionally it is possible to provide a list of <code>variables</code> in the same payload as presented below.</p>
9222
9222
  <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="p">{</span>
9223
9223
  <a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="nt">&quot;query&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;query ($id: Int!) { device(id: $id) { name }}&quot;</span><span class="p">,</span>
@@ -9382,9 +9382,6 @@
9382
9382
  <p>Computed Fields with the prefixed <code>cpf_</code> are only available in GraphQL <strong>after</strong> the computed field is created <strong>and</strong> the web service is restarted.</p>
9383
9383
  </div>
9384
9384
  <h2 id="saved-queries">Saved Queries<a class="headerlink" href="#saved-queries" title="Permanent link">&para;</a></h2>
9385
- <details class="version-added">
9386
- <summary>Added in version 1.1.0</summary>
9387
- </details>
9388
9385
  <p>Queries can now be stored inside of Nautobot, allowing the user to easily rerun previously defined queries.</p>
9389
9386
  <p>Inside of <strong>Extensibility -&gt; Data Management -&gt; GraphQL Queries</strong>, there are views to create and manage GraphQL queries.</p>
9390
9387
  <p>Saved queries can be executed from the detailed query view or via a REST API request. The queries can also be populated from the detailed query view into GraphiQL by using the "Open in GraphiQL" button. Additionally, in the GraphiQL UI, there is now a menu item, "Queries", which can be used to populate GraphiQL with any previously saved query.</p>
@@ -9324,10 +9324,6 @@
9324
9324
  </ul>
9325
9325
  <p>The <code>class_path</code> is often represented as a string in the format of <code>&lt;module_name&gt;.&lt;JobClassName&gt;</code>, such as <code>example.MyJobWithNoVars</code> or <code>nautobot_golden_config.jobs.BackupJob</code>. Understanding the definitions of these elements will be important in running jobs programmatically.</p>
9326
9326
  <details class="version-changed">
9327
- <summary>Changed in version 1.3.0</summary>
9328
- <p>With the addition of Job database models, it is now generally possible and preferable to refer to a job by its UUID primary key, similar to other Nautobot database models, rather than its <code>class_path</code>.</p>
9329
- </details>
9330
- <details class="version-changed">
9331
9327
  <summary>Changed in version 2.0.0</summary>
9332
9328
  <p>The Job database model <code>name</code> field is now enforced to be globally unique and so is also an option for uniquely identifying Job records.</p>
9333
9329
  </details>
@@ -9386,11 +9382,7 @@
9386
9382
  <p class="admonition-title">Note</p>
9387
9383
  <p><a href="#jobs-and-class_path">See above</a> for <code>class_path</code> definitions.</p>
9388
9384
  </div>
9389
- <details class="version-added">
9390
- <summary>Added in version 1.3.10</summary>
9391
- <p>The <code>--data</code> and <code>--local</code> parameters were added.</p>
9392
9385
  <p>The <code>--data</code> parameter must be a JSON string, e.g. <code>--data='{"string_variable": "somevalue", "integer_variable": 123}'</code></p>
9393
- </details>
9394
9386
  <p>Using the same example shown in the API:</p>
9395
9387
  <div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>nautobot-server runjob --username myusername example.MyJobWithNoVars
9396
9388
  </code></pre></div>
@@ -9292,9 +9292,6 @@
9292
9292
 
9293
9293
 
9294
9294
  <h1 id="job-scheduling-and-approvals">Job Scheduling and Approvals<a class="headerlink" href="#job-scheduling-and-approvals" title="Permanent link">&para;</a></h1>
9295
- <details class="version-added">
9296
- <summary>Added in version 1.2.0</summary>
9297
- </details>
9298
9295
  <p>Oftentimes jobs will need to be run at a later date or periodically, or require approval from someone before they can be started. To this end, Nautobot offers facilities for scheduling and approving jobs.</p>
9299
9296
  <h2 id="job-scheduling">Job Scheduling<a class="headerlink" href="#job-scheduling" title="Permanent link">&para;</a></h2>
9300
9297
  <p>Jobs can be scheduled to be run immediately, at some point in the future, or at an interval.</p>
@@ -9327,10 +9324,6 @@
9327
9324
  <p>Requiring approval for execution of Job Hooks by setting the <code>Meta.approval_required</code> attribute to <code>True</code> on your <code>JobHookReceiver</code> subclass is not supported. The value of this attribute will be ignored. Support for requiring approval of Job Hooks will be added in a future release.</p>
9328
9325
  </div>
9329
9326
  <p>Scheduled jobs can be approved or denied via the UI and API by any user that has the <code>extras.approve_job</code> permission for the job in question, as well as the appropriate <code>extras.change_scheduledjob</code> and/or <code>extras.delete_scheduledjob</code> permissions.</p>
9330
- <details class="version-changed">
9331
- <summary>Changed in version 1.3.0</summary>
9332
- <p>The <code>extras.approve_job</code> permission is now required for job approvers.</p>
9333
- </details>
9334
9327
  <div class="admonition note">
9335
9328
  <p class="admonition-title">Note</p>
9336
9329
  <p>Jobs that are past their scheduled run date can still be approved, but the approver will be asked to confirm the operation.</p>
@@ -9232,9 +9232,6 @@
9232
9232
 
9233
9233
 
9234
9234
  <h1 id="job-buttons">Job Buttons<a class="headerlink" href="#job-buttons" title="Permanent link">&para;</a></h1>
9235
- <details class="version-added">
9236
- <summary>Added in version 1.5.14</summary>
9237
- </details>
9238
9235
  <p>Job Buttons are predefined buttons that allow users to run jobs directly from within Nautobot object views. It uses the object where the button was pressed as the only input to the job. These are helpful when you want to start a job that requires minimal or no input without having to use the standard job form. For example, you may have a job that only requires a user to select a device. Instead, they can now go to that device in the web UI and click the associated Job Button instead.</p>
9239
9236
  <p>Job Buttons can be created in web UI located in the navbar under Jobs &gt; Job Buttons. Each button can be associated with multiple Nautobot object types (location, device, prefix, etc.) and will be displayed on all of the associated object detail views. The text displayed on the button supports Jinja2 templating which allows for using <a href="#context-data">context data</a> to dynamically update or <a href="#conditional-rendering">even be hidden under certain conditions</a>.</p>
9240
9237
  <p>The buttons appear at the top right corner of an object's individual detail page for each object type they are associated to. They can be either individual buttons or grouped together in a dropdown for better organization. Buttons will be sorted from left to right based on their <code>weight</code> with the lowest <code>weight</code> button on the left. Any groups of buttons will be displayed to the right of all ungrouped buttons. Group dropdown buttons will inherit the button class from the button with the lowest <code>weight</code> in the group and will be sorted from top to bottom with the lowest <code>weight</code> button on top.</p>
@@ -9178,9 +9178,6 @@
9178
9178
 
9179
9179
 
9180
9180
  <h1 id="job-hooks">Job Hooks<a class="headerlink" href="#job-hooks" title="Permanent link">&para;</a></h1>
9181
- <details class="version-added">
9182
- <summary>Added in version 1.4.0</summary>
9183
- </details>
9184
9181
  <p>A Job Hook is a mechanism for automatically starting a <a href="index.html">job</a> when an object is changed. Job Hooks are similar to <a href="../webhook.html">webhooks</a> except that an object change event initiates a <code>JobHookReceiver</code> job instead of a web request. Job hooks are configured in the web UI under <strong>Jobs &gt; Job Hooks</strong>.</p>
9185
9182
  <h2 id="configuration">Configuration<a class="headerlink" href="#configuration" title="Permanent link">&para;</a></h2>
9186
9183
  <ul>
@@ -9125,8 +9125,8 @@
9125
9125
  <details class="version-added">
9126
9126
  <summary>Added in version 2.4.0</summary>
9127
9127
  </details>
9128
- <p>JobQueue instances represent the queues that nautobot <a href="index.html">jobs</a> can be run on. It is introduced as an alternative to <code>task_queues</code> attribute on the Job model to define the eligible queues for this job.</p>
9129
- <p>The JobQueue model has <code>name</code> and <code>queue_type</code> as required attributes. The <code>name</code> attribute has to be unique on each Job Queue and there are currently two supported queue types: "celery" and "kubernetes". The user can optionally assign a <a href="../../core-data-model/tenancy/tenant.html">tenant</a> instance to a Job Queue.</p>
9128
+ <p>JobQueue instances represent the queues that Nautobot <a href="index.html">jobs</a> can be run on. It is introduced as an alternative to <code>task_queues</code> attribute on the Job model to define the eligible queues for this job.</p>
9129
+ <p>The JobQueue model has <code>name</code> and <code>queue_type</code> as required attributes. The <code>name</code> attribute has to be unique on each Job Queue and there are currently two supported queue types: <code>"celery"</code> and <code>"kubernetes"</code>. The user can optionally assign a <a href="../../core-data-model/tenancy/tenant.html">tenant</a> instance to a Job Queue.</p>
9130
9130
  <p>You can access the Job instances that the Job Queue is assigned to through the <code>jobs</code> attribute from the Job Queue side.</p>
9131
9131
  <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="o">&gt;&gt;&gt;</span> <span class="n">JobQueue</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
9132
9132
  <a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="o">&lt;</span><span class="n">JobQueue</span><span class="p">:</span> <span class="n">celery</span><span class="p">:</span> <span class="n">celery</span> <span class="n">Job</span> <span class="n">Queue</span> <span class="o">-</span> <span class="mi">2</span><span class="o">&gt;</span>
@@ -9412,8 +9412,8 @@
9412
9412
  </ol>
9413
9413
  <p>So if you have any concerns with running Celery workers in your Kubernetes deployment, executing jobs with Kubernetes might be for you.</p>
9414
9414
  <h2 id="how-to-configure-environment-variables">How to Configure Environment Variables<a class="headerlink" href="#how-to-configure-environment-variables" title="Permanent link">&para;</a></h2>
9415
- <h3 id="nautobot_kubernetes_job_manifest">NAUTOBOT_KUBERNETES_JOB_MANIFEST<a class="headerlink" href="#nautobot_kubernetes_job_manifest" title="Permanent link">&para;</a></h3>
9416
- <p>This environment variable should store a <a href="https://kubernetes.io/docs/concepts/workloads/controllers/job/">Kubernetes Job</a> template as a python dictionary. Below is a sample kubernetes job manifest.</p>
9415
+ <h3 id="nautobot_kubernetes_job_manifest"><code>NAUTOBOT_KUBERNETES_JOB_MANIFEST</code><a class="headerlink" href="#nautobot_kubernetes_job_manifest" title="Permanent link">&para;</a></h3>
9416
+ <p>This environment variable should store a <a href="https://kubernetes.io/docs/concepts/workloads/controllers/job/">Kubernetes Job</a> template as a Python dictionary. Below is a sample kubernetes job manifest.</p>
9417
9417
  <div class="admonition important">
9418
9418
  <p class="admonition-title">Important</p>
9419
9419
  <p>Ensure this job template uses the same Docker image as your Nautobot Kubernetes deployment. You can specify the image name in spec.template.spec.containers.image. Additionally, configure and map the required environment variables to corresponding <a href="https://kubernetes.io/docs/concepts/configuration/configmap/">Kubernetes ConfigMap</a> instances. These variables can be defined in the spec.template.spec.containers.env list. For consistency, it is recommended to use the same environment configuration for this Job manifest as that of your Nautobot Kubernetes deployment.</p>
@@ -9482,9 +9482,9 @@
9482
9482
  <a id="__codelineno-0-62" name="__codelineno-0-62" href="#__codelineno-0-62"></a> <span class="p">},</span>
9483
9483
  <a id="__codelineno-0-63" name="__codelineno-0-63" href="#__codelineno-0-63"></a><span class="p">}</span>
9484
9484
  </code></pre></div>
9485
- <h3 id="nautobot_kubernetes_job_pod_name">NAUTOBOT_KUBERNETES_JOB_POD_NAME<a class="headerlink" href="#nautobot_kubernetes_job_pod_name" title="Permanent link">&para;</a></h3>
9486
- <p>The default value for this environment variable is "nautobot-job". You can modify this value as needed; however, ensure that <code>metadata.name</code> field in NAUTOBOT_KUBERNETES_JOB_MANIFEST is updated accordingly to maintain consistencty</p>
9487
- <h3 id="nautobot_kubernetes_job_pod_namespace">NAUTOBOT_KUBERNETES_JOB_POD_NAMESPACE<a class="headerlink" href="#nautobot_kubernetes_job_pod_namespace" title="Permanent link">&para;</a></h3>
9485
+ <h3 id="nautobot_kubernetes_job_pod_name"><code>NAUTOBOT_KUBERNETES_JOB_POD_NAME</code><a class="headerlink" href="#nautobot_kubernetes_job_pod_name" title="Permanent link">&para;</a></h3>
9486
+ <p>The default value for this environment variable is <code>"nautobot-job"</code>. You can modify this value as needed; however, ensure that <code>metadata.name</code> field in <code>NAUTOBOT_KUBERNETES_JOB_MANIFEST</code> is updated accordingly to maintain consistencty</p>
9487
+ <h3 id="nautobot_kubernetes_job_pod_namespace"><code>NAUTOBOT_KUBERNETES_JOB_POD_NAMESPACE</code><a class="headerlink" href="#nautobot_kubernetes_job_pod_namespace" title="Permanent link">&para;</a></h3>
9488
9488
  <p>The default value for this environment variable is "default". However, this value could be inaccurate depending on the setup of your Nautobot deployment. To ensure you have the right value for this variable. You can run the command <code>kubectl describe pod &lt;nautobot-pod-name&gt;</code> and you should see an output similar to what is below:</p>
9489
9489
  <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>Name:<span class="w"> </span>nautobot-679bdc765-hl72m
9490
9490
  <a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>Namespace:<span class="w"> </span>default
@@ -9501,7 +9501,7 @@
9501
9501
  <a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a>...
9502
9502
  </code></pre></div>
9503
9503
  <p>Note that the field with label <code>Namespace</code> tells you exactly what namespace your Nautobot deployment is in and what value you should assign to the environment variable <code>NAUTOBOT_KUBERNETES_JOB_POD_NAMESPACE</code>. To ensure you have the right value for this variable. You can run the command <code>kubectl describe pod &lt;nautobot-pod-name&gt;</code> and you should see an output similar to what is below:</p>
9504
- <h3 id="nautobot_kubernetes_default_service_address">NAUTOBOT_KUBERNETES_DEFAULT_SERVICE_ADDRESS<a class="headerlink" href="#nautobot_kubernetes_default_service_address" title="Permanent link">&para;</a></h3>
9504
+ <h3 id="nautobot_kubernetes_default_service_address"><code>NAUTOBOT_KUBERNETES_DEFAULT_SERVICE_ADDRESS</code><a class="headerlink" href="#nautobot_kubernetes_default_service_address" title="Permanent link">&para;</a></h3>
9505
9505
  <p>The default value for this environment variable is <a href="https://kubernetes.default.svc">https://kubernetes.default.svc</a>. However, this value may vary depending on your Nautobot deployment setup. The format for the base URL is <code>https://&lt;kubernetes-service-name&gt;.&lt;kubernetes-service-namespace&gt;.svc.</code></p>
9506
9506
  <p>If you know the namespace where your Kubernetes service is running, you can run the command <code>kubectl get services -n &lt;kubernetes-service-namespace&gt;</code> to retrieve the service details. The output will resemble the example shown below.</p>
9507
9507
  <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>NAME<span class="w"> </span>TYPE<span class="w"> </span>CLUSTER-IP<span class="w"> </span>EXTERNAL-IP<span class="w"> </span>PORT<span class="o">(</span>S<span class="o">)</span><span class="w"> </span>AGE
@@ -9215,9 +9215,6 @@
9215
9215
 
9216
9216
  <h1 id="job-models">Job Models<a class="headerlink" href="#job-models" title="Permanent link">&para;</a></h1>
9217
9217
  <h2 id="job">Job<a class="headerlink" href="#job" title="Permanent link">&para;</a></h2>
9218
- <details class="version-added">
9219
- <summary>Added in version 1.3.0</summary>
9220
- </details>
9221
9218
  <p>The Job data model provides a database representation of metadata describing a specific installed Job class. It also serves as an anchor point for other data models (JobResult and ScheduledJob in particular) to link against.</p>
9222
9219
  <p>For any given Job record, most of its fields are populated initially from data defined in the source code of the corresponding job class. These fields may be explicitly overridden by editing the Job record via the Nautobot UI or REST API if desired. This is generally accomplished by setting a value for the desired field (e.g. <code>grouping</code>) and also setting the corresponding <code>override</code> flag (e.g. <code>grouping_override</code>) to <code>True</code>. If the <code>override</code> flag for a field is cleared (set back to <code>False</code>) then the corresponding flag will automatically revert to the original value defined by the Job class source code when the record is saved.</p>
9223
9220
  <div class="admonition note">
@@ -9242,9 +9239,6 @@
9242
9239
  </div>
9243
9240
  <p>For any Job that is loaded into Nautobot, the Job must be enabled to run. See <a href="index.html#enabling-jobs-for-running">Enabling Jobs for Running</a> for more details.</p>
9244
9241
  <h2 id="job-log-entry">Job Log Entry<a class="headerlink" href="#job-log-entry" title="Permanent link">&para;</a></h2>
9245
- <details class="version-added">
9246
- <summary>Added in version 1.2.0</summary>
9247
- </details>
9248
9242
  <p>Log messages from <a href="index.html">Jobs</a> are stored in as <code>JobLogEntry</code> objects. This allows more performant querying of log messages and even allows viewing of logs while the job is still running.</p>
9249
9243
  <p>Records of this type store the following data:</p>
9250
9244
  <ul>
@@ -9254,10 +9248,6 @@
9254
9248
  <li>The log message.</li>
9255
9249
  <li>If provided, the string format of the logged object and it's absolute url.</li>
9256
9250
  </ul>
9257
- <details class="version-added">
9258
- <summary>Added in version 1.2.2</summary>
9259
- <p>REST API and GraphQL support for querying <code>JobLogEntry</code> records were added.</p>
9260
- </details>
9261
9251
  <h2 id="job-results">Job Results<a class="headerlink" href="#job-results" title="Permanent link">&para;</a></h2>
9262
9252
  <p>Nautobot provides a generic data model for storing and reporting the results of background tasks, such as the execution of custom jobs or the synchronization of data from a Git repository.</p>
9263
9253
  <p>Records of this type store the following data:</p>
@@ -9271,10 +9261,6 @@
9271
9261
  <li>A block of structured data representing the return value from the <code>.run()</code> method (often rendered as JSON).</li>
9272
9262
  </ul>
9273
9263
  <details class="version-changed">
9274
- <summary>Changed in version 1.2.0</summary>
9275
- <p>Note that prior to Nautobot 1.2, job log records were stored in the <code>data</code> field; they are now stored as distinct <a href="#job-log-entry"><code>JobLogEntry</code></a> records instead.</p>
9276
- </details>
9277
- <details class="version-changed">
9278
9264
  <summary>Changed in version 2.3.0</summary>
9279
9265
  <p>The Additional Data tab has been removed, you can now find the data in the Advanced Tab.</p>
9280
9266
  </details>
@@ -9120,9 +9120,6 @@
9120
9120
 
9121
9121
 
9122
9122
  <h1 id="note">Note<a class="headerlink" href="#note" title="Permanent link">&para;</a></h1>
9123
- <details class="version-added">
9124
- <summary>Added in version 1.4.0</summary>
9125
- </details>
9126
9123
  <p>Notes provide a place for you to store notes or general information on an object, such as a Device, that may not require a specific field for. This could be a note on a recent upgrade, a warning about a problematic device, or the reason the Rack was marked with the Status <code>Retired</code>.</p>
9127
9124
  <p>The note field supports <a href="https://www.markdownguide.org/cheat-sheet/#basic-syntax">Markdown Basic Syntax</a> as well as <a href="template-filters.html#render_markdown">a limited subset of HTML</a>.</p>
9128
9125