nautobot 2.3.11__py3-none-any.whl → 2.3.13__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 (516) hide show
  1. nautobot/core/api/serializers.py +1 -0
  2. nautobot/core/celery/log.py +4 -4
  3. nautobot/core/models/tree_queries.py +5 -2
  4. nautobot/core/settings.py +26 -0
  5. nautobot/core/settings.yaml +31 -0
  6. nautobot/core/tables.py +60 -10
  7. nautobot/core/templates/generic/object_notes.html +1 -1
  8. nautobot/core/templates/generic/object_retrieve.html +1 -1
  9. nautobot/core/templatetags/helpers.py +7 -1
  10. nautobot/core/testing/api.py +5 -1
  11. nautobot/core/testing/views.py +15 -4
  12. nautobot/core/tests/test_api.py +20 -0
  13. nautobot/core/tests/test_csv.py +25 -3
  14. nautobot/core/tests/test_utils.py +8 -0
  15. nautobot/core/utils/lookup.py +11 -8
  16. nautobot/dcim/api/views.py +3 -0
  17. nautobot/dcim/choices.py +6 -0
  18. nautobot/dcim/filters/__init__.py +26 -1
  19. nautobot/dcim/forms.py +4 -0
  20. nautobot/dcim/tables/devices.py +2 -6
  21. nautobot/dcim/templates/dcim/controller_retrieve.html +1 -1
  22. nautobot/dcim/templates/dcim/device/base.html +1 -1
  23. nautobot/dcim/tests/test_filters.py +33 -0
  24. nautobot/dcim/tests/test_views.py +6 -0
  25. nautobot/extras/api/serializers.py +1 -0
  26. nautobot/extras/api/views.py +2 -0
  27. nautobot/extras/forms/forms.py +2 -0
  28. nautobot/extras/group_sync.py +42 -0
  29. nautobot/extras/models/metadata.py +1 -0
  30. nautobot/extras/models/models.py +1 -1
  31. nautobot/extras/plugins/__init__.py +15 -3
  32. nautobot/extras/tables.py +1 -0
  33. nautobot/extras/templates/extras/inc/job_table.html +1 -1
  34. nautobot/extras/tests/test_views.py +2 -2
  35. nautobot/extras/views.py +0 -2
  36. nautobot/ipam/lookups.py +101 -62
  37. nautobot/ipam/tables.py +22 -15
  38. nautobot/ipam/templates/ipam/ipaddresstointerface_retrieve.html +1 -1
  39. nautobot/ipam/tests/test_querysets.py +49 -1
  40. nautobot/ipam/utils/__init__.py +24 -0
  41. nautobot/ipam/views.py +61 -68
  42. nautobot/project-static/docs/404.html +10 -10
  43. nautobot/project-static/docs/additional-features/caching.html +1 -2
  44. nautobot/project-static/docs/additional-features/change-logging.html +1 -2
  45. nautobot/project-static/docs/additional-features/config-contexts.html +1 -2
  46. nautobot/project-static/docs/additional-features/healthcheck.html +1 -2
  47. nautobot/project-static/docs/additional-features/jobs.html +1 -2
  48. nautobot/project-static/docs/additional-features/prometheus-metrics.html +1 -2
  49. nautobot/project-static/docs/administration/celery-queues.html +1 -2
  50. nautobot/project-static/docs/administration/nautobot-server.html +1 -2
  51. nautobot/project-static/docs/administration/nautobot-shell.html +1 -2
  52. nautobot/project-static/docs/administration/permissions.html +1 -2
  53. nautobot/project-static/docs/administration/replicating-nautobot.html +1 -2
  54. nautobot/project-static/docs/apps/index.html +10 -10
  55. nautobot/project-static/docs/apps/migrating-jobs-from-nautobot-v1.html +1 -2
  56. nautobot/project-static/docs/apps/nautobot-apps.html +10 -10
  57. nautobot/project-static/docs/assets/stylesheets/main.6f8fc17f.min.css +1 -0
  58. nautobot/project-static/docs/assets/stylesheets/main.6f8fc17f.min.css.map +1 -0
  59. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +10 -10
  60. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +10 -10
  61. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +10 -10
  62. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +10 -10
  63. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +10 -10
  64. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +10 -10
  65. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +10 -10
  66. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +10 -10
  67. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +10 -10
  68. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +10 -10
  69. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +10 -10
  70. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +10 -10
  71. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +10 -10
  72. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +10 -10
  73. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +10 -10
  74. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +10 -10
  75. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +10 -10
  76. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +206 -14
  77. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +10 -10
  78. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +10 -10
  79. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +10 -10
  80. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +25 -11
  81. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +10 -10
  82. nautobot/project-static/docs/configuration/authentication/ldap.html +1 -2
  83. nautobot/project-static/docs/configuration/authentication/remote.html +1 -2
  84. nautobot/project-static/docs/configuration/authentication/sso.html +1 -2
  85. nautobot/project-static/docs/configuration/index.html +1 -2
  86. nautobot/project-static/docs/configuration/optional-settings.html +1 -2
  87. nautobot/project-static/docs/configuration/required-settings.html +1 -2
  88. nautobot/project-static/docs/core-functionality/circuits.html +1 -2
  89. nautobot/project-static/docs/core-functionality/device-types.html +1 -2
  90. nautobot/project-static/docs/core-functionality/devices.html +1 -2
  91. nautobot/project-static/docs/core-functionality/ipam.html +1 -2
  92. nautobot/project-static/docs/core-functionality/power.html +1 -2
  93. nautobot/project-static/docs/core-functionality/secrets.html +1 -2
  94. nautobot/project-static/docs/core-functionality/services.html +1 -2
  95. nautobot/project-static/docs/core-functionality/sites-and-racks.html +1 -2
  96. nautobot/project-static/docs/core-functionality/tenancy.html +1 -2
  97. nautobot/project-static/docs/core-functionality/virtualization.html +1 -2
  98. nautobot/project-static/docs/core-functionality/vlans.html +1 -2
  99. nautobot/project-static/docs/development/application-registry.html +1 -2
  100. nautobot/project-static/docs/development/apps/api/configuration-view.html +10 -10
  101. nautobot/project-static/docs/development/apps/api/database-backend-config.html +10 -10
  102. nautobot/project-static/docs/development/apps/api/models/django-admin.html +10 -10
  103. nautobot/project-static/docs/development/apps/api/models/global-search.html +10 -10
  104. nautobot/project-static/docs/development/apps/api/models/graphql.html +10 -10
  105. nautobot/project-static/docs/development/apps/api/models/index.html +10 -10
  106. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +10 -10
  107. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +10 -10
  108. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +10 -10
  109. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +10 -10
  110. nautobot/project-static/docs/development/apps/api/platform-features/index.html +10 -10
  111. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +10 -10
  112. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +10 -10
  113. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +10 -10
  114. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +10 -10
  115. nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +32 -13
  116. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +10 -10
  117. nautobot/project-static/docs/development/apps/api/prometheus.html +10 -10
  118. nautobot/project-static/docs/development/apps/api/setup.html +10 -10
  119. nautobot/project-static/docs/development/apps/api/testing.html +10 -10
  120. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +10 -10
  121. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +10 -10
  122. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +10 -10
  123. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +10 -10
  124. nautobot/project-static/docs/development/apps/api/ui-extensions/object-detail-views.html +1 -2
  125. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +10 -10
  126. nautobot/project-static/docs/development/apps/api/ui-extensions/tabs.html +1 -2
  127. nautobot/project-static/docs/development/apps/api/views/base-template.html +10 -10
  128. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +10 -10
  129. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +10 -10
  130. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +10 -10
  131. nautobot/project-static/docs/development/apps/api/views/index.html +10 -10
  132. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +10 -10
  133. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +10 -10
  134. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +10 -10
  135. nautobot/project-static/docs/development/apps/api/views/notes.html +10 -10
  136. nautobot/project-static/docs/development/apps/api/views/rest-api.html +10 -10
  137. nautobot/project-static/docs/development/apps/api/views/urls.html +10 -10
  138. nautobot/project-static/docs/development/apps/api/views/view-overrides.html +1 -2
  139. nautobot/project-static/docs/development/apps/index.html +10 -10
  140. nautobot/project-static/docs/development/apps/migration/code-updates.html +10 -10
  141. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +10 -10
  142. nautobot/project-static/docs/development/apps/migration/from-v1.html +10 -10
  143. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +10 -10
  144. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +10 -10
  145. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +10 -10
  146. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +10 -10
  147. nautobot/project-static/docs/development/apps/porting-from-netbox.html +10 -10
  148. nautobot/project-static/docs/development/best-practices.html +1 -2
  149. nautobot/project-static/docs/development/core/application-registry.html +10 -10
  150. nautobot/project-static/docs/development/core/best-practices.html +10 -10
  151. nautobot/project-static/docs/development/core/bootstrap-ui.html +10 -10
  152. nautobot/project-static/docs/development/core/caching.html +10 -10
  153. nautobot/project-static/docs/development/core/controllers.html +10 -10
  154. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +10 -10
  155. nautobot/project-static/docs/development/core/extending-models.html +1 -2
  156. nautobot/project-static/docs/development/core/generic-views.html +10 -10
  157. nautobot/project-static/docs/development/core/getting-started.html +10 -10
  158. nautobot/project-static/docs/development/core/homepage.html +10 -10
  159. nautobot/project-static/docs/development/core/index.html +10 -10
  160. nautobot/project-static/docs/development/core/model-checklist.html +10 -10
  161. nautobot/project-static/docs/development/core/model-features.html +10 -10
  162. nautobot/project-static/docs/development/core/natural-keys.html +10 -10
  163. nautobot/project-static/docs/development/core/navigation-menu.html +10 -10
  164. nautobot/project-static/docs/development/core/react-ui.html +1 -2
  165. nautobot/project-static/docs/development/core/release-checklist.html +10 -10
  166. nautobot/project-static/docs/development/core/role-internals.html +10 -10
  167. nautobot/project-static/docs/development/core/settings.html +10 -10
  168. nautobot/project-static/docs/development/core/style-guide.html +10 -10
  169. nautobot/project-static/docs/development/core/templates.html +10 -10
  170. nautobot/project-static/docs/development/core/testing.html +12 -12
  171. nautobot/project-static/docs/development/core/user-preferences.html +10 -10
  172. nautobot/project-static/docs/development/docker-compose-advanced-use-cases.html +1 -2
  173. nautobot/project-static/docs/development/extending-models.html +1 -2
  174. nautobot/project-static/docs/development/generic-views.html +1 -2
  175. nautobot/project-static/docs/development/getting-started.html +1 -2
  176. nautobot/project-static/docs/development/homepage.html +1 -2
  177. nautobot/project-static/docs/development/index.html +10 -10
  178. nautobot/project-static/docs/development/jobs/index.html +10 -10
  179. nautobot/project-static/docs/development/jobs/migration/from-v1.html +10 -10
  180. nautobot/project-static/docs/development/model-features.html +1 -2
  181. nautobot/project-static/docs/development/natural-keys.html +1 -2
  182. nautobot/project-static/docs/development/navigation-menu.html +1 -2
  183. nautobot/project-static/docs/development/react-ui.html +1 -2
  184. nautobot/project-static/docs/development/release-checklist.html +1 -2
  185. nautobot/project-static/docs/development/role-internals.html +1 -2
  186. nautobot/project-static/docs/development/style-guide.html +1 -2
  187. nautobot/project-static/docs/development/templates.html +1 -2
  188. nautobot/project-static/docs/development/testing.html +1 -2
  189. nautobot/project-static/docs/development/user-preferences.html +1 -2
  190. nautobot/project-static/docs/docker/index.html +1 -2
  191. nautobot/project-static/docs/index.html +10 -10
  192. nautobot/project-static/docs/installation/centos.html +1 -2
  193. nautobot/project-static/docs/installation/external-authentication.html +1 -2
  194. nautobot/project-static/docs/installation/http-server.html +1 -2
  195. nautobot/project-static/docs/installation/index.html +1 -2
  196. nautobot/project-static/docs/installation/migrating-from-netbox.html +1 -2
  197. nautobot/project-static/docs/installation/migrating-from-postgresql.html +1 -2
  198. nautobot/project-static/docs/installation/nautobot.html +1 -2
  199. nautobot/project-static/docs/installation/region-and-site-data-migration-guide.html +1 -2
  200. nautobot/project-static/docs/installation/selinux-troubleshooting.html +1 -2
  201. nautobot/project-static/docs/installation/services.html +1 -2
  202. nautobot/project-static/docs/installation/ubuntu.html +1 -2
  203. nautobot/project-static/docs/installation/upgrading-from-nautobot-v1.html +1 -2
  204. nautobot/project-static/docs/installation/upgrading.html +1 -2
  205. nautobot/project-static/docs/models/circuits/circuit.html +1 -2
  206. nautobot/project-static/docs/models/circuits/circuittermination.html +1 -2
  207. nautobot/project-static/docs/models/circuits/circuittype.html +1 -2
  208. nautobot/project-static/docs/models/circuits/provider.html +1 -2
  209. nautobot/project-static/docs/models/circuits/providernetwork.html +1 -2
  210. nautobot/project-static/docs/models/cloud/cloudaccount.html +1 -2
  211. nautobot/project-static/docs/models/cloud/cloudnetwork.html +1 -2
  212. nautobot/project-static/docs/models/cloud/cloudnetworkprefixassignment.html +1 -2
  213. nautobot/project-static/docs/models/cloud/cloudresourcetype.html +1 -2
  214. nautobot/project-static/docs/models/cloud/cloudservice.html +1 -2
  215. nautobot/project-static/docs/models/cloud/cloudservicenetworkassignment.html +1 -2
  216. nautobot/project-static/docs/models/dcim/cable.html +1 -2
  217. nautobot/project-static/docs/models/dcim/consoleport.html +1 -2
  218. nautobot/project-static/docs/models/dcim/consoleporttemplate.html +1 -2
  219. nautobot/project-static/docs/models/dcim/consoleserverport.html +1 -2
  220. nautobot/project-static/docs/models/dcim/consoleserverporttemplate.html +1 -2
  221. nautobot/project-static/docs/models/dcim/controller.html +1 -2
  222. nautobot/project-static/docs/models/dcim/controllermanageddevicegroup.html +1 -2
  223. nautobot/project-static/docs/models/dcim/device.html +1 -2
  224. nautobot/project-static/docs/models/dcim/devicebay.html +1 -2
  225. nautobot/project-static/docs/models/dcim/devicebaytemplate.html +1 -2
  226. nautobot/project-static/docs/models/dcim/devicefamily.html +1 -2
  227. nautobot/project-static/docs/models/dcim/deviceredundancygroup.html +1 -2
  228. nautobot/project-static/docs/models/dcim/devicetype.html +1 -2
  229. nautobot/project-static/docs/models/dcim/frontport.html +1 -2
  230. nautobot/project-static/docs/models/dcim/frontporttemplate.html +1 -2
  231. nautobot/project-static/docs/models/dcim/interface.html +1 -2
  232. nautobot/project-static/docs/models/dcim/interfacetemplate.html +1 -2
  233. nautobot/project-static/docs/models/dcim/inventoryitem.html +1 -2
  234. nautobot/project-static/docs/models/dcim/location.html +1 -2
  235. nautobot/project-static/docs/models/dcim/locationtype.html +1 -2
  236. nautobot/project-static/docs/models/dcim/manufacturer.html +1 -2
  237. nautobot/project-static/docs/models/dcim/module.html +1 -2
  238. nautobot/project-static/docs/models/dcim/modulebay.html +1 -2
  239. nautobot/project-static/docs/models/dcim/modulebaytemplate.html +1 -2
  240. nautobot/project-static/docs/models/dcim/moduletype.html +1 -2
  241. nautobot/project-static/docs/models/dcim/platform.html +1 -2
  242. nautobot/project-static/docs/models/dcim/powerfeed.html +1 -2
  243. nautobot/project-static/docs/models/dcim/poweroutlet.html +1 -2
  244. nautobot/project-static/docs/models/dcim/poweroutlettemplate.html +1 -2
  245. nautobot/project-static/docs/models/dcim/powerpanel.html +1 -2
  246. nautobot/project-static/docs/models/dcim/powerport.html +1 -2
  247. nautobot/project-static/docs/models/dcim/powerporttemplate.html +1 -2
  248. nautobot/project-static/docs/models/dcim/rack.html +1 -2
  249. nautobot/project-static/docs/models/dcim/rackgroup.html +1 -2
  250. nautobot/project-static/docs/models/dcim/rackreservation.html +1 -2
  251. nautobot/project-static/docs/models/dcim/rearport.html +1 -2
  252. nautobot/project-static/docs/models/dcim/rearporttemplate.html +1 -2
  253. nautobot/project-static/docs/models/dcim/softwareimagefile.html +1 -2
  254. nautobot/project-static/docs/models/dcim/softwareversion.html +1 -2
  255. nautobot/project-static/docs/models/dcim/virtualchassis.html +1 -2
  256. nautobot/project-static/docs/models/extras/computedfield.html +1 -2
  257. nautobot/project-static/docs/models/extras/configcontext.html +1 -2
  258. nautobot/project-static/docs/models/extras/configcontextschema.html +1 -2
  259. nautobot/project-static/docs/models/extras/contact.html +1 -2
  260. nautobot/project-static/docs/models/extras/customfield.html +1 -2
  261. nautobot/project-static/docs/models/extras/customlink.html +1 -2
  262. nautobot/project-static/docs/models/extras/dynamicgroup.html +1 -2
  263. nautobot/project-static/docs/models/extras/exporttemplate.html +1 -2
  264. nautobot/project-static/docs/models/extras/gitrepository.html +1 -2
  265. nautobot/project-static/docs/models/extras/jobhook.html +1 -2
  266. nautobot/project-static/docs/models/extras/joblogentry.html +1 -2
  267. nautobot/project-static/docs/models/extras/jobresult.html +1 -2
  268. nautobot/project-static/docs/models/extras/metadatachoice.html +1 -2
  269. nautobot/project-static/docs/models/extras/metadatatype.html +1 -2
  270. nautobot/project-static/docs/models/extras/objectmetadata.html +1 -2
  271. nautobot/project-static/docs/models/extras/role.html +1 -2
  272. nautobot/project-static/docs/models/extras/savedview.html +1 -2
  273. nautobot/project-static/docs/models/extras/secret.html +1 -2
  274. nautobot/project-static/docs/models/extras/secretsgroup.html +1 -2
  275. nautobot/project-static/docs/models/extras/staticgroupassociation.html +1 -2
  276. nautobot/project-static/docs/models/extras/status.html +1 -2
  277. nautobot/project-static/docs/models/extras/team.html +1 -2
  278. nautobot/project-static/docs/models/ipam/ipaddress.html +1 -2
  279. nautobot/project-static/docs/models/ipam/prefix.html +1 -2
  280. nautobot/project-static/docs/models/ipam/rir.html +1 -2
  281. nautobot/project-static/docs/models/ipam/routetarget.html +1 -2
  282. nautobot/project-static/docs/models/ipam/service.html +1 -2
  283. nautobot/project-static/docs/models/ipam/vlan.html +1 -2
  284. nautobot/project-static/docs/models/ipam/vlangroup.html +1 -2
  285. nautobot/project-static/docs/models/ipam/vrf.html +1 -2
  286. nautobot/project-static/docs/models/tenancy/tenant.html +1 -2
  287. nautobot/project-static/docs/models/tenancy/tenantgroup.html +1 -2
  288. nautobot/project-static/docs/models/virtualization/cluster.html +1 -2
  289. nautobot/project-static/docs/models/virtualization/clustergroup.html +1 -2
  290. nautobot/project-static/docs/models/virtualization/clustertype.html +1 -2
  291. nautobot/project-static/docs/models/virtualization/virtualmachine.html +1 -2
  292. nautobot/project-static/docs/models/virtualization/vminterface.html +1 -2
  293. nautobot/project-static/docs/objects.inv +0 -0
  294. nautobot/project-static/docs/overview/application_stack.html +10 -10
  295. nautobot/project-static/docs/overview/design_philosophy.html +10 -10
  296. nautobot/project-static/docs/overview/index.html +1 -2
  297. nautobot/project-static/docs/plugins/development.html +1 -2
  298. nautobot/project-static/docs/plugins/index.html +1 -2
  299. nautobot/project-static/docs/plugins/porting-from-netbox.html +1 -2
  300. nautobot/project-static/docs/release-notes/index.html +15 -15
  301. nautobot/project-static/docs/release-notes/version-1.0.html +10 -10
  302. nautobot/project-static/docs/release-notes/version-1.1.html +10 -10
  303. nautobot/project-static/docs/release-notes/version-1.2.html +10 -10
  304. nautobot/project-static/docs/release-notes/version-1.3.html +10 -10
  305. nautobot/project-static/docs/release-notes/version-1.4.html +10 -10
  306. nautobot/project-static/docs/release-notes/version-1.5.html +10 -10
  307. nautobot/project-static/docs/release-notes/version-1.6.html +623 -188
  308. nautobot/project-static/docs/release-notes/version-2.0.html +10 -10
  309. nautobot/project-static/docs/release-notes/version-2.1.html +10 -10
  310. nautobot/project-static/docs/release-notes/version-2.2.html +10 -10
  311. nautobot/project-static/docs/release-notes/version-2.3.html +548 -192
  312. nautobot/project-static/docs/requirements.txt +2 -2
  313. nautobot/project-static/docs/rest-api/overview.html +1 -2
  314. nautobot/project-static/docs/search/search_index.json +1 -1
  315. nautobot/project-static/docs/sitemap.xml +270 -270
  316. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  317. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +10 -10
  318. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +10 -10
  319. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +65 -12
  320. nautobot/project-static/docs/user-guide/administration/configuration/index.html +10 -10
  321. nautobot/project-static/docs/user-guide/administration/configuration/node-configuration.html +1 -2
  322. nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +1 -2
  323. nautobot/project-static/docs/user-guide/administration/configuration/redis.html +10 -10
  324. nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +1 -2
  325. nautobot/project-static/docs/user-guide/administration/configuration/settings.html +122 -10
  326. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +10 -10
  327. nautobot/project-static/docs/user-guide/administration/guides/caching.html +1 -2
  328. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +10 -10
  329. nautobot/project-static/docs/user-guide/administration/guides/docker.html +10 -10
  330. nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +10 -10
  331. nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +1 -2
  332. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +10 -10
  333. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +10 -10
  334. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +10 -10
  335. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +10 -10
  336. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +10 -10
  337. nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +10 -10
  338. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +10 -10
  339. nautobot/project-static/docs/user-guide/administration/installation/docker.html +1 -2
  340. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +10 -10
  341. nautobot/project-static/docs/user-guide/administration/installation/health-checks.html +1 -2
  342. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +10 -10
  343. nautobot/project-static/docs/user-guide/administration/installation/index.html +10 -10
  344. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +10 -10
  345. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +10 -10
  346. nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +1 -2
  347. nautobot/project-static/docs/user-guide/administration/installation/services.html +10 -10
  348. nautobot/project-static/docs/user-guide/administration/installation-extras/docker.html +1 -2
  349. nautobot/project-static/docs/user-guide/administration/installation-extras/health-checks.html +1 -2
  350. nautobot/project-static/docs/user-guide/administration/installation-extras/selinux-troubleshooting.html +1 -2
  351. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +10 -10
  352. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +10 -10
  353. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +10 -10
  354. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +10 -10
  355. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +10 -10
  356. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +10 -10
  357. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +10 -10
  358. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +10 -10
  359. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +10 -10
  360. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +10 -10
  361. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +10 -10
  362. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +10 -10
  363. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +10 -10
  364. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +10 -10
  365. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +10 -10
  366. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +10 -10
  367. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +10 -10
  368. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +10 -10
  369. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +10 -10
  370. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +10 -10
  371. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +10 -10
  372. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +10 -10
  373. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +10 -10
  374. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +10 -10
  375. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +10 -10
  376. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +10 -10
  377. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +10 -10
  378. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +10 -10
  379. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +10 -10
  380. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +10 -10
  381. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +10 -10
  382. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +10 -10
  383. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +10 -10
  384. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +10 -10
  385. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +10 -10
  386. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +10 -10
  387. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +10 -10
  388. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +10 -10
  389. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +10 -10
  390. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +10 -10
  391. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +10 -10
  392. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +10 -10
  393. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +10 -10
  394. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +10 -10
  395. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +10 -10
  396. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +10 -10
  397. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +10 -10
  398. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +10 -10
  399. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +10 -10
  400. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +10 -10
  401. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +10 -10
  402. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +10 -10
  403. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +10 -10
  404. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +10 -10
  405. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +10 -10
  406. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +10 -10
  407. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +10 -10
  408. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +10 -10
  409. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +10 -10
  410. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +10 -10
  411. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +10 -10
  412. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +10 -10
  413. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +10 -10
  414. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +10 -10
  415. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +10 -10
  416. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +10 -10
  417. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +10 -10
  418. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +10 -10
  419. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +10 -10
  420. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +10 -10
  421. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +10 -10
  422. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +10 -10
  423. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +10 -10
  424. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +10 -10
  425. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +10 -10
  426. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +10 -10
  427. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +10 -10
  428. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +10 -10
  429. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +10 -10
  430. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +10 -10
  431. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +10 -10
  432. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +10 -10
  433. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +10 -10
  434. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +10 -10
  435. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +10 -10
  436. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +10 -10
  437. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +10 -10
  438. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +10 -10
  439. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +10 -10
  440. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +10 -10
  441. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +10 -10
  442. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +10 -10
  443. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +10 -10
  444. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +10 -10
  445. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +10 -10
  446. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +10 -10
  447. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +10 -10
  448. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +10 -10
  449. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +10 -10
  450. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +10 -10
  451. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +10 -10
  452. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +10 -10
  453. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +10 -10
  454. nautobot/project-static/docs/user-guide/index.html +10 -10
  455. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +10 -10
  456. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +10 -10
  457. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +10 -10
  458. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +10 -10
  459. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +10 -10
  460. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +10 -10
  461. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +10 -10
  462. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +10 -10
  463. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +10 -10
  464. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +10 -10
  465. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +10 -10
  466. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +10 -10
  467. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +10 -10
  468. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +10 -10
  469. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +10 -10
  470. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +10 -10
  471. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +10 -10
  472. nautobot/project-static/docs/user-guide/platform-functionality/note.html +10 -10
  473. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +10 -10
  474. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +10 -10
  475. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +10 -10
  476. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +10 -10
  477. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +10 -10
  478. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +10 -10
  479. nautobot/project-static/docs/user-guide/platform-functionality/role.html +10 -10
  480. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +10 -10
  481. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +10 -10
  482. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +10 -10
  483. nautobot/project-static/docs/user-guide/platform-functionality/status.html +10 -10
  484. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +10 -10
  485. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +10 -10
  486. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +10 -10
  487. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +10 -10
  488. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +10 -10
  489. nautobot/project-static/docs/user-guides/custom-fields.html +1 -2
  490. nautobot/project-static/docs/user-guides/getting-started/creating-devices.html +1 -2
  491. nautobot/project-static/docs/user-guides/getting-started/index.html +1 -2
  492. nautobot/project-static/docs/user-guides/getting-started/interfaces.html +1 -2
  493. nautobot/project-static/docs/user-guides/getting-started/ipam.html +1 -2
  494. nautobot/project-static/docs/user-guides/getting-started/platforms.html +1 -2
  495. nautobot/project-static/docs/user-guides/getting-started/search-bar.html +1 -2
  496. nautobot/project-static/docs/user-guides/getting-started/tenants.html +1 -2
  497. nautobot/project-static/docs/user-guides/getting-started/vlans-and-vlan-groups.html +1 -2
  498. nautobot/project-static/docs/user-guides/git-data-source.html +1 -2
  499. nautobot/project-static/docs/user-guides/graphql.html +1 -2
  500. nautobot/project-static/docs/user-guides/ip-address-merge-tool.html +1 -2
  501. nautobot/project-static/docs/user-guides/relationships.html +1 -2
  502. nautobot/project-static/docs/user-guides/s3-django-storage.html +1 -2
  503. nautobot/project-static/js/forms.js +10 -0
  504. nautobot/users/api/serializers.py +1 -0
  505. nautobot/virtualization/filters.py +19 -2
  506. nautobot/virtualization/forms.py +3 -3
  507. nautobot/virtualization/templates/virtualization/vminterface.html +4 -0
  508. nautobot/virtualization/tests/test_filters.py +9 -0
  509. {nautobot-2.3.11.dist-info → nautobot-2.3.13.dist-info}/METADATA +4 -4
  510. {nautobot-2.3.11.dist-info → nautobot-2.3.13.dist-info}/RECORD +514 -513
  511. nautobot/project-static/docs/assets/stylesheets/main.0253249f.min.css +0 -1
  512. nautobot/project-static/docs/assets/stylesheets/main.0253249f.min.css.map +0 -1
  513. {nautobot-2.3.11.dist-info → nautobot-2.3.13.dist-info}/LICENSE.txt +0 -0
  514. {nautobot-2.3.11.dist-info → nautobot-2.3.13.dist-info}/NOTICE +0 -0
  515. {nautobot-2.3.11.dist-info → nautobot-2.3.13.dist-info}/WHEEL +0 -0
  516. {nautobot-2.3.11.dist-info → nautobot-2.3.13.dist-info}/entry_points.txt +0 -0
nautobot/ipam/tables.py CHANGED
@@ -175,14 +175,6 @@ VLAN_PREFIXES = """
175
175
  {% endfor %}
176
176
  """
177
177
 
178
- VLAN_ROLE_LINK = """
179
- {% if record.role %}
180
- <a href="{% url 'ipam:vlan_list' %}?role={{ record.role.name }}">{{ record.role }}</a>
181
- {% else %}
182
- &mdash;
183
- {% endif %}
184
- """
185
-
186
178
  VLANGROUP_ADD_VLAN = """
187
179
  {% with next_vid=record.get_next_available_vid %}
188
180
  {% if next_vid and perms.ipam.add_vlan %}
@@ -346,7 +338,9 @@ class PrefixTable(StatusTableMixin, RoleTableMixin, BaseTable):
346
338
  prefix = tables.TemplateColumn(
347
339
  template_code=PREFIX_COPY_LINK, attrs={"td": {"class": "text-nowrap"}}, order_by=("network", "prefix_length")
348
340
  )
349
- vrf_count = LinkedCountColumn(viewname="ipam:vrf_list", url_params={"prefixes": "pk"}, verbose_name="VRFs")
341
+ vrf_count = LinkedCountColumn(
342
+ viewname="ipam:vrf_list", url_params={"prefix": "pk"}, reverse_lookup="prefixes", verbose_name="VRFs"
343
+ )
350
344
  tenant = TenantColumn()
351
345
  namespace = tables.Column(linkify=True)
352
346
  vlan = tables.Column(linkify=True, verbose_name="VLAN")
@@ -448,13 +442,27 @@ class IPAddressTable(StatusTableMixin, RoleTableMixin, BaseTable):
448
442
  )
449
443
  tenant = TenantColumn()
450
444
  parent__namespace = tables.Column(linkify=True)
451
- # Interface, Device, and VirtualMachine tables aren't currently filterable by IP address (?) so no LinkedCountColumn
452
- interface_count = tables.Column(verbose_name="Interfaces")
453
- interface_parent_count = tables.Column(verbose_name="Devices")
445
+ interface_count = LinkedCountColumn(
446
+ viewname="dcim:interface_list", url_params={"ip_addresses": "pk"}, verbose_name="Interfaces"
447
+ )
448
+ # TODO: what about interfaces assigned to modules?
449
+ interface_parent_count = LinkedCountColumn(
450
+ viewname="dcim:device_list",
451
+ url_params={"ip_addresses": "pk"},
452
+ reverse_lookup="interfaces__ip_addresses",
453
+ distinct=True,
454
+ verbose_name="Devices",
455
+ )
454
456
  vm_interface_count = LinkedCountColumn(
455
457
  viewname="virtualization:vminterface_list", url_params={"ip_addresses": "pk"}, verbose_name="VM Interfaces"
456
458
  )
457
- vm_interface_parent_count = tables.Column(verbose_name="Virtual Machines")
459
+ vm_interface_parent_count = LinkedCountColumn(
460
+ viewname="virtualization:virtualmachine_list",
461
+ url_params={"ip_addresses": "pk"},
462
+ reverse_lookup="interfaces__ip_addresses",
463
+ distinct=True,
464
+ verbose_name="Virtual Machines",
465
+ )
458
466
 
459
467
  class Meta(BaseTable.Meta):
460
468
  model = IPAddress
@@ -766,7 +774,7 @@ class VLANVirtualMachinesTable(VLANMembersTable):
766
774
  fields = ("virtual_machine", "name", "tagged", "actions")
767
775
 
768
776
 
769
- class InterfaceVLANTable(StatusTableMixin, BaseTable):
777
+ class InterfaceVLANTable(StatusTableMixin, RoleTableMixin, BaseTable):
770
778
  """
771
779
  List VLANs assigned to a specific Interface.
772
780
  """
@@ -775,7 +783,6 @@ class InterfaceVLANTable(StatusTableMixin, BaseTable):
775
783
  tagged = BooleanColumn()
776
784
  vlan_group = tables.Column(accessor=Accessor("vlan_group__name"), verbose_name="Group")
777
785
  tenant = TenantColumn()
778
- role = tables.TemplateColumn(template_code=VLAN_ROLE_LINK)
779
786
  location_count = LinkedCountColumn(
780
787
  viewname="dcim:location_list",
781
788
  url_params={"vlans": "pk"},
@@ -4,7 +4,7 @@
4
4
 
5
5
  {% block masthead %}
6
6
  <h1>
7
- <span class="hover_copy"><span id="copy_title">{{ object }}</span><button type="button" class="btn btn-inline btn-default hover_copy_button" data-clipboard-target="#copy_title">
7
+ <span class="hover_copy"><span id="copy_title">{{ object }}</span><button type="button" class="btn btn-inline btn-default hover_copy_button" data-clipboard-text="{{ object }}">
8
8
  <span class="mdi mdi-content-copy"></span>
9
9
  </button>
10
10
  </span>
@@ -1,13 +1,15 @@
1
1
  import re
2
2
  from unittest import skipIf
3
3
 
4
- from django.db import connection
4
+ from django.contrib.contenttypes.models import ContentType
5
+ from django.db import connection, transaction
5
6
  import netaddr
6
7
 
7
8
  from nautobot.core.testing import TestCase
8
9
  from nautobot.extras.models import Status
9
10
  from nautobot.ipam import choices
10
11
  from nautobot.ipam.models import IPAddress, Namespace, Prefix
12
+ from nautobot.users.models import ObjectPermission
11
13
 
12
14
 
13
15
  class IPAddressQuerySet(TestCase):
@@ -266,6 +268,28 @@ class IPAddressQuerySet(TestCase):
266
268
  [instance for ip, instance in self.ips.items() if "10.0.0" in ip],
267
269
  )
268
270
 
271
+ def test_lookup_not_ambiguous(self):
272
+ """Check for issues like https://github.com/nautobot/nautobot/issues/5166."""
273
+ obj_perm = ObjectPermission.objects.create(name="Test Permission", constraints={}, actions=["view"])
274
+ obj_perm.object_types.add(ContentType.objects.get_for_model(IPAddress))
275
+ obj_perm.users.add(self.user)
276
+ queryset = IPAddress.objects.select_related("parent", "nat_inside", "status")
277
+
278
+ for permission_constraint in (
279
+ {"host__family": 4},
280
+ {"host__net_host": "10.0.0.1"},
281
+ {"host__net_host_contained": "10.0.0.0/24"},
282
+ {"host__net_in": ["10.0.0.0/24"]},
283
+ ):
284
+ with self.subTest(permission_type=next(iter(permission_constraint.keys()))):
285
+ try:
286
+ with transaction.atomic():
287
+ obj_perm.constraints = permission_constraint
288
+ obj_perm.save()
289
+ list(queryset.restrict(self.user, "view"))
290
+ finally:
291
+ delattr(self.user, "_object_perm_cache")
292
+
269
293
  @skipIf(
270
294
  connection.vendor == "postgresql",
271
295
  "Not currently supported on postgresql",
@@ -648,6 +672,30 @@ class PrefixQuerysetTestCase(TestCase):
648
672
  prefix = Prefix.objects.filter(network__net_equals="192.168.0.0/16")[0]
649
673
  self.assertEqual(Prefix.objects.filter(prefix="192.168.0.0/16")[0], prefix)
650
674
 
675
+ def test_lookup_not_ambiguous(self):
676
+ """Check for issues like https://github.com/nautobot/nautobot/issues/5166."""
677
+ obj_perm = ObjectPermission.objects.create(name="Test Permission", constraints={}, actions=["view"])
678
+ obj_perm.object_types.add(ContentType.objects.get_for_model(Prefix))
679
+ obj_perm.users.add(self.user)
680
+ queryset = Prefix.objects.select_related("parent", "rir", "role", "status", "namespace")
681
+
682
+ for permission_constraint in (
683
+ {"network__family": 4},
684
+ {"network__net_equals": "192.168.0.0/16"},
685
+ {"network__net_contained": "192.0.0.0/8"},
686
+ {"network__net_contained_or_equal": "192.0.0.0/8"},
687
+ {"network__net_contains": "192.168.3.192/32"},
688
+ {"network__net_contains_or_equals": "192.168.3.192/32"},
689
+ ):
690
+ with self.subTest(permission_type=next(iter(permission_constraint.keys()))):
691
+ try:
692
+ with transaction.atomic():
693
+ obj_perm.constraints = permission_constraint
694
+ obj_perm.save()
695
+ list(queryset.restrict(self.user, "view"))
696
+ finally:
697
+ delattr(self.user, "_object_perm_cache")
698
+
651
699
  @skipIf(
652
700
  connection.vendor == "postgresql",
653
701
  "Not currently supported on postgresql",
@@ -4,6 +4,7 @@ import netaddr
4
4
  from nautobot.core.forms.utils import compress_range
5
5
  from nautobot.dcim.models import Interface
6
6
  from nautobot.extras.models import RelationshipAssociation
7
+ from nautobot.ipam.choices import PrefixTypeChoices
7
8
  from nautobot.ipam.models import Prefix, VLAN
8
9
  from nautobot.ipam.querysets import IPAddressQuerySet
9
10
  from nautobot.virtualization.models import VMInterface
@@ -25,6 +26,13 @@ def add_available_prefixes(parent, prefix_list):
25
26
  return prefix_list
26
27
 
27
28
 
29
+ def get_add_available_prefixes_callback(show_available, parent):
30
+ """Conditionally provide a callback for add_available_prefixes()."""
31
+ if show_available:
32
+ return lambda prefixes: add_available_prefixes(parent.prefix, prefixes)
33
+ return lambda prefixes: prefixes
34
+
35
+
28
36
  def add_available_ipaddresses(prefix, ipaddress_list, is_pool=False):
29
37
  """
30
38
  Annotate ranges of available IP addresses within a given prefix. If is_pool is True, the first and last IP will be
@@ -81,6 +89,15 @@ def add_available_ipaddresses(prefix, ipaddress_list, is_pool=False):
81
89
  return output
82
90
 
83
91
 
92
+ def get_add_available_ipaddresses_callback(show_available, parent):
93
+ """Conditionally provide a callback for add_available_ipaddresses()."""
94
+ if show_available:
95
+ return lambda ip_addresses: add_available_ipaddresses(
96
+ parent.prefix, ip_addresses, is_pool=(parent.type == PrefixTypeChoices.TYPE_POOL)
97
+ )
98
+ return lambda ip_addresses: ip_addresses
99
+
100
+
84
101
  def add_available_vlans(vlan_group, vlans):
85
102
  """
86
103
  Create fake records for all gaps between used VLANs
@@ -99,6 +116,13 @@ def add_available_vlans(vlan_group, vlans):
99
116
  return vlans
100
117
 
101
118
 
119
+ def get_add_available_vlans_callback(show_available, vlan_group):
120
+ """Conditionally provide a callback for add_available_vlans()."""
121
+ if show_available:
122
+ return lambda vlans: add_available_vlans(vlan_group=vlan_group, vlans=vlans)
123
+ return lambda vlans: vlans
124
+
125
+
102
126
  def handle_relationship_changes_when_merging_ips(merged_ip, merged_attributes, collapsed_ips):
103
127
  """
104
128
  Update/Delete RelationshipAssociation instances after we collapsed the IPs.
nautobot/ipam/views.py CHANGED
@@ -2,7 +2,9 @@ import logging
2
2
 
3
3
  from django.conf import settings
4
4
  from django.contrib import messages
5
+ from django.contrib.auth.models import AnonymousUser
5
6
  from django.core.cache import cache
7
+ from django.core.exceptions import ObjectDoesNotExist
6
8
  from django.db import models, transaction
7
9
  from django.db.models import Prefetch, ProtectedError, Q
8
10
  from django.forms.models import model_to_dict
@@ -23,7 +25,7 @@ from nautobot.core.views import generic, mixins as view_mixins
23
25
  from nautobot.core.views.paginator import EnhancedPaginator, get_paginate_count
24
26
  from nautobot.core.views.utils import handle_protectederror
25
27
  from nautobot.dcim.models import Device, Interface, Location
26
- from nautobot.extras.models import Role, Status, Tag
28
+ from nautobot.extras.models import Role, SavedView, Status, Tag
27
29
  from nautobot.ipam import choices, constants
28
30
  from nautobot.ipam.api import serializers
29
31
  from nautobot.tenancy.models import Tenant
@@ -43,9 +45,9 @@ from .models import (
43
45
  VRF,
44
46
  )
45
47
  from .utils import (
46
- add_available_ipaddresses,
47
- add_available_prefixes,
48
- add_available_vlans,
48
+ get_add_available_ipaddresses_callback,
49
+ get_add_available_prefixes_callback,
50
+ get_add_available_vlans_callback,
49
51
  handle_relationship_changes_when_merging_ips,
50
52
  retrieve_interface_or_vminterface_from_request,
51
53
  )
@@ -101,23 +103,12 @@ class NamespaceIPAddressesView(generic.ObjectView):
101
103
 
102
104
  def get_extra_context(self, request, instance):
103
105
  # Find all IPAddresses belonging to this Namespace
104
- ip_addresses = (
105
- instance.ip_addresses.restrict(request.user, "view")
106
- .select_related("role", "status", "tenant")
107
- .annotate(
108
- interface_count=count_related(Interface, "ip_addresses"),
109
- interface_parent_count=count_related(Device, "interfaces__ip_addresses", distinct=True),
110
- vm_interface_count=count_related(VMInterface, "ip_addresses"),
111
- vm_interface_parent_count=count_related(VirtualMachine, "interfaces__ip_addresses", distinct=True),
112
- )
113
- )
106
+ ip_addresses = instance.ip_addresses.restrict(request.user, "view").select_related("role", "status", "tenant")
114
107
 
115
- ip_address_table = tables.IPAddressTable(ip_addresses)
108
+ ip_address_table = tables.IPAddressTable(ip_addresses, exclude=["namespace"])
116
109
  if request.user.has_perm("ipam.change_ipaddress") or request.user.has_perm("ipam.delete_ipaddress"):
117
110
  ip_address_table.columns.show("pk")
118
111
 
119
- ip_address_table.exclude = ("namespace",)
120
-
121
112
  paginate = {
122
113
  "paginator_class": EnhancedPaginator,
123
114
  "per_page": get_paginate_count(request),
@@ -154,12 +145,10 @@ class NamespacePrefixesView(generic.ObjectView):
154
145
  # Find all Prefixes belonging to this Namespace
155
146
  prefixes = instance.prefixes.restrict(request.user, "view").select_related("status")
156
147
 
157
- prefix_table = tables.PrefixTable(prefixes)
148
+ prefix_table = tables.PrefixTable(prefixes, exclude=["namespace"])
158
149
  if request.user.has_perm("ipam.change_prefix") or request.user.has_perm("ipam.delete_prefix"):
159
150
  prefix_table.columns.show("pk")
160
151
 
161
- prefix_table.exclude = ("namespace",)
162
-
163
152
  paginate = {
164
153
  "paginator_class": EnhancedPaginator,
165
154
  "per_page": get_paginate_count(request),
@@ -196,12 +185,10 @@ class NamespaceVRFsView(generic.ObjectView):
196
185
  # Find all VRFs belonging to this Namespace
197
186
  vrfs = instance.vrfs.restrict(request.user, "view")
198
187
 
199
- vrf_table = tables.VRFTable(vrfs)
188
+ vrf_table = tables.VRFTable(vrfs, exclude=["namespace"])
200
189
  if request.user.has_perm("ipam.change_vrf") or request.user.has_perm("ipam.delete_vrf"):
201
190
  vrf_table.columns.show("pk")
202
191
 
203
- vrf_table.exclude = ("namespace",)
204
-
205
192
  paginate = {
206
193
  "paginator_class": EnhancedPaginator,
207
194
  "per_page": get_paginate_count(request),
@@ -266,8 +253,7 @@ class VRFView(generic.ObjectView):
266
253
  # TODO(jathan): This table might need to live on Device and on VRFs
267
254
  # (possibly replacing `device_table` above.
268
255
  vrfs = instance.device_assignments.restrict(request.user, "view")
269
- vrf_table = tables.VRFDeviceAssignmentTable(vrfs)
270
- vrf_table.exclude = ("vrf",)
256
+ vrf_table = tables.VRFDeviceAssignmentTable(vrfs, exclude=["vrf"])
271
257
  # context["vrf_table"] = vrf_table
272
258
 
273
259
  paginate = {
@@ -466,8 +452,7 @@ class PrefixView(generic.ObjectView):
466
452
  def get_extra_context(self, request, instance):
467
453
  # Parent prefixes table
468
454
  parent_prefixes = instance.ancestors().restrict(request.user, "view")
469
- parent_prefix_table = tables.PrefixTable(parent_prefixes)
470
- parent_prefix_table.exclude = ("namespace",)
455
+ parent_prefix_table = tables.PrefixTable(parent_prefixes, exclude=["namespace"])
471
456
 
472
457
  vrfs = instance.vrf_assignments.restrict(request.user, "view")
473
458
  vrf_table = tables.VRFPrefixAssignmentTable(vrfs, orderable=False)
@@ -498,19 +483,19 @@ class PrefixPrefixesView(generic.ObjectView):
498
483
 
499
484
  def get_extra_context(self, request, instance):
500
485
  # Child prefixes table
501
- child_prefixes = (
502
- instance.descendants()
503
- .restrict(request.user, "view")
504
- .select_related("parent", "status", "role", "vlan", "namespace")
505
- .annotate(location_count=count_related(Location, "prefixes"))
506
- )
486
+ child_prefixes = instance.descendants().restrict(request.user, "view")
507
487
 
508
488
  # Add available prefixes to the table if requested
509
- if child_prefixes and request.GET.get("show_available", "true") == "true":
510
- child_prefixes = add_available_prefixes(instance.prefix, child_prefixes)
489
+ data_transform_callback = get_add_available_prefixes_callback(
490
+ show_available=request.GET.get("show_available", "true") == "true", parent=instance
491
+ )
511
492
 
512
- prefix_table = tables.PrefixDetailTable(child_prefixes, hide_hierarchy_ui=True)
513
- prefix_table.exclude = ("namespace",)
493
+ prefix_table = tables.PrefixDetailTable(
494
+ child_prefixes,
495
+ hide_hierarchy_ui=True,
496
+ exclude=["namespace"],
497
+ data_transform_callback=data_transform_callback,
498
+ )
514
499
  if request.user.has_perm("ipam.change_prefix") or request.user.has_perm("ipam.delete_prefix"):
515
500
  prefix_table.columns.show("pk")
516
501
 
@@ -545,26 +530,16 @@ class PrefixIPAddressesView(generic.ObjectView):
545
530
 
546
531
  def get_extra_context(self, request, instance):
547
532
  # Find all IPAddresses belonging to this Prefix
548
- ipaddresses = (
549
- instance.get_all_ips()
550
- .restrict(request.user, "view")
551
- .select_related("role", "status", "tenant")
552
- .prefetch_related("primary_ip4_for", "primary_ip6_for")
553
- .annotate(
554
- interface_count=count_related(Interface, "ip_addresses"),
555
- interface_parent_count=count_related(Device, "interfaces__ip_addresses", distinct=True),
556
- vm_interface_count=count_related(VMInterface, "ip_addresses"),
557
- vm_interface_parent_count=count_related(VirtualMachine, "interfaces__ip_addresses", distinct=True),
558
- )
559
- )
533
+ ipaddresses = instance.get_all_ips().restrict(request.user, "view")
560
534
 
561
535
  # Add available IP addresses to the table if requested
562
- if request.GET.get("show_available", "true") == "true":
563
- ipaddresses = add_available_ipaddresses(
564
- instance.prefix, ipaddresses, instance.type == choices.PrefixTypeChoices.TYPE_POOL
565
- )
536
+ data_transform_callback = get_add_available_ipaddresses_callback(
537
+ show_available=request.GET.get("show_available", "true") == "true", parent=instance
538
+ )
566
539
 
567
- ip_table = tables.IPAddressTable(ipaddresses)
540
+ ip_table = tables.IPAddressTable(
541
+ ipaddresses, exclude=["parent__namespace"], data_transform_callback=data_transform_callback
542
+ )
568
543
  if request.user.has_perm("ipam.change_ipaddress") or request.user.has_perm("ipam.delete_ipaddress"):
569
544
  ip_table.columns.show("pk")
570
545
 
@@ -761,18 +736,36 @@ class PrefixBulkDeleteView(generic.BulkDeleteView):
761
736
 
762
737
 
763
738
  class IPAddressListView(generic.ObjectListView):
764
- queryset = IPAddress.objects.annotate(
765
- interface_count=count_related(Interface, "ip_addresses"),
766
- interface_parent_count=count_related(Device, "interfaces__ip_addresses", distinct=True),
767
- vm_interface_count=count_related(VMInterface, "ip_addresses"),
768
- vm_interface_parent_count=count_related(VirtualMachine, "interfaces__ip_addresses", distinct=True),
769
- assigned_count=count_related(Interface, "ip_addresses") + count_related(VMInterface, "ip_addresses"),
770
- )
739
+ queryset = IPAddress.objects.all()
771
740
  filterset = filters.IPAddressFilterSet
772
741
  filterset_form = forms.IPAddressFilterForm
773
742
  table = tables.IPAddressDetailTable
774
743
  template_name = "ipam/ipaddress_list.html"
775
- use_new_ui = True
744
+
745
+ def alter_queryset(self, request):
746
+ queryset = super().alter_queryset(request)
747
+
748
+ # All of the below is just to determine whether we are displaying the "assigned_count" column, and if so,
749
+ # perform the relevant queryset annotation. Ref: nautobot/nautobot#6605
750
+ if request.user is None or isinstance(request.user, AnonymousUser):
751
+ table_columns = None
752
+ else:
753
+ table_columns = request.user.get_config("tables.IPAddressDetailTable.columns")
754
+ current_saved_view_pk = request.GET.get("saved_view", None)
755
+ if current_saved_view_pk:
756
+ try:
757
+ current_saved_view = SavedView.objects.get(view="ipam:ipaddress_list", pk=current_saved_view_pk)
758
+ view_table_config = current_saved_view.config.get("table_config", {}).get("IPAddressDetailTable", None)
759
+ if view_table_config is not None:
760
+ table_columns = view_table_config.get("columns", table_columns)
761
+ except ObjectDoesNotExist:
762
+ pass
763
+
764
+ if table_columns and "assigned_count" in table_columns:
765
+ queryset = queryset.annotate(
766
+ assigned_count=count_related(Interface, "ip_addresses") + count_related(VMInterface, "ip_addresses"),
767
+ )
768
+ return queryset
776
769
 
777
770
 
778
771
  class IPAddressView(generic.ObjectView):
@@ -1265,17 +1258,18 @@ class VLANGroupView(generic.ObjectView):
1265
1258
  def get_extra_context(self, request, instance):
1266
1259
  vlans = (
1267
1260
  VLAN.objects.restrict(request.user, "view")
1268
- .annotate(location_count=count_related(Location, "vlans"))
1269
1261
  .filter(vlan_group=instance)
1270
1262
  .prefetch_related(Prefetch("prefixes", queryset=Prefix.objects.restrict(request.user)))
1271
1263
  )
1272
1264
  vlans_count = vlans.count()
1273
- vlans = add_available_vlans(vlan_group=instance, vlans=vlans)
1274
1265
 
1275
- vlan_table = tables.VLANDetailTable(vlans)
1266
+ data_transform_callback = get_add_available_vlans_callback(show_available=True, vlan_group=instance)
1267
+
1268
+ vlan_table = tables.VLANDetailTable(
1269
+ vlans, exclude=["vlan_group"], data_transform_callback=data_transform_callback
1270
+ )
1276
1271
  if request.user.has_perm("ipam.change_vlan") or request.user.has_perm("ipam.delete_vlan"):
1277
1272
  vlan_table.columns.show("pk")
1278
- vlan_table.columns.hide("vlan_group")
1279
1273
 
1280
1274
  paginate = {
1281
1275
  "paginator_class": EnhancedPaginator,
@@ -1350,8 +1344,7 @@ class VLANView(generic.ObjectView):
1350
1344
  "namespace",
1351
1345
  )
1352
1346
  )
1353
- prefix_table = tables.PrefixTable(list(prefixes), hide_hierarchy_ui=True)
1354
- prefix_table.exclude = ("vlan",)
1347
+ prefix_table = tables.PrefixTable(list(prefixes), hide_hierarchy_ui=True, exclude=["vlan"])
1355
1348
 
1356
1349
  paginate = {
1357
1350
  "paginator_class": EnhancedPaginator,
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
  <link rel="icon" href="/projects/core/en/stable/assets/favicon.ico">
15
- <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.42">
15
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.47">
16
16
 
17
17
 
18
18
 
@@ -20,7 +20,7 @@
20
20
 
21
21
 
22
22
 
23
- <link rel="stylesheet" href="/projects/core/en/stable/assets/stylesheets/main.0253249f.min.css">
23
+ <link rel="stylesheet" href="/projects/core/en/stable/assets/stylesheets/main.6f8fc17f.min.css">
24
24
 
25
25
 
26
26
  <link rel="stylesheet" href="/projects/core/en/stable/assets/stylesheets/palette.06af60db.min.css">
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- <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.6.0 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 0zm-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.1"/></svg>');}</style>
35
+ <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.7.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 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 0zm-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.1"/></svg>');}</style>
36
36
 
37
37
 
38
38
 
@@ -197,7 +197,7 @@
197
197
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
198
198
  <div class="md-source__icon md-icon">
199
199
 
200
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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.81"/></svg>
200
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.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 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.81"/></svg>
201
201
  </div>
202
202
  <div class="md-source__repository">
203
203
  GitHub
@@ -355,7 +355,7 @@
355
355
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
356
356
  <div class="md-source__icon md-icon">
357
357
 
358
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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.81"/></svg>
358
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.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 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.81"/></svg>
359
359
  </div>
360
360
  <div class="md-source__repository">
361
361
  GitHub
@@ -8600,7 +8600,7 @@
8600
8600
 
8601
8601
 
8602
8602
  <a href="https://blog.networktocode.com/blog/tags/nautobot" target="_blank" rel="noopener" title="Network to Code Blog" class="md-social__link">
8603
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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 64m0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0m32-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-32"/></svg>
8603
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.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 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 64m0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0m32-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-32"/></svg>
8604
8604
  </a>
8605
8605
 
8606
8606
 
@@ -8608,7 +8608,7 @@
8608
8608
 
8609
8609
 
8610
8610
  <a href="https://www.youtube.com/playlist?list=PLjA0bhxgryJ2Ts4GJMDA-tPzVWEncv4pb" target="_blank" rel="noopener" title="Nautobot Videos" class="md-social__link">
8611
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.6.0 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.305m-317.51 213.508V175.185l142.739 81.205z"/></svg>
8611
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.7.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 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.305m-317.51 213.508V175.185l142.739 81.205z"/></svg>
8612
8612
  </a>
8613
8613
 
8614
8614
 
@@ -8616,7 +8616,7 @@
8616
8616
 
8617
8617
 
8618
8618
  <a href="https://www.networktocode.com/community/" target="_blank" rel="noopener" title="Network to Code Community" class="md-social__link">
8619
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 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.1s21.16-47.06 47.06-47.06h47.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.06zm47.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.06zm0 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.06zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06S448 171 448 196.9s-21.16 47.06-47.06 47.06h-47.06zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06S309 480 283.1 480s-47.06-21.16-47.06-47.06v-47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06s21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06z"/></svg>
8619
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.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 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1s21.16-47.06 47.06-47.06h47.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.06zm47.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.06zm0 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.06zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06S448 171 448 196.9s-21.16 47.06-47.06 47.06h-47.06zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06S309 480 283.1 480s-47.06-21.16-47.06-47.06v-47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06s21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06z"/></svg>
8620
8620
  </a>
8621
8621
 
8622
8622
 
@@ -8624,7 +8624,7 @@
8624
8624
 
8625
8625
 
8626
8626
  <a href="https://github.com/nautobot/nautobot" target="_blank" rel="noopener" title="GitHub Repo" class="md-social__link">
8627
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 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.6m-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.3m44.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.9M244.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 8M97.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-1m-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.7m32.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-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
8627
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.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 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.6m-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.3m44.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.9M244.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 8M97.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-1m-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.7m32.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-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
8628
8628
  </a>
8629
8629
 
8630
8630
 
@@ -8632,7 +8632,7 @@
8632
8632
 
8633
8633
 
8634
8634
  <a href="https://twitter.com/networktocode" target="_blank" rel="noopener" title="Network to Code Twitter" class="md-social__link">
8635
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 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.253"/></svg>
8635
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.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 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.253"/></svg>
8636
8636
  </a>
8637
8637
 
8638
8638
  </div>
@@ -5,11 +5,10 @@
5
5
  <meta charset="utf-8">
6
6
  <title>Redirecting...</title>
7
7
  <link rel="canonical" href="../user-guide/administration/configuration/redis.html">
8
- <meta name="robots" content="noindex">
9
8
  <script>var anchor=window.location.hash.substr(1);location.href="../user-guide/administration/configuration/redis.html"+(anchor?"#"+anchor:"")</script>
10
9
  <meta http-equiv="refresh" content="0; url=../user-guide/administration/configuration/redis.html">
11
10
  </head>
12
11
  <body>
13
- Redirecting...
12
+ You're being redirected to a <a href="../user-guide/administration/configuration/redis.html">new destination</a>.
14
13
  </body>
15
14
  </html>
@@ -5,11 +5,10 @@
5
5
  <meta charset="utf-8">
6
6
  <title>Redirecting...</title>
7
7
  <link rel="canonical" href="../user-guide/platform-functionality/change-logging.html">
8
- <meta name="robots" content="noindex">
9
8
  <script>var anchor=window.location.hash.substr(1);location.href="../user-guide/platform-functionality/change-logging.html"+(anchor?"#"+anchor:"")</script>
10
9
  <meta http-equiv="refresh" content="0; url=../user-guide/platform-functionality/change-logging.html">
11
10
  </head>
12
11
  <body>
13
- Redirecting...
12
+ You're being redirected to a <a href="../user-guide/platform-functionality/change-logging.html">new destination</a>.
14
13
  </body>
15
14
  </html>
@@ -5,11 +5,10 @@
5
5
  <meta charset="utf-8">
6
6
  <title>Redirecting...</title>
7
7
  <link rel="canonical" href="../user-guide/core-data-model/extras/configcontext.html">
8
- <meta name="robots" content="noindex">
9
8
  <script>var anchor=window.location.hash.substr(1);location.href="../user-guide/core-data-model/extras/configcontext.html"+(anchor?"#"+anchor:"")</script>
10
9
  <meta http-equiv="refresh" content="0; url=../user-guide/core-data-model/extras/configcontext.html">
11
10
  </head>
12
11
  <body>
13
- Redirecting...
12
+ You're being redirected to a <a href="../user-guide/core-data-model/extras/configcontext.html">new destination</a>.
14
13
  </body>
15
14
  </html>
@@ -5,11 +5,10 @@
5
5
  <meta charset="utf-8">
6
6
  <title>Redirecting...</title>
7
7
  <link rel="canonical" href="../user-guide/administration/guides/health-checks.html">
8
- <meta name="robots" content="noindex">
9
8
  <script>var anchor=window.location.hash.substr(1);location.href="../user-guide/administration/guides/health-checks.html"+(anchor?"#"+anchor:"")</script>
10
9
  <meta http-equiv="refresh" content="0; url=../user-guide/administration/guides/health-checks.html">
11
10
  </head>
12
11
  <body>
13
- Redirecting...
12
+ You're being redirected to a <a href="../user-guide/administration/guides/health-checks.html">new destination</a>.
14
13
  </body>
15
14
  </html>
@@ -5,11 +5,10 @@
5
5
  <meta charset="utf-8">
6
6
  <title>Redirecting...</title>
7
7
  <link rel="canonical" href="../development/jobs/index.html">
8
- <meta name="robots" content="noindex">
9
8
  <script>var anchor=window.location.hash.substr(1);location.href="../development/jobs/index.html"+(anchor?"#"+anchor:"")</script>
10
9
  <meta http-equiv="refresh" content="0; url=../development/jobs/index.html">
11
10
  </head>
12
11
  <body>
13
- Redirecting...
12
+ You're being redirected to a <a href="../development/jobs/index.html">new destination</a>.
14
13
  </body>
15
14
  </html>