nautobot 2.2.8__py3-none-any.whl → 2.3.0__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 (704) hide show
  1. nautobot/apps/forms.py +4 -0
  2. nautobot/apps/models.py +10 -1
  3. nautobot/circuits/__init__.py +0 -1
  4. nautobot/circuits/apps.py +1 -0
  5. nautobot/circuits/factory.py +15 -3
  6. nautobot/circuits/filters.py +13 -0
  7. nautobot/circuits/forms.py +13 -0
  8. nautobot/circuits/migrations/0021_alter_circuit_status_alter_circuittermination__path.py +32 -0
  9. nautobot/circuits/migrations/0022_circuittermination_cloud_network.py +25 -0
  10. nautobot/circuits/models.py +16 -3
  11. nautobot/circuits/tables.py +16 -2
  12. nautobot/circuits/templates/circuits/circuittermination_create.html +10 -2
  13. nautobot/circuits/templates/circuits/circuittermination_retrieve.html +6 -0
  14. nautobot/circuits/templates/circuits/inc/circuit_termination.html +6 -1
  15. nautobot/circuits/tests/test_api.py +7 -5
  16. nautobot/circuits/tests/test_filters.py +12 -5
  17. nautobot/circuits/tests/test_models.py +33 -2
  18. nautobot/circuits/views.py +2 -3
  19. nautobot/cloud/__init__.py +0 -0
  20. nautobot/cloud/api/__init__.py +0 -0
  21. nautobot/cloud/api/serializers.py +54 -0
  22. nautobot/cloud/api/urls.py +16 -0
  23. nautobot/cloud/api/views.py +48 -0
  24. nautobot/cloud/apps.py +13 -0
  25. nautobot/cloud/factory.py +113 -0
  26. nautobot/cloud/filters.py +187 -0
  27. nautobot/cloud/forms.py +339 -0
  28. nautobot/cloud/homepage.py +43 -0
  29. nautobot/cloud/migrations/0001_initial.py +304 -0
  30. nautobot/cloud/migrations/__init__.py +0 -0
  31. nautobot/cloud/models.py +246 -0
  32. nautobot/cloud/navigation.py +85 -0
  33. nautobot/cloud/tables.py +157 -0
  34. nautobot/cloud/templates/cloud/cloudaccount_retrieve.html +43 -0
  35. nautobot/cloud/templates/cloud/cloudnetwork_retrieve.html +122 -0
  36. nautobot/cloud/templates/cloud/cloudnetwork_update.html +33 -0
  37. nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +111 -0
  38. nautobot/cloud/templates/cloud/cloudservice_retrieve.html +69 -0
  39. nautobot/cloud/templates/cloud/cloudservice_update.html +25 -0
  40. nautobot/cloud/tests/__init__.py +0 -0
  41. nautobot/cloud/tests/test_api.py +248 -0
  42. nautobot/cloud/tests/test_filters.py +125 -0
  43. nautobot/cloud/tests/test_models.py +43 -0
  44. nautobot/cloud/tests/test_views.py +153 -0
  45. nautobot/cloud/urls.py +14 -0
  46. nautobot/cloud/views.py +181 -0
  47. nautobot/core/__init__.py +0 -3
  48. nautobot/core/api/metadata.py +1 -0
  49. nautobot/core/api/parsers.py +7 -1
  50. nautobot/core/api/urls.py +1 -0
  51. nautobot/core/api/utils.py +1 -0
  52. nautobot/core/api/views.py +4 -0
  53. nautobot/core/apps/__init__.py +6 -3
  54. nautobot/core/constants.py +8 -0
  55. nautobot/core/factory.py +32 -1
  56. nautobot/core/filters.py +110 -14
  57. nautobot/core/forms/fields.py +10 -4
  58. nautobot/core/forms/forms.py +11 -3
  59. nautobot/core/forms/widgets.py +18 -1
  60. nautobot/core/graphql/generators.py +2 -2
  61. nautobot/core/graphql/schema.py +28 -7
  62. nautobot/core/jobs/__init__.py +20 -3
  63. nautobot/core/jobs/cleanup.py +100 -0
  64. nautobot/core/jobs/groups.py +38 -0
  65. nautobot/core/management/commands/generate_test_data.py +116 -3
  66. nautobot/core/models/__init__.py +34 -9
  67. nautobot/core/models/generics.py +19 -3
  68. nautobot/core/models/name_color_content_types.py +7 -28
  69. nautobot/core/models/querysets.py +4 -3
  70. nautobot/core/models/tree_queries.py +1 -1
  71. nautobot/core/models/utils.py +21 -5
  72. nautobot/core/settings.py +15 -19
  73. nautobot/core/settings.yaml +48 -13
  74. nautobot/core/settings_funcs.py +103 -0
  75. nautobot/core/tables.py +130 -56
  76. nautobot/core/templates/admin/search_form.html +1 -1
  77. nautobot/core/templates/buttons/add.html +11 -3
  78. nautobot/core/templates/buttons/consolidated_bulk_action_buttons.html +13 -0
  79. nautobot/core/templates/buttons/consolidated_detail_view_action_buttons.html +13 -0
  80. nautobot/core/templates/buttons/export.html +101 -53
  81. nautobot/core/templates/buttons/job_import.html +11 -3
  82. nautobot/core/templates/generic/object_bulk_destroy.html +3 -1
  83. nautobot/core/templates/generic/object_bulk_update.html +3 -1
  84. nautobot/core/templates/generic/object_changelog.html +0 -9
  85. nautobot/core/templates/generic/object_list.html +156 -17
  86. nautobot/core/templates/generic/object_retrieve.html +80 -16
  87. nautobot/core/templates/inc/extras_features_edit_form_fields.html +8 -0
  88. nautobot/core/templates/inc/javascript.html +2 -0
  89. nautobot/core/templates/inc/media.html +2 -2
  90. nautobot/core/templates/inc/nav_menu.html +1 -0
  91. nautobot/core/templates/inc/paginator.html +7 -7
  92. nautobot/core/templates/inc/search_panel.html +2 -2
  93. nautobot/core/templates/inc/table.html +2 -2
  94. nautobot/core/templates/nautobot_config.py.j2 +28 -8
  95. nautobot/core/templates/utilities/templatetags/dynamic_group_assignment_modal.html +37 -0
  96. nautobot/core/templates/utilities/templatetags/filter_form_modal.html +2 -2
  97. nautobot/core/templates/utilities/templatetags/saved_view_modal.html +38 -0
  98. nautobot/core/templates/utilities/theme_preview.html +25 -8
  99. nautobot/core/templates/utilities/worker_status.html +152 -0
  100. nautobot/core/templatetags/buttons.py +335 -38
  101. nautobot/core/templatetags/form_helpers.py +1 -1
  102. nautobot/core/templatetags/helpers.py +181 -11
  103. nautobot/core/testing/api.py +5 -4
  104. nautobot/core/testing/filters.py +63 -14
  105. nautobot/core/testing/mixins.py +46 -0
  106. nautobot/core/testing/models.py +22 -0
  107. nautobot/core/testing/schema.py +4 -8
  108. nautobot/core/testing/views.py +31 -14
  109. nautobot/core/tests/integration/test_general_functionality.py +1 -1
  110. nautobot/core/tests/integration/test_import_objects_ui.py +1 -0
  111. nautobot/core/tests/integration/test_swagger.py +1 -1
  112. nautobot/core/tests/nautobot_config.py +0 -1
  113. nautobot/core/tests/runner.py +2 -2
  114. nautobot/core/tests/test_api.py +1 -0
  115. nautobot/core/tests/test_authentication.py +7 -2
  116. nautobot/core/tests/test_filters.py +11 -9
  117. nautobot/core/tests/test_forms.py +9 -0
  118. nautobot/core/tests/test_graphql.py +27 -16
  119. nautobot/core/tests/test_jobs.py +204 -2
  120. nautobot/core/tests/test_tables.py +3 -1
  121. nautobot/core/tests/test_templatetags_helpers.py +12 -5
  122. nautobot/core/tests/test_templatetags_netutils.py +3 -3
  123. nautobot/core/tests/test_utils.py +31 -20
  124. nautobot/core/tests/test_views.py +6 -6
  125. nautobot/core/urls.py +8 -3
  126. nautobot/core/utils/deprecation.py +29 -0
  127. nautobot/core/utils/filtering.py +12 -9
  128. nautobot/core/utils/lookup.py +37 -2
  129. nautobot/core/utils/requests.py +4 -1
  130. nautobot/core/views/__init__.py +137 -24
  131. nautobot/core/views/generic.py +119 -67
  132. nautobot/core/views/mixins.py +105 -36
  133. nautobot/core/views/paginator.py +9 -3
  134. nautobot/core/views/renderers.py +121 -56
  135. nautobot/core/views/utils.py +81 -1
  136. nautobot/dcim/__init__.py +0 -1
  137. nautobot/dcim/api/serializers.py +180 -44
  138. nautobot/dcim/api/urls.py +7 -3
  139. nautobot/dcim/api/views.py +53 -7
  140. nautobot/dcim/apps.py +3 -0
  141. nautobot/dcim/choices.py +25 -0
  142. nautobot/dcim/constants.py +7 -0
  143. nautobot/dcim/factory.py +252 -18
  144. nautobot/dcim/filters/__init__.py +373 -193
  145. nautobot/dcim/filters/mixins.py +274 -1
  146. nautobot/dcim/forms.py +834 -121
  147. nautobot/dcim/graphql/types.py +2 -2
  148. nautobot/dcim/homepage.py +1 -1
  149. nautobot/dcim/migrations/0059_add_role_field_to_interface_models.py +27 -0
  150. nautobot/dcim/migrations/0060_alter_cable_status_alter_consoleport__path_and_more.py +303 -0
  151. nautobot/dcim/migrations/0061_module_models.py +862 -0
  152. nautobot/dcim/migrations/0062_module_data_migration.py +25 -0
  153. nautobot/dcim/models/__init__.py +8 -0
  154. nautobot/dcim/models/cables.py +15 -0
  155. nautobot/dcim/models/device_component_templates.py +207 -53
  156. nautobot/dcim/models/device_components.py +282 -99
  157. nautobot/dcim/models/devices.py +472 -13
  158. nautobot/dcim/models/racks.py +0 -1
  159. nautobot/dcim/navigation.py +47 -0
  160. nautobot/dcim/signals.py +3 -3
  161. nautobot/dcim/tables/__init__.py +35 -23
  162. nautobot/dcim/tables/devices.py +248 -47
  163. nautobot/dcim/tables/devicetypes.py +65 -9
  164. nautobot/dcim/tables/racks.py +5 -1
  165. nautobot/dcim/tables/template_code.py +46 -26
  166. nautobot/dcim/templates/dcim/cable_connect.html +76 -3
  167. nautobot/dcim/templates/dcim/console_port_connection_list.html +7 -5
  168. nautobot/dcim/templates/dcim/device/base.html +14 -6
  169. nautobot/dcim/templates/dcim/device/consoleports.html +2 -3
  170. nautobot/dcim/templates/dcim/device/consoleserverports.html +2 -3
  171. nautobot/dcim/templates/dcim/device/devicebays.html +6 -7
  172. nautobot/dcim/templates/dcim/device/frontports.html +2 -3
  173. nautobot/dcim/templates/dcim/device/interfaces.html +2 -3
  174. nautobot/dcim/templates/dcim/device/inventory.html +2 -3
  175. nautobot/dcim/templates/dcim/device/modulebays.html +49 -0
  176. nautobot/dcim/templates/dcim/device/poweroutlets.html +2 -3
  177. nautobot/dcim/templates/dcim/device/powerports.html +2 -3
  178. nautobot/dcim/templates/dcim/device/rearports.html +2 -3
  179. nautobot/dcim/templates/dcim/device.html +45 -1
  180. nautobot/dcim/templates/dcim/device_component.html +13 -5
  181. nautobot/dcim/templates/dcim/device_list.html +2 -1
  182. nautobot/dcim/templates/dcim/deviceredundancygroup_retrieve.html +6 -0
  183. nautobot/dcim/templates/dcim/devicetype.html +99 -98
  184. nautobot/dcim/templates/dcim/devicetype_list.html +8 -16
  185. nautobot/dcim/templates/dcim/inc/devicetype_component_table.html +1 -1
  186. nautobot/dcim/templates/dcim/inc/moduletype_component_table.html +39 -0
  187. nautobot/dcim/templates/dcim/interface.html +17 -2
  188. nautobot/dcim/templates/dcim/interface_connection_list.html +7 -5
  189. nautobot/dcim/templates/dcim/interface_edit.html +1 -0
  190. nautobot/dcim/templates/dcim/manufacturer.html +24 -0
  191. nautobot/dcim/templates/dcim/module/base.html +97 -0
  192. nautobot/dcim/templates/dcim/module_bulk_destroy.html +5 -0
  193. nautobot/dcim/templates/dcim/module_consoleports.html +53 -0
  194. nautobot/dcim/templates/dcim/module_consoleserverports.html +53 -0
  195. nautobot/dcim/templates/dcim/module_destroy.html +5 -0
  196. nautobot/dcim/templates/dcim/module_frontports.html +53 -0
  197. nautobot/dcim/templates/dcim/module_interfaces.html +57 -0
  198. nautobot/dcim/templates/dcim/module_list.html +20 -0
  199. nautobot/dcim/templates/dcim/module_modulebays.html +49 -0
  200. nautobot/dcim/templates/dcim/module_poweroutlets.html +53 -0
  201. nautobot/dcim/templates/dcim/module_powerports.html +53 -0
  202. nautobot/dcim/templates/dcim/module_rearports.html +53 -0
  203. nautobot/dcim/templates/dcim/module_retrieve.html +63 -0
  204. nautobot/dcim/templates/dcim/module_update.html +71 -0
  205. nautobot/dcim/templates/dcim/modulebay_bulk_destroy.html +5 -0
  206. nautobot/dcim/templates/dcim/modulebay_destroy.html +8 -0
  207. nautobot/dcim/templates/dcim/modulebay_retrieve.html +101 -0
  208. nautobot/dcim/templates/dcim/moduletype_list.html +11 -0
  209. nautobot/dcim/templates/dcim/moduletype_retrieve.html +159 -0
  210. nautobot/dcim/templates/dcim/power_port_connection_list.html +7 -5
  211. nautobot/dcim/templates/dcim/softwareimagefile_retrieve.html +65 -19
  212. nautobot/dcim/tests/integration/test_cable_connect_form.py +4 -4
  213. nautobot/dcim/tests/test_api.py +693 -208
  214. nautobot/dcim/tests/test_filters.py +843 -217
  215. nautobot/dcim/tests/test_models.py +1103 -8
  216. nautobot/dcim/tests/test_views.py +1525 -343
  217. nautobot/dcim/urls.py +17 -2
  218. nautobot/dcim/utils.py +2 -3
  219. nautobot/dcim/views.py +1109 -113
  220. nautobot/extras/__init__.py +0 -1
  221. nautobot/extras/api/serializers.py +115 -3
  222. nautobot/extras/api/urls.py +12 -0
  223. nautobot/extras/api/views.py +73 -59
  224. nautobot/extras/apps.py +2 -2
  225. nautobot/extras/choices.py +43 -0
  226. nautobot/extras/context_managers.py +13 -8
  227. nautobot/extras/datasources/git.py +2 -0
  228. nautobot/extras/factory.py +460 -9
  229. nautobot/extras/filters/__init__.py +174 -3
  230. nautobot/extras/filters/mixins.py +46 -43
  231. nautobot/extras/forms/base.py +24 -5
  232. nautobot/extras/forms/forms.py +227 -8
  233. nautobot/extras/forms/mixins.py +93 -0
  234. nautobot/extras/graphql/types.py +23 -10
  235. nautobot/extras/homepage.py +26 -3
  236. nautobot/extras/jobs.py +2 -2
  237. nautobot/extras/management/__init__.py +1 -0
  238. nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +1 -16
  239. nautobot/extras/migrations/0021_customfield_changelog_data.py +1 -0
  240. nautobot/extras/migrations/0109_dynamicgroup_group_type_dynamicgroup_tags_and_more.py +108 -0
  241. nautobot/extras/migrations/0110_alter_configcontext_cluster_groups_and_more.py +111 -0
  242. nautobot/extras/migrations/0111_metadata.py +162 -0
  243. nautobot/extras/migrations/0112_dynamic_group_group_type_data_migration.py +28 -0
  244. nautobot/extras/migrations/0113_saved_views.py +77 -0
  245. nautobot/extras/models/__init__.py +15 -1
  246. nautobot/extras/models/change_logging.py +3 -3
  247. nautobot/extras/models/contacts.py +4 -0
  248. nautobot/extras/models/customfields.py +18 -3
  249. nautobot/extras/models/groups.py +389 -225
  250. nautobot/extras/models/jobs.py +87 -3
  251. nautobot/extras/models/metadata.py +441 -0
  252. nautobot/extras/models/mixins.py +72 -62
  253. nautobot/extras/models/models.py +118 -9
  254. nautobot/extras/models/relationships.py +9 -2
  255. nautobot/extras/models/tags.py +13 -2
  256. nautobot/extras/navigation.py +57 -0
  257. nautobot/extras/plugins/__init__.py +3 -1
  258. nautobot/extras/querysets.py +30 -66
  259. nautobot/extras/signals.py +109 -101
  260. nautobot/extras/tables.py +201 -17
  261. nautobot/extras/templates/extras/dynamicgroup.html +44 -15
  262. nautobot/extras/templates/extras/dynamicgroup_edit.html +2 -0
  263. nautobot/extras/templates/extras/job.html +1 -1
  264. nautobot/extras/templates/extras/job_detail.html +11 -0
  265. nautobot/extras/templates/extras/jobresult.html +61 -74
  266. nautobot/extras/templates/extras/metadatatype_create.html +89 -0
  267. nautobot/extras/templates/extras/metadatatype_retrieve.html +67 -0
  268. nautobot/extras/templates/extras/object_dynamicgroups.html +7 -0
  269. nautobot/extras/templates/extras/objectchange_list.html +0 -12
  270. nautobot/extras/templates/extras/plugins_list.html +1 -3
  271. nautobot/extras/templates/extras/role_retrieve.html +48 -0
  272. nautobot/extras/templates/extras/staticgroupassociation_retrieve.html +20 -0
  273. nautobot/extras/tests/integration/test_customfields.py +1 -0
  274. nautobot/extras/tests/test_api.py +509 -23
  275. nautobot/extras/tests/test_changelog.py +20 -9
  276. nautobot/extras/tests/test_context_managers.py +22 -15
  277. nautobot/extras/tests/test_datasources.py +13 -1
  278. nautobot/extras/tests/test_dynamicgroups.py +201 -171
  279. nautobot/extras/tests/test_filters.py +211 -12
  280. nautobot/extras/tests/test_jobs.py +6 -6
  281. nautobot/extras/tests/test_models.py +501 -4
  282. nautobot/extras/tests/test_relationships.py +1 -0
  283. nautobot/extras/tests/test_views.py +586 -8
  284. nautobot/extras/tests/test_webhooks.py +1 -1
  285. nautobot/extras/urls.py +5 -0
  286. nautobot/extras/utils.py +85 -16
  287. nautobot/extras/views.py +562 -122
  288. nautobot/ipam/__init__.py +0 -1
  289. nautobot/ipam/apps.py +1 -0
  290. nautobot/ipam/factory.py +17 -19
  291. nautobot/ipam/filters.py +13 -0
  292. nautobot/ipam/forms.py +8 -4
  293. nautobot/ipam/graphql/types.py +2 -2
  294. nautobot/ipam/migrations/0047_alter_ipaddress_role_alter_ipaddress_status_and_more.py +59 -0
  295. nautobot/ipam/models.py +20 -20
  296. nautobot/ipam/querysets.py +1 -1
  297. nautobot/ipam/signals.py +4 -2
  298. nautobot/ipam/tables.py +5 -0
  299. nautobot/ipam/templates/ipam/ipaddress_interfaces.html +1 -1
  300. nautobot/ipam/templates/ipam/ipaddress_vm_interfaces.html +1 -1
  301. nautobot/ipam/templates/ipam/prefix.html +1 -0
  302. nautobot/ipam/tests/test_api.py +37 -18
  303. nautobot/ipam/tests/test_filters.py +26 -2
  304. nautobot/ipam/tests/test_models.py +9 -2
  305. nautobot/ipam/tests/test_querysets.py +1 -1
  306. nautobot/ipam/tests/test_views.py +3 -2
  307. nautobot/ipam/urls.py +2 -2
  308. nautobot/ipam/views.py +20 -34
  309. nautobot/project-static/css/base.css +21 -0
  310. nautobot/project-static/css/dark.css +11 -0
  311. nautobot/project-static/docs/404.html +894 -90
  312. nautobot/project-static/docs/apps/index.html +894 -90
  313. nautobot/project-static/docs/apps/nautobot-apps.html +894 -90
  314. nautobot/project-static/docs/assets/_mkdocstrings.css +5 -0
  315. nautobot/project-static/docs/assets/stylesheets/main.3cba04c6.min.css +1 -0
  316. nautobot/project-static/docs/assets/stylesheets/main.3cba04c6.min.css.map +1 -0
  317. nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +921 -122
  318. nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +906 -103
  319. nautobot/project-static/docs/code-reference/nautobot/apps/api.html +1620 -905
  320. nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +937 -146
  321. nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +979 -190
  322. nautobot/project-static/docs/code-reference/nautobot/apps/config.html +903 -101
  323. nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +899 -95
  324. nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +993 -195
  325. nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +976 -133
  326. nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +1080 -274
  327. nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +1244 -336
  328. nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +1729 -877
  329. nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +1166 -383
  330. nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +2090 -1376
  331. nautobot/project-static/docs/code-reference/nautobot/apps/models.html +2248 -1424
  332. nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +914 -113
  333. nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +965 -165
  334. nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +1012 -225
  335. nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +1915 -1279
  336. nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +1848 -1104
  337. nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +906 -103
  338. nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +2335 -1701
  339. nautobot/project-static/docs/code-reference/nautobot/apps/views.html +1804 -1026
  340. nautobot/project-static/docs/development/apps/api/configuration-view.html +894 -90
  341. nautobot/project-static/docs/development/apps/api/database-backend-config.html +894 -90
  342. nautobot/project-static/docs/development/apps/api/models/django-admin.html +894 -90
  343. nautobot/project-static/docs/development/apps/api/models/global-search.html +894 -90
  344. nautobot/project-static/docs/development/apps/api/models/graphql.html +894 -90
  345. nautobot/project-static/docs/development/apps/api/models/index.html +944 -92
  346. nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +894 -90
  347. nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +894 -90
  348. nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +894 -90
  349. nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +894 -90
  350. nautobot/project-static/docs/development/apps/api/platform-features/index.html +894 -90
  351. nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +894 -90
  352. nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +894 -90
  353. nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +894 -90
  354. nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +894 -90
  355. nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +894 -90
  356. nautobot/project-static/docs/development/apps/api/prometheus.html +894 -90
  357. nautobot/project-static/docs/development/apps/api/setup.html +894 -90
  358. nautobot/project-static/docs/development/apps/api/testing.html +894 -90
  359. nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +894 -90
  360. nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +894 -90
  361. nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +894 -90
  362. nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +894 -90
  363. nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +894 -90
  364. nautobot/project-static/docs/development/apps/api/views/base-template.html +894 -90
  365. nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +894 -90
  366. nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +894 -90
  367. nautobot/project-static/docs/development/apps/api/views/help-documentation.html +894 -90
  368. nautobot/project-static/docs/development/apps/api/views/index.html +894 -90
  369. nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +894 -90
  370. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +894 -90
  371. nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +894 -90
  372. nautobot/project-static/docs/development/apps/api/views/notes.html +894 -90
  373. nautobot/project-static/docs/development/apps/api/views/rest-api.html +894 -90
  374. nautobot/project-static/docs/development/apps/api/views/urls.html +894 -90
  375. nautobot/project-static/docs/development/apps/index.html +894 -90
  376. nautobot/project-static/docs/development/apps/migration/code-updates.html +894 -90
  377. nautobot/project-static/docs/development/apps/migration/dependency-updates.html +894 -90
  378. nautobot/project-static/docs/development/apps/migration/from-v1.html +894 -90
  379. nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +894 -90
  380. nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +894 -90
  381. nautobot/project-static/docs/development/apps/migration/model-updates/global.html +894 -90
  382. nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +894 -90
  383. nautobot/project-static/docs/development/apps/porting-from-netbox.html +894 -90
  384. nautobot/project-static/docs/development/core/application-registry.html +894 -90
  385. nautobot/project-static/docs/development/core/best-practices.html +895 -90
  386. nautobot/project-static/docs/development/core/bootstrap-ui.html +894 -90
  387. nautobot/project-static/docs/development/core/caching.html +894 -90
  388. nautobot/project-static/docs/development/core/controllers.html +894 -90
  389. nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +894 -90
  390. nautobot/project-static/docs/development/core/generic-views.html +894 -90
  391. nautobot/project-static/docs/development/core/getting-started.html +894 -90
  392. nautobot/project-static/docs/development/core/homepage.html +894 -90
  393. nautobot/project-static/docs/development/core/index.html +905 -90
  394. nautobot/project-static/docs/development/core/model-checklist.html +903 -91
  395. nautobot/project-static/docs/development/core/model-features.html +894 -90
  396. nautobot/project-static/docs/development/core/natural-keys.html +894 -90
  397. nautobot/project-static/docs/development/core/navigation-menu.html +894 -90
  398. nautobot/project-static/docs/development/core/release-checklist.html +897 -93
  399. nautobot/project-static/docs/development/core/role-internals.html +894 -90
  400. nautobot/project-static/docs/development/core/settings.html +894 -90
  401. nautobot/project-static/docs/development/core/style-guide.html +895 -91
  402. nautobot/project-static/docs/development/core/templates.html +906 -91
  403. nautobot/project-static/docs/development/core/testing.html +894 -90
  404. nautobot/project-static/docs/development/core/user-preferences.html +894 -90
  405. nautobot/project-static/docs/development/index.html +894 -90
  406. nautobot/project-static/docs/development/jobs/index.html +1271 -453
  407. nautobot/project-static/docs/development/jobs/migration/from-v1.html +894 -90
  408. nautobot/project-static/docs/index.html +9032 -13
  409. nautobot/project-static/docs/media/models/cloud_aws_direct_connect_dark.png +0 -0
  410. nautobot/project-static/docs/media/models/cloud_aws_direct_connect_light.png +0 -0
  411. nautobot/project-static/docs/models/cloud/cloudaccount.html +15 -0
  412. nautobot/project-static/docs/models/cloud/cloudnetwork.html +15 -0
  413. nautobot/project-static/docs/models/cloud/cloudnetworkprefixassignment.html +15 -0
  414. nautobot/project-static/docs/models/cloud/cloudresourcetype.html +15 -0
  415. nautobot/project-static/docs/models/cloud/cloudservice.html +15 -0
  416. nautobot/project-static/docs/models/cloud/cloudservicenetworkassignment.html +15 -0
  417. nautobot/project-static/docs/models/dcim/module.html +15 -0
  418. nautobot/project-static/docs/models/dcim/modulebay.html +15 -0
  419. nautobot/project-static/docs/models/dcim/modulebaytemplate.html +15 -0
  420. nautobot/project-static/docs/models/dcim/moduletype.html +15 -0
  421. nautobot/project-static/docs/models/extras/metadatachoice.html +15 -0
  422. nautobot/project-static/docs/models/extras/metadatatype.html +15 -0
  423. nautobot/project-static/docs/models/extras/objectmetadata.html +15 -0
  424. nautobot/project-static/docs/models/extras/role.html +15 -0
  425. nautobot/project-static/docs/models/extras/savedview.html +15 -0
  426. nautobot/project-static/docs/models/extras/staticgroupassociation.html +15 -0
  427. nautobot/project-static/docs/models/extras/status.html +15 -0
  428. nautobot/project-static/docs/objects.inv +0 -0
  429. nautobot/project-static/docs/overview/application_stack.html +902 -91
  430. nautobot/project-static/docs/overview/design_philosophy.html +896 -92
  431. nautobot/project-static/docs/overview/index.html +13 -8228
  432. nautobot/project-static/docs/release-notes/index.html +1131 -94
  433. nautobot/project-static/docs/release-notes/version-1.0.html +894 -90
  434. nautobot/project-static/docs/release-notes/version-1.1.html +894 -90
  435. nautobot/project-static/docs/release-notes/version-1.2.html +894 -90
  436. nautobot/project-static/docs/release-notes/version-1.3.html +894 -90
  437. nautobot/project-static/docs/release-notes/version-1.4.html +894 -90
  438. nautobot/project-static/docs/release-notes/version-1.5.html +895 -91
  439. nautobot/project-static/docs/release-notes/version-1.6.html +895 -91
  440. nautobot/project-static/docs/release-notes/version-2.0.html +894 -90
  441. nautobot/project-static/docs/release-notes/version-2.1.html +894 -90
  442. nautobot/project-static/docs/release-notes/version-2.2.html +1137 -196
  443. nautobot/project-static/docs/release-notes/version-2.3.html +9954 -0
  444. nautobot/project-static/docs/requirements.txt +5 -5
  445. nautobot/project-static/docs/search/search_index.json +1 -1
  446. nautobot/project-static/docs/sitemap.xml +335 -260
  447. nautobot/project-static/docs/sitemap.xml.gz +0 -0
  448. nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +894 -90
  449. nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +894 -90
  450. nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +894 -90
  451. nautobot/project-static/docs/user-guide/administration/configuration/index.html +894 -90
  452. nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +1025 -175
  453. nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +894 -90
  454. nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +894 -90
  455. nautobot/project-static/docs/user-guide/administration/guides/caching.html +894 -90
  456. nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +902 -90
  457. nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +894 -90
  458. nautobot/project-static/docs/user-guide/administration/guides/permissions.html +894 -90
  459. nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +894 -90
  460. nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +894 -90
  461. nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +894 -90
  462. nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +894 -90
  463. nautobot/project-static/docs/user-guide/administration/installation/app-install.html +894 -90
  464. nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +894 -90
  465. nautobot/project-static/docs/user-guide/administration/installation/http-server.html +946 -155
  466. nautobot/project-static/docs/user-guide/administration/installation/index.html +903 -95
  467. nautobot/project-static/docs/user-guide/administration/installation/install_system.html +936 -124
  468. nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +956 -159
  469. nautobot/project-static/docs/user-guide/administration/installation/services.html +915 -114
  470. nautobot/project-static/docs/user-guide/administration/installation-extras/docker.html +910 -101
  471. nautobot/project-static/docs/user-guide/administration/installation-extras/health-checks.html +894 -90
  472. nautobot/project-static/docs/user-guide/administration/installation-extras/selinux-troubleshooting.html +894 -90
  473. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +894 -90
  474. nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +894 -90
  475. nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +977 -121
  476. nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +894 -90
  477. nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +894 -90
  478. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +894 -90
  479. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +894 -90
  480. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +894 -90
  481. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +894 -90
  482. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +894 -90
  483. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +894 -90
  484. nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +894 -90
  485. nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +894 -90
  486. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +894 -90
  487. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +895 -91
  488. nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +894 -90
  489. nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +898 -90
  490. nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +897 -93
  491. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +8984 -0
  492. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +8828 -0
  493. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +8829 -0
  494. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +8828 -0
  495. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +8829 -0
  496. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +8833 -0
  497. nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +8828 -0
  498. nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +908 -104
  499. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +925 -107
  500. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +925 -107
  501. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +920 -102
  502. nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +925 -107
  503. nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +908 -104
  504. nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +908 -104
  505. nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +915 -107
  506. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +922 -118
  507. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +923 -119
  508. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +920 -116
  509. nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +908 -104
  510. nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +916 -107
  511. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +928 -110
  512. nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +938 -120
  513. nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +930 -108
  514. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +908 -104
  515. nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +939 -121
  516. nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +930 -112
  517. nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +920 -116
  518. nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +923 -119
  519. nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +925 -117
  520. nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +8828 -0
  521. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +8846 -0
  522. nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +8843 -0
  523. nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +8823 -0
  524. nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +918 -114
  525. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +908 -104
  526. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +942 -85
  527. nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +926 -108
  528. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +908 -104
  529. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +945 -88
  530. nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +923 -105
  531. nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +931 -127
  532. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +920 -116
  533. nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +908 -104
  534. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +924 -106
  535. nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +926 -108
  536. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +908 -104
  537. nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +908 -104
  538. nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +908 -104
  539. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +938 -90
  540. nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +894 -90
  541. nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +899 -91
  542. nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +899 -91
  543. nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +894 -90
  544. nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +894 -90
  545. nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +894 -90
  546. nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +894 -90
  547. nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +894 -90
  548. nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +894 -90
  549. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +894 -90
  550. nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +894 -90
  551. nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +894 -90
  552. nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +894 -90
  553. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +903 -98
  554. nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +894 -90
  555. nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +894 -90
  556. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +894 -90
  557. nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +894 -90
  558. nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +894 -90
  559. nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +899 -91
  560. nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +894 -90
  561. nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +894 -90
  562. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +894 -90
  563. nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +894 -90
  564. nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +894 -90
  565. nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +894 -90
  566. nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +894 -90
  567. nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +894 -90
  568. nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +894 -90
  569. nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +894 -90
  570. nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +894 -90
  571. nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +894 -90
  572. nautobot/project-static/docs/user-guide/feature-guides/graphql.html +894 -90
  573. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/clear-view-button.png +0 -0
  574. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/cleared-view.png +0 -0
  575. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/config-table-columns-to-locations.png +0 -0
  576. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/configure-button.png +0 -0
  577. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/create-saved-view-success.png +0 -0
  578. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/current-saved-view-drop-down-menu.png +0 -0
  579. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/default-location-list-view.png +0 -0
  580. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/dropdown-button-after-new-saved-view.png +0 -0
  581. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/filter-application-to-locations.png +0 -0
  582. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/filter-button.png +0 -0
  583. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/global-default-location-list-view.png +0 -0
  584. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/location-list-view-with-saved-views.png +0 -0
  585. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/navigation-menu.png +0 -0
  586. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/save-as-new-view-drop-down.png +0 -0
  587. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/save-view-modal.png +0 -0
  588. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-admin-edit-buttons.png +0 -0
  589. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-admin-edit-success.png +0 -0
  590. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-admin-edit-view-unchecked.png +0 -0
  591. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-admin-edit-view.png +0 -0
  592. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-different-user.png +0 -0
  593. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-modal-unchecked.png +0 -0
  594. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/set-as-my-default-button.png +0 -0
  595. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/set-as-my-default-success.png +0 -0
  596. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/unsaved-saved-view.png +0 -0
  597. nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/updated-saved-view.png +0 -0
  598. nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +894 -90
  599. nautobot/project-static/docs/user-guide/feature-guides/relationships.html +894 -90
  600. nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +894 -90
  601. nautobot/project-static/docs/user-guide/index.html +894 -90
  602. nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +894 -90
  603. nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +894 -90
  604. nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +894 -90
  605. nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +894 -90
  606. nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +1260 -787
  607. nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +897 -93
  608. nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +894 -90
  609. nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +894 -90
  610. nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +894 -90
  611. nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +894 -90
  612. nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +894 -90
  613. nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +894 -90
  614. nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +894 -90
  615. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +894 -90
  616. nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +894 -90
  617. nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +898 -90
  618. nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +894 -90
  619. nautobot/project-static/docs/user-guide/platform-functionality/note.html +897 -93
  620. nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +9061 -0
  621. nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +897 -93
  622. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +894 -90
  623. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +894 -90
  624. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +894 -90
  625. nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +894 -90
  626. nautobot/project-static/docs/user-guide/platform-functionality/role.html +897 -93
  627. nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +9137 -0
  628. nautobot/project-static/docs/user-guide/platform-functionality/secret.html +897 -93
  629. nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +8933 -0
  630. nautobot/project-static/docs/user-guide/platform-functionality/status.html +894 -90
  631. nautobot/project-static/docs/user-guide/platform-functionality/tag.html +894 -90
  632. nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +952 -123
  633. nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +894 -90
  634. nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +894 -90
  635. nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +894 -90
  636. nautobot/project-static/js/forms.js +71 -0
  637. nautobot/project-static/js/table_sorting_indicator.js +46 -0
  638. nautobot/project-static/js/tableconfig.js +6 -1
  639. nautobot/project-static/materialdesignicons-7.4.47/css/materialdesignicons.min.css +3 -0
  640. nautobot/project-static/{materialdesignicons-6.5.95 → materialdesignicons-7.4.47}/fonts/materialdesignicons-webfont.eot +0 -0
  641. nautobot/project-static/{materialdesignicons-6.5.95 → materialdesignicons-7.4.47}/fonts/materialdesignicons-webfont.ttf +0 -0
  642. nautobot/project-static/materialdesignicons-7.4.47/fonts/materialdesignicons-webfont.woff +0 -0
  643. nautobot/project-static/materialdesignicons-7.4.47/fonts/materialdesignicons-webfont.woff2 +0 -0
  644. nautobot/tenancy/__init__.py +0 -1
  645. nautobot/tenancy/apps.py +1 -0
  646. nautobot/tenancy/factory.py +3 -2
  647. nautobot/tenancy/filters/__init__.py +1 -0
  648. nautobot/tenancy/forms.py +1 -1
  649. nautobot/tenancy/templates/tenancy/tenant.html +24 -20
  650. nautobot/tenancy/views.py +11 -10
  651. nautobot/users/__init__.py +0 -1
  652. nautobot/users/api/serializers.py +1 -1
  653. nautobot/users/api/views.py +4 -2
  654. nautobot/users/apps.py +3 -2
  655. nautobot/users/factory.py +3 -3
  656. nautobot/users/migrations/0010_user_default_saved_views.py +20 -0
  657. nautobot/users/models.py +12 -0
  658. nautobot/users/tests/test_filters.py +6 -3
  659. nautobot/users/urls.py +8 -0
  660. nautobot/virtualization/__init__.py +0 -1
  661. nautobot/virtualization/apps.py +1 -0
  662. nautobot/virtualization/filters.py +6 -1
  663. nautobot/virtualization/forms.py +11 -3
  664. nautobot/virtualization/graphql/types.py +2 -2
  665. nautobot/virtualization/migrations/0029_add_role_field_to_interface_models.py +27 -0
  666. nautobot/virtualization/migrations/0030_alter_virtualmachine_local_config_context_data_owner_content_type_and_more.py +67 -0
  667. nautobot/virtualization/models.py +0 -2
  668. nautobot/virtualization/tables.py +12 -8
  669. nautobot/virtualization/templates/virtualization/virtualmachine.html +1 -1
  670. nautobot/virtualization/templates/virtualization/vminterface.html +7 -1
  671. nautobot/virtualization/templates/virtualization/vminterface_edit.html +1 -0
  672. nautobot/virtualization/tests/test_api.py +9 -4
  673. nautobot/virtualization/tests/test_filters.py +22 -0
  674. nautobot/virtualization/tests/test_models.py +7 -3
  675. nautobot/virtualization/tests/test_views.py +19 -3
  676. nautobot/virtualization/urls.py +2 -2
  677. nautobot/virtualization/views.py +10 -32
  678. {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/METADATA +21 -19
  679. {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/RECORD +684 -564
  680. nautobot/project-static/docs/assets/stylesheets/main.76a95c52.min.css +0 -1
  681. nautobot/project-static/docs/assets/stylesheets/main.76a95c52.min.css.map +0 -1
  682. nautobot/project-static/materialdesignicons-6.5.95/.github/ISSUE_TEMPLATE.md +0 -3
  683. nautobot/project-static/materialdesignicons-6.5.95/README.md +0 -25
  684. nautobot/project-static/materialdesignicons-6.5.95/css/materialdesignicons.css +0 -26654
  685. nautobot/project-static/materialdesignicons-6.5.95/css/materialdesignicons.css.map +0 -16
  686. nautobot/project-static/materialdesignicons-6.5.95/css/materialdesignicons.min.css +0 -3
  687. nautobot/project-static/materialdesignicons-6.5.95/css/materialdesignicons.min.css.map +0 -16
  688. nautobot/project-static/materialdesignicons-6.5.95/fonts/materialdesignicons-webfont.woff +0 -0
  689. nautobot/project-static/materialdesignicons-6.5.95/fonts/materialdesignicons-webfont.woff2 +0 -0
  690. nautobot/project-static/materialdesignicons-6.5.95/package.json +0 -28
  691. nautobot/project-static/materialdesignicons-6.5.95/preview.html +0 -717
  692. nautobot/project-static/materialdesignicons-6.5.95/scss/_animated.scss +0 -27
  693. nautobot/project-static/materialdesignicons-6.5.95/scss/_core.scss +0 -10
  694. nautobot/project-static/materialdesignicons-6.5.95/scss/_extras.scss +0 -65
  695. nautobot/project-static/materialdesignicons-6.5.95/scss/_functions.scss +0 -20
  696. nautobot/project-static/materialdesignicons-6.5.95/scss/_icons.scss +0 -10
  697. nautobot/project-static/materialdesignicons-6.5.95/scss/_path.scss +0 -10
  698. nautobot/project-static/materialdesignicons-6.5.95/scss/_variables.scss +0 -6606
  699. nautobot/project-static/materialdesignicons-6.5.95/scss/materialdesignicons.scss +0 -8
  700. /nautobot/project-static/{materialdesignicons-6.5.95 → materialdesignicons-7.4.47}/LICENSE +0 -0
  701. {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/LICENSE.txt +0 -0
  702. {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/NOTICE +0 -0
  703. {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/WHEEL +0 -0
  704. {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/entry_points.txt +0 -0
@@ -14,11 +14,11 @@
14
14
  <link rel="prev" href="customlink.html">
15
15
 
16
16
 
17
- <link rel="next" href="exporttemplate.html">
17
+ <link rel="next" href="staticgroupassociation.html">
18
18
 
19
19
 
20
20
  <link rel="icon" href="../../assets/favicon.ico">
21
- <meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.29">
21
+ <meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.31">
22
22
 
23
23
 
24
24
 
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- <link rel="stylesheet" href="../../assets/stylesheets/main.76a95c52.min.css">
29
+ <link rel="stylesheet" href="../../assets/stylesheets/main.3cba04c6.min.css">
30
30
 
31
31
 
32
32
  <link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- <style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M288 0H128c-17.7 0-32 14.3-32 32s14.3 32 32 32v132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6 0 480.9 31.1 512 69.4 512h309.2c38.3 0 69.4-31.1 69.4-69.4 0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7 0 32-14.3 32-32S337.7 0 320 0h-32zm-96 196.8V64h64v132.8c0 23.7 6.6 46.9 19 67.1l34.5 56.1h-171l34.5-56.1c12.4-20.2 19-43.4 19-67.1z"/></svg>');}</style>
41
+ <style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.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 0h-32zm-96 196.8V64h64v132.8c0 23.7 6.6 46.9 19 67.1l34.5 56.1h-171l34.5-56.1c12.4-20.2 19-43.4 19-67.1z"/></svg>');}</style>
42
42
 
43
43
 
44
44
 
@@ -217,7 +217,7 @@
217
217
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
218
218
  <div class="md-source__icon md-icon">
219
219
 
220
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
220
+ <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.81z"/></svg>
221
221
  </div>
222
222
  <div class="md-source__repository">
223
223
  GitHub
@@ -238,7 +238,7 @@
238
238
 
239
239
 
240
240
  <li class="md-tabs__item">
241
- <a href="../../overview/index.html" class="md-tabs__link">
241
+ <a href="../../index.html" class="md-tabs__link">
242
242
 
243
243
 
244
244
 
@@ -377,7 +377,7 @@
377
377
  <a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
378
378
  <div class="md-source__icon md-icon">
379
379
 
380
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
380
+ <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.81z"/></svg>
381
381
  </div>
382
382
  <div class="md-source__repository">
383
383
  GitHub
@@ -409,7 +409,7 @@
409
409
 
410
410
 
411
411
  <div class="md-nav__link md-nav__container">
412
- <a href="../../overview/index.html" class="md-nav__link ">
412
+ <a href="../../index.html" class="md-nav__link ">
413
413
 
414
414
 
415
415
  <span class="md-ellipsis">
@@ -2489,21 +2489,29 @@
2489
2489
  <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_3" >
2490
2490
 
2491
2491
 
2492
- <label class="md-nav__link" for="__nav_2_3_3" id="__nav_2_3_3_label" tabindex="0">
2493
-
2492
+
2493
+ <div class="md-nav__link md-nav__container">
2494
+ <a href="../core-data-model/cloud/cloud.html" class="md-nav__link ">
2495
+
2494
2496
 
2495
2497
  <span class="md-ellipsis">
2496
- DCIM
2498
+ Cloud
2497
2499
  </span>
2498
2500
 
2499
2501
 
2500
- <span class="md-nav__icon md-icon"></span>
2501
- </label>
2502
+ </a>
2503
+
2504
+
2505
+ <label class="md-nav__link " for="__nav_2_3_3" id="__nav_2_3_3_label" tabindex="0">
2506
+ <span class="md-nav__icon md-icon"></span>
2507
+ </label>
2508
+
2509
+ </div>
2502
2510
 
2503
2511
  <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_3_label" aria-expanded="false">
2504
2512
  <label class="md-nav__title" for="__nav_2_3_3">
2505
2513
  <span class="md-nav__icon md-icon"></span>
2506
- DCIM
2514
+ Cloud
2507
2515
  </label>
2508
2516
  <ul class="md-nav__list" data-md-scrollfix>
2509
2517
 
@@ -2514,11 +2522,11 @@
2514
2522
 
2515
2523
 
2516
2524
  <li class="md-nav__item">
2517
- <a href="../core-data-model/dcim/locationtype.html" class="md-nav__link">
2525
+ <a href="../core-data-model/cloud/cloudaccount.html" class="md-nav__link">
2518
2526
 
2519
2527
 
2520
2528
  <span class="md-ellipsis">
2521
- Location Type
2529
+ Cloud Account
2522
2530
  </span>
2523
2531
 
2524
2532
 
@@ -2535,11 +2543,11 @@
2535
2543
 
2536
2544
 
2537
2545
  <li class="md-nav__item">
2538
- <a href="../core-data-model/dcim/location.html" class="md-nav__link">
2546
+ <a href="../core-data-model/cloud/cloudnetwork.html" class="md-nav__link">
2539
2547
 
2540
2548
 
2541
2549
  <span class="md-ellipsis">
2542
- Location
2550
+ Cloud Network
2543
2551
  </span>
2544
2552
 
2545
2553
 
@@ -2556,11 +2564,11 @@
2556
2564
 
2557
2565
 
2558
2566
  <li class="md-nav__item">
2559
- <a href="../core-data-model/dcim/rackgroup.html" class="md-nav__link">
2567
+ <a href="../core-data-model/cloud/cloudnetworkprefixassignment.html" class="md-nav__link">
2560
2568
 
2561
2569
 
2562
2570
  <span class="md-ellipsis">
2563
- Rack Group
2571
+ Cloud Network Prefix Assignment
2564
2572
  </span>
2565
2573
 
2566
2574
 
@@ -2577,11 +2585,11 @@
2577
2585
 
2578
2586
 
2579
2587
  <li class="md-nav__item">
2580
- <a href="../core-data-model/dcim/rack.html" class="md-nav__link">
2588
+ <a href="../core-data-model/cloud/cloudresourcetype.html" class="md-nav__link">
2581
2589
 
2582
2590
 
2583
2591
  <span class="md-ellipsis">
2584
- Rack
2592
+ Cloud Resource Type
2585
2593
  </span>
2586
2594
 
2587
2595
 
@@ -2598,11 +2606,11 @@
2598
2606
 
2599
2607
 
2600
2608
  <li class="md-nav__item">
2601
- <a href="../core-data-model/dcim/manufacturer.html" class="md-nav__link">
2609
+ <a href="../core-data-model/cloud/cloudservice.html" class="md-nav__link">
2602
2610
 
2603
2611
 
2604
2612
  <span class="md-ellipsis">
2605
- Manufacturer
2613
+ Cloud Service
2606
2614
  </span>
2607
2615
 
2608
2616
 
@@ -2619,11 +2627,11 @@
2619
2627
 
2620
2628
 
2621
2629
  <li class="md-nav__item">
2622
- <a href="../core-data-model/dcim/devicefamily.html" class="md-nav__link">
2630
+ <a href="../core-data-model/cloud/cloudservicenetworkassignment.html" class="md-nav__link">
2623
2631
 
2624
2632
 
2625
2633
  <span class="md-ellipsis">
2626
- Device Family
2634
+ Cloud Service Network Assignment
2627
2635
  </span>
2628
2636
 
2629
2637
 
@@ -2633,22 +2641,9 @@
2633
2641
 
2634
2642
 
2635
2643
 
2636
-
2637
-
2638
-
2639
-
2640
-
2641
-
2642
- <li class="md-nav__item">
2643
- <a href="../core-data-model/dcim/platform.html" class="md-nav__link">
2644
-
2645
-
2646
- <span class="md-ellipsis">
2647
- Platform
2648
- </span>
2649
-
2650
-
2651
- </a>
2644
+ </ul>
2645
+ </nav>
2646
+
2652
2647
  </li>
2653
2648
 
2654
2649
 
@@ -2671,32 +2666,24 @@
2671
2666
 
2672
2667
 
2673
2668
 
2674
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_3_8" >
2669
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4" >
2675
2670
 
2676
2671
 
2677
-
2678
- <div class="md-nav__link md-nav__container">
2679
- <a href="../core-data-model/dcim/devicetype.html" class="md-nav__link ">
2680
-
2672
+ <label class="md-nav__link" for="__nav_2_3_4" id="__nav_2_3_4_label" tabindex="0">
2673
+
2681
2674
 
2682
2675
  <span class="md-ellipsis">
2683
- Device Type
2676
+ DCIM
2684
2677
  </span>
2685
2678
 
2686
2679
 
2687
- </a>
2688
-
2689
-
2690
- <label class="md-nav__link " for="__nav_2_3_3_8" id="__nav_2_3_3_8_label" tabindex="0">
2691
- <span class="md-nav__icon md-icon"></span>
2692
- </label>
2693
-
2694
- </div>
2680
+ <span class="md-nav__icon md-icon"></span>
2681
+ </label>
2695
2682
 
2696
- <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_3_8_label" aria-expanded="false">
2697
- <label class="md-nav__title" for="__nav_2_3_3_8">
2683
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_4_label" aria-expanded="false">
2684
+ <label class="md-nav__title" for="__nav_2_3_4">
2698
2685
  <span class="md-nav__icon md-icon"></span>
2699
- Device Type
2686
+ DCIM
2700
2687
  </label>
2701
2688
  <ul class="md-nav__list" data-md-scrollfix>
2702
2689
 
@@ -2707,32 +2694,11 @@
2707
2694
 
2708
2695
 
2709
2696
  <li class="md-nav__item">
2710
- <a href="../core-data-model/dcim/consoleporttemplate.html" class="md-nav__link">
2711
-
2712
-
2713
- <span class="md-ellipsis">
2714
- Console Port Template
2715
- </span>
2716
-
2717
-
2718
- </a>
2719
- </li>
2720
-
2721
-
2722
-
2723
-
2724
-
2725
-
2726
-
2727
-
2728
-
2729
-
2730
- <li class="md-nav__item">
2731
- <a href="../core-data-model/dcim/consoleserverporttemplate.html" class="md-nav__link">
2697
+ <a href="../core-data-model/dcim/locationtype.html" class="md-nav__link">
2732
2698
 
2733
2699
 
2734
2700
  <span class="md-ellipsis">
2735
- Console Server Port Template
2701
+ Location Type
2736
2702
  </span>
2737
2703
 
2738
2704
 
@@ -2749,11 +2715,11 @@
2749
2715
 
2750
2716
 
2751
2717
  <li class="md-nav__item">
2752
- <a href="../core-data-model/dcim/devicebaytemplate.html" class="md-nav__link">
2718
+ <a href="../core-data-model/dcim/location.html" class="md-nav__link">
2753
2719
 
2754
2720
 
2755
2721
  <span class="md-ellipsis">
2756
- Device Bay Template
2722
+ Location
2757
2723
  </span>
2758
2724
 
2759
2725
 
@@ -2770,11 +2736,11 @@
2770
2736
 
2771
2737
 
2772
2738
  <li class="md-nav__item">
2773
- <a href="../core-data-model/dcim/frontporttemplate.html" class="md-nav__link">
2739
+ <a href="../core-data-model/dcim/rackgroup.html" class="md-nav__link">
2774
2740
 
2775
2741
 
2776
2742
  <span class="md-ellipsis">
2777
- Front Port Template
2743
+ Rack Group
2778
2744
  </span>
2779
2745
 
2780
2746
 
@@ -2791,11 +2757,11 @@
2791
2757
 
2792
2758
 
2793
2759
  <li class="md-nav__item">
2794
- <a href="../core-data-model/dcim/interfacetemplate.html" class="md-nav__link">
2760
+ <a href="../core-data-model/dcim/rack.html" class="md-nav__link">
2795
2761
 
2796
2762
 
2797
2763
  <span class="md-ellipsis">
2798
- Interface Template
2764
+ Rack
2799
2765
  </span>
2800
2766
 
2801
2767
 
@@ -2812,11 +2778,11 @@
2812
2778
 
2813
2779
 
2814
2780
  <li class="md-nav__item">
2815
- <a href="../core-data-model/dcim/poweroutlettemplate.html" class="md-nav__link">
2781
+ <a href="../core-data-model/dcim/manufacturer.html" class="md-nav__link">
2816
2782
 
2817
2783
 
2818
2784
  <span class="md-ellipsis">
2819
- Power Outlet Template
2785
+ Manufacturer
2820
2786
  </span>
2821
2787
 
2822
2788
 
@@ -2833,11 +2799,11 @@
2833
2799
 
2834
2800
 
2835
2801
  <li class="md-nav__item">
2836
- <a href="../core-data-model/dcim/powerporttemplate.html" class="md-nav__link">
2802
+ <a href="../core-data-model/dcim/devicefamily.html" class="md-nav__link">
2837
2803
 
2838
2804
 
2839
2805
  <span class="md-ellipsis">
2840
- Power Port Template
2806
+ Device Family
2841
2807
  </span>
2842
2808
 
2843
2809
 
@@ -2854,11 +2820,11 @@
2854
2820
 
2855
2821
 
2856
2822
  <li class="md-nav__item">
2857
- <a href="../core-data-model/dcim/rearporttemplate.html" class="md-nav__link">
2823
+ <a href="../core-data-model/dcim/platform.html" class="md-nav__link">
2858
2824
 
2859
2825
 
2860
2826
  <span class="md-ellipsis">
2861
- Rear Port Template
2827
+ Platform
2862
2828
  </span>
2863
2829
 
2864
2830
 
@@ -2868,14 +2834,6 @@
2868
2834
 
2869
2835
 
2870
2836
 
2871
- </ul>
2872
- </nav>
2873
-
2874
- </li>
2875
-
2876
-
2877
-
2878
-
2879
2837
 
2880
2838
 
2881
2839
 
@@ -2893,32 +2851,32 @@
2893
2851
 
2894
2852
 
2895
2853
 
2896
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_3_9" >
2854
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_8" >
2897
2855
 
2898
2856
 
2899
2857
 
2900
2858
  <div class="md-nav__link md-nav__container">
2901
- <a href="../core-data-model/dcim/device.html" class="md-nav__link ">
2859
+ <a href="../core-data-model/dcim/devicetype.html" class="md-nav__link ">
2902
2860
 
2903
2861
 
2904
2862
  <span class="md-ellipsis">
2905
- Device
2863
+ Device Type
2906
2864
  </span>
2907
2865
 
2908
2866
 
2909
2867
  </a>
2910
2868
 
2911
2869
 
2912
- <label class="md-nav__link " for="__nav_2_3_3_9" id="__nav_2_3_3_9_label" tabindex="0">
2870
+ <label class="md-nav__link " for="__nav_2_3_4_8" id="__nav_2_3_4_8_label" tabindex="0">
2913
2871
  <span class="md-nav__icon md-icon"></span>
2914
2872
  </label>
2915
2873
 
2916
2874
  </div>
2917
2875
 
2918
- <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_3_9_label" aria-expanded="false">
2919
- <label class="md-nav__title" for="__nav_2_3_3_9">
2876
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_8_label" aria-expanded="false">
2877
+ <label class="md-nav__title" for="__nav_2_3_4_8">
2920
2878
  <span class="md-nav__icon md-icon"></span>
2921
- Device
2879
+ Device Type
2922
2880
  </label>
2923
2881
  <ul class="md-nav__list" data-md-scrollfix>
2924
2882
 
@@ -2929,11 +2887,11 @@
2929
2887
 
2930
2888
 
2931
2889
  <li class="md-nav__item">
2932
- <a href="../core-data-model/dcim/consoleport.html" class="md-nav__link">
2890
+ <a href="../core-data-model/dcim/consoleporttemplate.html" class="md-nav__link">
2933
2891
 
2934
2892
 
2935
2893
  <span class="md-ellipsis">
2936
- Console Port
2894
+ Console Port Template
2937
2895
  </span>
2938
2896
 
2939
2897
 
@@ -2950,11 +2908,11 @@
2950
2908
 
2951
2909
 
2952
2910
  <li class="md-nav__item">
2953
- <a href="../core-data-model/dcim/consoleserverport.html" class="md-nav__link">
2911
+ <a href="../core-data-model/dcim/consoleserverporttemplate.html" class="md-nav__link">
2954
2912
 
2955
2913
 
2956
2914
  <span class="md-ellipsis">
2957
- Console Server Port
2915
+ Console Server Port Template
2958
2916
  </span>
2959
2917
 
2960
2918
 
@@ -2971,11 +2929,11 @@
2971
2929
 
2972
2930
 
2973
2931
  <li class="md-nav__item">
2974
- <a href="../core-data-model/dcim/devicebay.html" class="md-nav__link">
2932
+ <a href="../core-data-model/dcim/devicebaytemplate.html" class="md-nav__link">
2975
2933
 
2976
2934
 
2977
2935
  <span class="md-ellipsis">
2978
- Device Bay
2936
+ Device Bay Template
2979
2937
  </span>
2980
2938
 
2981
2939
 
@@ -2992,11 +2950,11 @@
2992
2950
 
2993
2951
 
2994
2952
  <li class="md-nav__item">
2995
- <a href="../core-data-model/dcim/frontport.html" class="md-nav__link">
2953
+ <a href="../core-data-model/dcim/frontporttemplate.html" class="md-nav__link">
2996
2954
 
2997
2955
 
2998
2956
  <span class="md-ellipsis">
2999
- Front Port
2957
+ Front Port Template
3000
2958
  </span>
3001
2959
 
3002
2960
 
@@ -3013,11 +2971,11 @@
3013
2971
 
3014
2972
 
3015
2973
  <li class="md-nav__item">
3016
- <a href="../core-data-model/dcim/interface.html" class="md-nav__link">
2974
+ <a href="../core-data-model/dcim/interfacetemplate.html" class="md-nav__link">
3017
2975
 
3018
2976
 
3019
2977
  <span class="md-ellipsis">
3020
- Interface
2978
+ Interface Template
3021
2979
  </span>
3022
2980
 
3023
2981
 
@@ -3034,11 +2992,11 @@
3034
2992
 
3035
2993
 
3036
2994
  <li class="md-nav__item">
3037
- <a href="../core-data-model/dcim/inventoryitem.html" class="md-nav__link">
2995
+ <a href="../core-data-model/dcim/modulebaytemplate.html" class="md-nav__link">
3038
2996
 
3039
2997
 
3040
2998
  <span class="md-ellipsis">
3041
- Inventory Item
2999
+ Module Bay Template
3042
3000
  </span>
3043
3001
 
3044
3002
 
@@ -3055,11 +3013,11 @@
3055
3013
 
3056
3014
 
3057
3015
  <li class="md-nav__item">
3058
- <a href="../core-data-model/dcim/powerport.html" class="md-nav__link">
3016
+ <a href="../core-data-model/dcim/poweroutlettemplate.html" class="md-nav__link">
3059
3017
 
3060
3018
 
3061
3019
  <span class="md-ellipsis">
3062
- Power Port
3020
+ Power Outlet Template
3063
3021
  </span>
3064
3022
 
3065
3023
 
@@ -3076,11 +3034,11 @@
3076
3034
 
3077
3035
 
3078
3036
  <li class="md-nav__item">
3079
- <a href="../core-data-model/dcim/poweroutlet.html" class="md-nav__link">
3037
+ <a href="../core-data-model/dcim/powerporttemplate.html" class="md-nav__link">
3080
3038
 
3081
3039
 
3082
3040
  <span class="md-ellipsis">
3083
- Power Outlet
3041
+ Power Port Template
3084
3042
  </span>
3085
3043
 
3086
3044
 
@@ -3097,11 +3055,11 @@
3097
3055
 
3098
3056
 
3099
3057
  <li class="md-nav__item">
3100
- <a href="../core-data-model/dcim/rearport.html" class="md-nav__link">
3058
+ <a href="../core-data-model/dcim/rearporttemplate.html" class="md-nav__link">
3101
3059
 
3102
3060
 
3103
3061
  <span class="md-ellipsis">
3104
- Rear Port
3062
+ Rear Port Template
3105
3063
  </span>
3106
3064
 
3107
3065
 
@@ -3125,20 +3083,45 @@
3125
3083
 
3126
3084
 
3127
3085
 
3128
- <li class="md-nav__item">
3129
- <a href="../core-data-model/dcim/cable.html" class="md-nav__link">
3086
+
3087
+
3088
+
3089
+
3090
+
3091
+
3092
+
3093
+ <li class="md-nav__item md-nav__item--nested">
3094
+
3130
3095
 
3096
+
3097
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_9" >
3098
+
3099
+
3100
+
3101
+ <div class="md-nav__link md-nav__container">
3102
+ <a href="../core-data-model/dcim/device.html" class="md-nav__link ">
3103
+
3131
3104
 
3132
3105
  <span class="md-ellipsis">
3133
- Cable
3106
+ Device
3134
3107
  </span>
3135
3108
 
3136
3109
 
3137
- </a>
3138
- </li>
3139
-
3140
-
3110
+ </a>
3111
+
3141
3112
 
3113
+ <label class="md-nav__link " for="__nav_2_3_4_9" id="__nav_2_3_4_9_label" tabindex="0">
3114
+ <span class="md-nav__icon md-icon"></span>
3115
+ </label>
3116
+
3117
+ </div>
3118
+
3119
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_9_label" aria-expanded="false">
3120
+ <label class="md-nav__title" for="__nav_2_3_4_9">
3121
+ <span class="md-nav__icon md-icon"></span>
3122
+ Device
3123
+ </label>
3124
+ <ul class="md-nav__list" data-md-scrollfix>
3142
3125
 
3143
3126
 
3144
3127
 
@@ -3147,11 +3130,11 @@
3147
3130
 
3148
3131
 
3149
3132
  <li class="md-nav__item">
3150
- <a href="../core-data-model/dcim/deviceredundancygroup.html" class="md-nav__link">
3133
+ <a href="../core-data-model/dcim/consoleport.html" class="md-nav__link">
3151
3134
 
3152
3135
 
3153
3136
  <span class="md-ellipsis">
3154
- Device Redundancy Group
3137
+ Console Port
3155
3138
  </span>
3156
3139
 
3157
3140
 
@@ -3168,11 +3151,11 @@
3168
3151
 
3169
3152
 
3170
3153
  <li class="md-nav__item">
3171
- <a href="../core-data-model/dcim/interfaceredundancygroup.html" class="md-nav__link">
3154
+ <a href="../core-data-model/dcim/consoleserverport.html" class="md-nav__link">
3172
3155
 
3173
3156
 
3174
3157
  <span class="md-ellipsis">
3175
- Interface Redundancy Group
3158
+ Console Server Port
3176
3159
  </span>
3177
3160
 
3178
3161
 
@@ -3189,11 +3172,11 @@
3189
3172
 
3190
3173
 
3191
3174
  <li class="md-nav__item">
3192
- <a href="../core-data-model/dcim/powerpanel.html" class="md-nav__link">
3175
+ <a href="../core-data-model/dcim/devicebay.html" class="md-nav__link">
3193
3176
 
3194
3177
 
3195
3178
  <span class="md-ellipsis">
3196
- Power Panel
3179
+ Device Bay
3197
3180
  </span>
3198
3181
 
3199
3182
 
@@ -3210,11 +3193,11 @@
3210
3193
 
3211
3194
 
3212
3195
  <li class="md-nav__item">
3213
- <a href="../core-data-model/dcim/powerfeed.html" class="md-nav__link">
3196
+ <a href="../core-data-model/dcim/frontport.html" class="md-nav__link">
3214
3197
 
3215
3198
 
3216
3199
  <span class="md-ellipsis">
3217
- Power Feed
3200
+ Front Port
3218
3201
  </span>
3219
3202
 
3220
3203
 
@@ -3231,11 +3214,11 @@
3231
3214
 
3232
3215
 
3233
3216
  <li class="md-nav__item">
3234
- <a href="../core-data-model/dcim/rackreservation.html" class="md-nav__link">
3217
+ <a href="../core-data-model/dcim/interface.html" class="md-nav__link">
3235
3218
 
3236
3219
 
3237
3220
  <span class="md-ellipsis">
3238
- Rack Reservation
3221
+ Interface
3239
3222
  </span>
3240
3223
 
3241
3224
 
@@ -3252,11 +3235,11 @@
3252
3235
 
3253
3236
 
3254
3237
  <li class="md-nav__item">
3255
- <a href="../core-data-model/dcim/softwareimagefile.html" class="md-nav__link">
3238
+ <a href="../core-data-model/dcim/inventoryitem.html" class="md-nav__link">
3256
3239
 
3257
3240
 
3258
3241
  <span class="md-ellipsis">
3259
- Software Image File
3242
+ Inventory Item
3260
3243
  </span>
3261
3244
 
3262
3245
 
@@ -3273,11 +3256,11 @@
3273
3256
 
3274
3257
 
3275
3258
  <li class="md-nav__item">
3276
- <a href="../core-data-model/dcim/softwareversion.html" class="md-nav__link">
3259
+ <a href="../core-data-model/dcim/modulebay.html" class="md-nav__link">
3277
3260
 
3278
3261
 
3279
3262
  <span class="md-ellipsis">
3280
- Software Version
3263
+ Module Bay
3281
3264
  </span>
3282
3265
 
3283
3266
 
@@ -3294,11 +3277,11 @@
3294
3277
 
3295
3278
 
3296
3279
  <li class="md-nav__item">
3297
- <a href="../core-data-model/dcim/virtualchassis.html" class="md-nav__link">
3280
+ <a href="../core-data-model/dcim/powerport.html" class="md-nav__link">
3298
3281
 
3299
3282
 
3300
3283
  <span class="md-ellipsis">
3301
- Virtual Chassis
3284
+ Power Port
3302
3285
  </span>
3303
3286
 
3304
3287
 
@@ -3315,11 +3298,11 @@
3315
3298
 
3316
3299
 
3317
3300
  <li class="md-nav__item">
3318
- <a href="../core-data-model/dcim/controller.html" class="md-nav__link">
3301
+ <a href="../core-data-model/dcim/poweroutlet.html" class="md-nav__link">
3319
3302
 
3320
3303
 
3321
3304
  <span class="md-ellipsis">
3322
- Controller
3305
+ Power Outlet
3323
3306
  </span>
3324
3307
 
3325
3308
 
@@ -3336,11 +3319,11 @@
3336
3319
 
3337
3320
 
3338
3321
  <li class="md-nav__item">
3339
- <a href="../core-data-model/dcim/controllermanageddevicegroup.html" class="md-nav__link">
3322
+ <a href="../core-data-model/dcim/rearport.html" class="md-nav__link">
3340
3323
 
3341
3324
 
3342
3325
  <span class="md-ellipsis">
3343
- Controller Managed Device Group
3326
+ Rear Port
3344
3327
  </span>
3345
3328
 
3346
3329
 
@@ -3375,29 +3358,733 @@
3375
3358
 
3376
3359
 
3377
3360
 
3378
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4" >
3361
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_10" >
3379
3362
 
3380
3363
 
3381
- <label class="md-nav__link" for="__nav_2_3_4" id="__nav_2_3_4_label" tabindex="0">
3382
-
3364
+
3365
+ <div class="md-nav__link md-nav__container">
3366
+ <a href="../core-data-model/dcim/moduletype.html" class="md-nav__link ">
3367
+
3383
3368
 
3384
3369
  <span class="md-ellipsis">
3385
- Extras
3370
+ Module Type
3386
3371
  </span>
3387
3372
 
3388
3373
 
3389
- <span class="md-nav__icon md-icon"></span>
3390
- </label>
3391
-
3392
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_4_label" aria-expanded="false">
3393
- <label class="md-nav__title" for="__nav_2_3_4">
3394
- <span class="md-nav__icon md-icon"></span>
3395
- Extras
3396
- </label>
3397
- <ul class="md-nav__list" data-md-scrollfix>
3374
+ </a>
3398
3375
 
3399
3376
 
3400
-
3377
+ <label class="md-nav__link " for="__nav_2_3_4_10" id="__nav_2_3_4_10_label" tabindex="0">
3378
+ <span class="md-nav__icon md-icon"></span>
3379
+ </label>
3380
+
3381
+ </div>
3382
+
3383
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_10_label" aria-expanded="false">
3384
+ <label class="md-nav__title" for="__nav_2_3_4_10">
3385
+ <span class="md-nav__icon md-icon"></span>
3386
+ Module Type
3387
+ </label>
3388
+ <ul class="md-nav__list" data-md-scrollfix>
3389
+
3390
+
3391
+
3392
+
3393
+
3394
+
3395
+
3396
+ <li class="md-nav__item">
3397
+ <a href="../core-data-model/dcim/consoleporttemplate.html" class="md-nav__link">
3398
+
3399
+
3400
+ <span class="md-ellipsis">
3401
+ Console Port Template
3402
+ </span>
3403
+
3404
+
3405
+ </a>
3406
+ </li>
3407
+
3408
+
3409
+
3410
+
3411
+
3412
+
3413
+
3414
+
3415
+
3416
+
3417
+ <li class="md-nav__item">
3418
+ <a href="../core-data-model/dcim/consoleserverporttemplate.html" class="md-nav__link">
3419
+
3420
+
3421
+ <span class="md-ellipsis">
3422
+ Console Server Port Template
3423
+ </span>
3424
+
3425
+
3426
+ </a>
3427
+ </li>
3428
+
3429
+
3430
+
3431
+
3432
+
3433
+
3434
+
3435
+
3436
+
3437
+
3438
+ <li class="md-nav__item">
3439
+ <a href="../core-data-model/dcim/frontporttemplate.html" class="md-nav__link">
3440
+
3441
+
3442
+ <span class="md-ellipsis">
3443
+ Front Port Template
3444
+ </span>
3445
+
3446
+
3447
+ </a>
3448
+ </li>
3449
+
3450
+
3451
+
3452
+
3453
+
3454
+
3455
+
3456
+
3457
+
3458
+
3459
+ <li class="md-nav__item">
3460
+ <a href="../core-data-model/dcim/interfacetemplate.html" class="md-nav__link">
3461
+
3462
+
3463
+ <span class="md-ellipsis">
3464
+ Interface Template
3465
+ </span>
3466
+
3467
+
3468
+ </a>
3469
+ </li>
3470
+
3471
+
3472
+
3473
+
3474
+
3475
+
3476
+
3477
+
3478
+
3479
+
3480
+ <li class="md-nav__item">
3481
+ <a href="../core-data-model/dcim/modulebaytemplate.html" class="md-nav__link">
3482
+
3483
+
3484
+ <span class="md-ellipsis">
3485
+ Module Bay Template
3486
+ </span>
3487
+
3488
+
3489
+ </a>
3490
+ </li>
3491
+
3492
+
3493
+
3494
+
3495
+
3496
+
3497
+
3498
+
3499
+
3500
+
3501
+ <li class="md-nav__item">
3502
+ <a href="../core-data-model/dcim/poweroutlettemplate.html" class="md-nav__link">
3503
+
3504
+
3505
+ <span class="md-ellipsis">
3506
+ Power Outlet Template
3507
+ </span>
3508
+
3509
+
3510
+ </a>
3511
+ </li>
3512
+
3513
+
3514
+
3515
+
3516
+
3517
+
3518
+
3519
+
3520
+
3521
+
3522
+ <li class="md-nav__item">
3523
+ <a href="../core-data-model/dcim/powerporttemplate.html" class="md-nav__link">
3524
+
3525
+
3526
+ <span class="md-ellipsis">
3527
+ Power Port Template
3528
+ </span>
3529
+
3530
+
3531
+ </a>
3532
+ </li>
3533
+
3534
+
3535
+
3536
+
3537
+
3538
+
3539
+
3540
+
3541
+
3542
+
3543
+ <li class="md-nav__item">
3544
+ <a href="../core-data-model/dcim/rearporttemplate.html" class="md-nav__link">
3545
+
3546
+
3547
+ <span class="md-ellipsis">
3548
+ Rear Port Template
3549
+ </span>
3550
+
3551
+
3552
+ </a>
3553
+ </li>
3554
+
3555
+
3556
+
3557
+
3558
+ </ul>
3559
+ </nav>
3560
+
3561
+ </li>
3562
+
3563
+
3564
+
3565
+
3566
+
3567
+
3568
+
3569
+
3570
+
3571
+
3572
+
3573
+
3574
+
3575
+
3576
+
3577
+
3578
+
3579
+ <li class="md-nav__item md-nav__item--nested">
3580
+
3581
+
3582
+
3583
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_4_11" >
3584
+
3585
+
3586
+
3587
+ <div class="md-nav__link md-nav__container">
3588
+ <a href="../core-data-model/dcim/module.html" class="md-nav__link ">
3589
+
3590
+
3591
+ <span class="md-ellipsis">
3592
+ Module
3593
+ </span>
3594
+
3595
+
3596
+ </a>
3597
+
3598
+
3599
+ <label class="md-nav__link " for="__nav_2_3_4_11" id="__nav_2_3_4_11_label" tabindex="0">
3600
+ <span class="md-nav__icon md-icon"></span>
3601
+ </label>
3602
+
3603
+ </div>
3604
+
3605
+ <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_2_3_4_11_label" aria-expanded="false">
3606
+ <label class="md-nav__title" for="__nav_2_3_4_11">
3607
+ <span class="md-nav__icon md-icon"></span>
3608
+ Module
3609
+ </label>
3610
+ <ul class="md-nav__list" data-md-scrollfix>
3611
+
3612
+
3613
+
3614
+
3615
+
3616
+
3617
+
3618
+ <li class="md-nav__item">
3619
+ <a href="../core-data-model/dcim/consoleport.html" class="md-nav__link">
3620
+
3621
+
3622
+ <span class="md-ellipsis">
3623
+ Console Port
3624
+ </span>
3625
+
3626
+
3627
+ </a>
3628
+ </li>
3629
+
3630
+
3631
+
3632
+
3633
+
3634
+
3635
+
3636
+
3637
+
3638
+
3639
+ <li class="md-nav__item">
3640
+ <a href="../core-data-model/dcim/consoleserverport.html" class="md-nav__link">
3641
+
3642
+
3643
+ <span class="md-ellipsis">
3644
+ Console Server Port
3645
+ </span>
3646
+
3647
+
3648
+ </a>
3649
+ </li>
3650
+
3651
+
3652
+
3653
+
3654
+
3655
+
3656
+
3657
+
3658
+
3659
+
3660
+ <li class="md-nav__item">
3661
+ <a href="../core-data-model/dcim/frontport.html" class="md-nav__link">
3662
+
3663
+
3664
+ <span class="md-ellipsis">
3665
+ Front Port
3666
+ </span>
3667
+
3668
+
3669
+ </a>
3670
+ </li>
3671
+
3672
+
3673
+
3674
+
3675
+
3676
+
3677
+
3678
+
3679
+
3680
+
3681
+ <li class="md-nav__item">
3682
+ <a href="../core-data-model/dcim/interface.html" class="md-nav__link">
3683
+
3684
+
3685
+ <span class="md-ellipsis">
3686
+ Interface
3687
+ </span>
3688
+
3689
+
3690
+ </a>
3691
+ </li>
3692
+
3693
+
3694
+
3695
+
3696
+
3697
+
3698
+
3699
+
3700
+
3701
+
3702
+ <li class="md-nav__item">
3703
+ <a href="../core-data-model/dcim/inventoryitem.html" class="md-nav__link">
3704
+
3705
+
3706
+ <span class="md-ellipsis">
3707
+ Inventory Item
3708
+ </span>
3709
+
3710
+
3711
+ </a>
3712
+ </li>
3713
+
3714
+
3715
+
3716
+
3717
+
3718
+
3719
+
3720
+
3721
+
3722
+
3723
+ <li class="md-nav__item">
3724
+ <a href="../core-data-model/dcim/modulebay.html" class="md-nav__link">
3725
+
3726
+
3727
+ <span class="md-ellipsis">
3728
+ Module Bay
3729
+ </span>
3730
+
3731
+
3732
+ </a>
3733
+ </li>
3734
+
3735
+
3736
+
3737
+
3738
+
3739
+
3740
+
3741
+
3742
+
3743
+
3744
+ <li class="md-nav__item">
3745
+ <a href="../core-data-model/dcim/powerport.html" class="md-nav__link">
3746
+
3747
+
3748
+ <span class="md-ellipsis">
3749
+ Power Port
3750
+ </span>
3751
+
3752
+
3753
+ </a>
3754
+ </li>
3755
+
3756
+
3757
+
3758
+
3759
+
3760
+
3761
+
3762
+
3763
+
3764
+
3765
+ <li class="md-nav__item">
3766
+ <a href="../core-data-model/dcim/poweroutlet.html" class="md-nav__link">
3767
+
3768
+
3769
+ <span class="md-ellipsis">
3770
+ Power Outlet
3771
+ </span>
3772
+
3773
+
3774
+ </a>
3775
+ </li>
3776
+
3777
+
3778
+
3779
+
3780
+
3781
+
3782
+
3783
+
3784
+
3785
+
3786
+ <li class="md-nav__item">
3787
+ <a href="../core-data-model/dcim/rearport.html" class="md-nav__link">
3788
+
3789
+
3790
+ <span class="md-ellipsis">
3791
+ Rear Port
3792
+ </span>
3793
+
3794
+
3795
+ </a>
3796
+ </li>
3797
+
3798
+
3799
+
3800
+
3801
+ </ul>
3802
+ </nav>
3803
+
3804
+ </li>
3805
+
3806
+
3807
+
3808
+
3809
+
3810
+
3811
+
3812
+
3813
+
3814
+
3815
+ <li class="md-nav__item">
3816
+ <a href="../core-data-model/dcim/cable.html" class="md-nav__link">
3817
+
3818
+
3819
+ <span class="md-ellipsis">
3820
+ Cable
3821
+ </span>
3822
+
3823
+
3824
+ </a>
3825
+ </li>
3826
+
3827
+
3828
+
3829
+
3830
+
3831
+
3832
+
3833
+
3834
+
3835
+
3836
+ <li class="md-nav__item">
3837
+ <a href="../core-data-model/dcim/deviceredundancygroup.html" class="md-nav__link">
3838
+
3839
+
3840
+ <span class="md-ellipsis">
3841
+ Device Redundancy Group
3842
+ </span>
3843
+
3844
+
3845
+ </a>
3846
+ </li>
3847
+
3848
+
3849
+
3850
+
3851
+
3852
+
3853
+
3854
+
3855
+
3856
+
3857
+ <li class="md-nav__item">
3858
+ <a href="../core-data-model/dcim/interfaceredundancygroup.html" class="md-nav__link">
3859
+
3860
+
3861
+ <span class="md-ellipsis">
3862
+ Interface Redundancy Group
3863
+ </span>
3864
+
3865
+
3866
+ </a>
3867
+ </li>
3868
+
3869
+
3870
+
3871
+
3872
+
3873
+
3874
+
3875
+
3876
+
3877
+
3878
+ <li class="md-nav__item">
3879
+ <a href="../core-data-model/dcim/powerpanel.html" class="md-nav__link">
3880
+
3881
+
3882
+ <span class="md-ellipsis">
3883
+ Power Panel
3884
+ </span>
3885
+
3886
+
3887
+ </a>
3888
+ </li>
3889
+
3890
+
3891
+
3892
+
3893
+
3894
+
3895
+
3896
+
3897
+
3898
+
3899
+ <li class="md-nav__item">
3900
+ <a href="../core-data-model/dcim/powerfeed.html" class="md-nav__link">
3901
+
3902
+
3903
+ <span class="md-ellipsis">
3904
+ Power Feed
3905
+ </span>
3906
+
3907
+
3908
+ </a>
3909
+ </li>
3910
+
3911
+
3912
+
3913
+
3914
+
3915
+
3916
+
3917
+
3918
+
3919
+
3920
+ <li class="md-nav__item">
3921
+ <a href="../core-data-model/dcim/rackreservation.html" class="md-nav__link">
3922
+
3923
+
3924
+ <span class="md-ellipsis">
3925
+ Rack Reservation
3926
+ </span>
3927
+
3928
+
3929
+ </a>
3930
+ </li>
3931
+
3932
+
3933
+
3934
+
3935
+
3936
+
3937
+
3938
+
3939
+
3940
+
3941
+ <li class="md-nav__item">
3942
+ <a href="../core-data-model/dcim/softwareimagefile.html" class="md-nav__link">
3943
+
3944
+
3945
+ <span class="md-ellipsis">
3946
+ Software Image File
3947
+ </span>
3948
+
3949
+
3950
+ </a>
3951
+ </li>
3952
+
3953
+
3954
+
3955
+
3956
+
3957
+
3958
+
3959
+
3960
+
3961
+
3962
+ <li class="md-nav__item">
3963
+ <a href="../core-data-model/dcim/softwareversion.html" class="md-nav__link">
3964
+
3965
+
3966
+ <span class="md-ellipsis">
3967
+ Software Version
3968
+ </span>
3969
+
3970
+
3971
+ </a>
3972
+ </li>
3973
+
3974
+
3975
+
3976
+
3977
+
3978
+
3979
+
3980
+
3981
+
3982
+
3983
+ <li class="md-nav__item">
3984
+ <a href="../core-data-model/dcim/virtualchassis.html" class="md-nav__link">
3985
+
3986
+
3987
+ <span class="md-ellipsis">
3988
+ Virtual Chassis
3989
+ </span>
3990
+
3991
+
3992
+ </a>
3993
+ </li>
3994
+
3995
+
3996
+
3997
+
3998
+
3999
+
4000
+
4001
+
4002
+
4003
+
4004
+ <li class="md-nav__item">
4005
+ <a href="../core-data-model/dcim/controller.html" class="md-nav__link">
4006
+
4007
+
4008
+ <span class="md-ellipsis">
4009
+ Controller
4010
+ </span>
4011
+
4012
+
4013
+ </a>
4014
+ </li>
4015
+
4016
+
4017
+
4018
+
4019
+
4020
+
4021
+
4022
+
4023
+
4024
+
4025
+ <li class="md-nav__item">
4026
+ <a href="../core-data-model/dcim/controllermanageddevicegroup.html" class="md-nav__link">
4027
+
4028
+
4029
+ <span class="md-ellipsis">
4030
+ Controller Managed Device Group
4031
+ </span>
4032
+
4033
+
4034
+ </a>
4035
+ </li>
4036
+
4037
+
4038
+
4039
+
4040
+ </ul>
4041
+ </nav>
4042
+
4043
+ </li>
4044
+
4045
+
4046
+
4047
+
4048
+
4049
+
4050
+
4051
+
4052
+
4053
+
4054
+
4055
+
4056
+
4057
+
4058
+
4059
+
4060
+
4061
+ <li class="md-nav__item md-nav__item--nested">
4062
+
4063
+
4064
+
4065
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_5" >
4066
+
4067
+
4068
+ <label class="md-nav__link" for="__nav_2_3_5" id="__nav_2_3_5_label" tabindex="0">
4069
+
4070
+
4071
+ <span class="md-ellipsis">
4072
+ Extras
4073
+ </span>
4074
+
4075
+
4076
+ <span class="md-nav__icon md-icon"></span>
4077
+ </label>
4078
+
4079
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_5_label" aria-expanded="false">
4080
+ <label class="md-nav__title" for="__nav_2_3_5">
4081
+ <span class="md-nav__icon md-icon"></span>
4082
+ Extras
4083
+ </label>
4084
+ <ul class="md-nav__list" data-md-scrollfix>
4085
+
4086
+
4087
+
3401
4088
 
3402
4089
 
3403
4090
 
@@ -3505,10 +4192,10 @@
3505
4192
 
3506
4193
 
3507
4194
 
3508
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_5" >
4195
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_6" >
3509
4196
 
3510
4197
 
3511
- <label class="md-nav__link" for="__nav_2_3_5" id="__nav_2_3_5_label" tabindex="0">
4198
+ <label class="md-nav__link" for="__nav_2_3_6" id="__nav_2_3_6_label" tabindex="0">
3512
4199
 
3513
4200
 
3514
4201
  <span class="md-ellipsis">
@@ -3519,8 +4206,8 @@
3519
4206
  <span class="md-nav__icon md-icon"></span>
3520
4207
  </label>
3521
4208
 
3522
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_5_label" aria-expanded="false">
3523
- <label class="md-nav__title" for="__nav_2_3_5">
4209
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_6_label" aria-expanded="false">
4210
+ <label class="md-nav__title" for="__nav_2_3_6">
3524
4211
  <span class="md-nav__icon md-icon"></span>
3525
4212
  IPAM
3526
4213
  </label>
@@ -3740,10 +4427,10 @@
3740
4427
 
3741
4428
 
3742
4429
 
3743
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_6" >
4430
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_7" >
3744
4431
 
3745
4432
 
3746
- <label class="md-nav__link" for="__nav_2_3_6" id="__nav_2_3_6_label" tabindex="0">
4433
+ <label class="md-nav__link" for="__nav_2_3_7" id="__nav_2_3_7_label" tabindex="0">
3747
4434
 
3748
4435
 
3749
4436
  <span class="md-ellipsis">
@@ -3754,8 +4441,8 @@
3754
4441
  <span class="md-nav__icon md-icon"></span>
3755
4442
  </label>
3756
4443
 
3757
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_6_label" aria-expanded="false">
3758
- <label class="md-nav__title" for="__nav_2_3_6">
4444
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_7_label" aria-expanded="false">
4445
+ <label class="md-nav__title" for="__nav_2_3_7">
3759
4446
  <span class="md-nav__icon md-icon"></span>
3760
4447
  Tenancy
3761
4448
  </label>
@@ -3828,10 +4515,10 @@
3828
4515
 
3829
4516
 
3830
4517
 
3831
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_7" >
4518
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3_8" >
3832
4519
 
3833
4520
 
3834
- <label class="md-nav__link" for="__nav_2_3_7" id="__nav_2_3_7_label" tabindex="0">
4521
+ <label class="md-nav__link" for="__nav_2_3_8" id="__nav_2_3_8_label" tabindex="0">
3835
4522
 
3836
4523
 
3837
4524
  <span class="md-ellipsis">
@@ -3842,8 +4529,8 @@
3842
4529
  <span class="md-nav__icon md-icon"></span>
3843
4530
  </label>
3844
4531
 
3845
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_7_label" aria-expanded="false">
3846
- <label class="md-nav__title" for="__nav_2_3_7">
4532
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_3_8_label" aria-expanded="false">
4533
+ <label class="md-nav__title" for="__nav_2_3_8">
3847
4534
  <span class="md-nav__icon md-icon"></span>
3848
4535
  Virtualization
3849
4536
  </label>
@@ -4098,369 +4785,73 @@
4098
4785
 
4099
4786
 
4100
4787
 
4101
-
4102
-
4103
-
4104
-
4105
- <li class="md-nav__item md-nav__item--active">
4106
-
4107
- <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
4108
-
4109
-
4110
-
4111
-
4112
-
4113
- <label class="md-nav__link md-nav__link--active" for="__toc">
4114
-
4115
-
4116
- <span class="md-ellipsis">
4117
- Dynamic Groups
4118
- </span>
4119
-
4120
-
4121
- <span class="md-nav__icon md-icon"></span>
4122
- </label>
4123
-
4124
- <a href="dynamicgroup.html" class="md-nav__link md-nav__link--active">
4125
-
4126
-
4127
- <span class="md-ellipsis">
4128
- Dynamic Groups
4129
- </span>
4130
-
4131
-
4132
- </a>
4133
-
4134
-
4135
-
4136
- <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
4137
-
4138
-
4139
-
4140
-
4141
-
4142
-
4143
- <label class="md-nav__title" for="__toc">
4144
- <span class="md-nav__icon md-icon"></span>
4145
- Table of contents
4146
- </label>
4147
- <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
4148
-
4149
- <li class="md-nav__item">
4150
- <a href="#introduction" class="md-nav__link">
4151
- <span class="md-ellipsis">
4152
- Introduction
4153
- </span>
4154
- </a>
4155
-
4156
- <nav class="md-nav" aria-label="Introduction">
4157
- <ul class="md-nav__list">
4158
-
4159
- <li class="md-nav__item">
4160
- <a href="#creating-dynamic-groups" class="md-nav__link">
4161
- <span class="md-ellipsis">
4162
- Creating Dynamic Groups
4163
- </span>
4164
- </a>
4165
-
4166
- </li>
4167
-
4168
- <li class="md-nav__item">
4169
- <a href="#working-with-dynamic-groups" class="md-nav__link">
4170
- <span class="md-ellipsis">
4171
- Working with Dynamic Groups
4172
- </span>
4173
- </a>
4174
-
4175
- </li>
4176
-
4177
- <li class="md-nav__item">
4178
- <a href="#filtering" class="md-nav__link">
4179
- <span class="md-ellipsis">
4180
- Filtering
4181
- </span>
4182
- </a>
4183
-
4184
- <nav class="md-nav" aria-label="Filtering">
4185
- <ul class="md-nav__list">
4186
-
4187
- <li class="md-nav__item">
4188
- <a href="#basic-filtering" class="md-nav__link">
4189
- <span class="md-ellipsis">
4190
- Basic Filtering
4191
- </span>
4192
- </a>
4193
-
4194
- </li>
4195
-
4196
- <li class="md-nav__item">
4197
- <a href="#advanced-filtering" class="md-nav__link">
4198
- <span class="md-ellipsis">
4199
- Advanced Filtering
4200
- </span>
4201
- </a>
4202
-
4203
- </li>
4204
-
4205
- </ul>
4206
- </nav>
4207
-
4208
- </li>
4209
-
4210
- </ul>
4211
- </nav>
4212
-
4213
- </li>
4214
-
4215
- <li class="md-nav__item">
4216
- <a href="#example-workflow" class="md-nav__link">
4217
- <span class="md-ellipsis">
4218
- Example Workflow
4219
- </span>
4220
- </a>
4221
-
4222
- <nav class="md-nav" aria-label="Example Workflow">
4223
- <ul class="md-nav__list">
4224
-
4225
- <li class="md-nav__item">
4226
- <a href="#basic-filtering-with-a-single-dynamic-group" class="md-nav__link">
4227
- <span class="md-ellipsis">
4228
- Basic Filtering with a single Dynamic Group
4229
- </span>
4230
- </a>
4231
-
4232
- </li>
4233
-
4234
- <li class="md-nav__item">
4235
- <a href="#advanced-filtering-combining-two-dynamic-groups-into-a-third" class="md-nav__link">
4236
- <span class="md-ellipsis">
4237
- Advanced Filtering - Combining Two Dynamic Groups into a Third
4238
- </span>
4239
- </a>
4240
-
4241
- </li>
4242
-
4243
- <li class="md-nav__item">
4244
- <a href="#advanced-filtering-nested-groups-and-negation" class="md-nav__link">
4245
- <span class="md-ellipsis">
4246
- Advanced Filtering: Nested Groups and Negation
4247
- </span>
4248
- </a>
4249
-
4250
- </li>
4251
-
4252
- </ul>
4253
- </nav>
4254
-
4255
- </li>
4256
-
4257
- <li class="md-nav__item">
4258
- <a href="#technical-details" class="md-nav__link">
4259
- <span class="md-ellipsis">
4260
- Technical Details
4261
- </span>
4262
- </a>
4263
-
4264
- <nav class="md-nav" aria-label="Technical Details">
4265
- <ul class="md-nav__list">
4266
-
4267
- <li class="md-nav__item">
4268
- <a href="#filter-generation" class="md-nav__link">
4269
- <span class="md-ellipsis">
4270
- Filter Generation
4271
- </span>
4272
- </a>
4273
-
4274
- </li>
4275
-
4276
- <li class="md-nav__item">
4277
- <a href="#weights" class="md-nav__link">
4278
- <span class="md-ellipsis">
4279
- Weights
4280
- </span>
4281
- </a>
4282
-
4283
- </li>
4284
-
4285
- <li class="md-nav__item">
4286
- <a href="#operators" class="md-nav__link">
4287
- <span class="md-ellipsis">
4288
- Operators
4289
- </span>
4290
- </a>
4291
-
4292
- <nav class="md-nav" aria-label="Operators">
4293
- <ul class="md-nav__list">
4294
-
4295
- <li class="md-nav__item">
4296
- <a href="#how-does-this-work" class="md-nav__link">
4297
- <span class="md-ellipsis">
4298
- How does this work?
4299
- </span>
4300
- </a>
4301
-
4302
- </li>
4303
-
4304
- </ul>
4305
- </nav>
4306
-
4307
- </li>
4308
-
4309
- </ul>
4310
- </nav>
4311
-
4312
- </li>
4313
-
4314
- <li class="md-nav__item">
4315
- <a href="#dynamic-groups-and-the-rest-api" class="md-nav__link">
4316
- <span class="md-ellipsis">
4317
- Dynamic Groups and the REST API
4318
- </span>
4319
- </a>
4320
-
4321
- <nav class="md-nav" aria-label="Dynamic Groups and the REST API">
4322
- <ul class="md-nav__list">
4323
-
4324
- <li class="md-nav__item">
4325
- <a href="#specifying-filter-conditions" class="md-nav__link">
4326
- <span class="md-ellipsis">
4327
- Specifying Filter Conditions
4328
- </span>
4329
- </a>
4330
-
4331
- <nav class="md-nav" aria-label="Specifying Filter Conditions">
4332
- <ul class="md-nav__list">
4333
-
4334
- <li class="md-nav__item">
4335
- <a href="#multiple-values" class="md-nav__link">
4336
- <span class="md-ellipsis">
4337
- Multiple Values
4338
- </span>
4339
- </a>
4340
-
4341
- </li>
4342
-
4343
- <li class="md-nav__item">
4344
- <a href="#single-values" class="md-nav__link">
4345
- <span class="md-ellipsis">
4346
- Single Values
4347
- </span>
4348
- </a>
4349
-
4350
- </li>
4351
-
4352
- <li class="md-nav__item">
4353
- <a href="#field-validation" class="md-nav__link">
4354
- <span class="md-ellipsis">
4355
- Field Validation
4356
- </span>
4357
- </a>
4358
-
4359
- </li>
4360
-
4361
- </ul>
4362
- </nav>
4788
+
4363
4789
 
4364
- </li>
4365
-
4366
- <li class="md-nav__item">
4367
- <a href="#managing-dynamic-groups" class="md-nav__link">
4368
- <span class="md-ellipsis">
4369
- Managing Dynamic Groups
4370
- </span>
4371
- </a>
4372
4790
 
4373
- <nav class="md-nav" aria-label="Managing Dynamic Groups">
4374
- <ul class="md-nav__list">
4375
-
4376
- <li class="md-nav__item">
4377
- <a href="#creating-a-dynamic-group" class="md-nav__link">
4378
- <span class="md-ellipsis">
4379
- Creating a Dynamic Group
4380
- </span>
4381
- </a>
4382
4791
 
4383
- </li>
4792
+
4793
+
4794
+
4795
+
4796
+
4797
+
4798
+
4799
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
4800
+
4384
4801
 
4385
- <li class="md-nav__item">
4386
- <a href="#updating-or-deleting-a-dynamic-group" class="md-nav__link">
4387
- <span class="md-ellipsis">
4388
- Updating or Deleting a Dynamic Group
4389
- </span>
4390
- </a>
4391
-
4392
- </li>
4393
4802
 
4394
- </ul>
4395
- </nav>
4396
-
4397
- </li>
4803
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_5" checked>
4398
4804
 
4399
- <li class="md-nav__item">
4400
- <a href="#managing-child-groups" class="md-nav__link">
4401
- <span class="md-ellipsis">
4402
- Managing Child Groups
4403
- </span>
4404
- </a>
4805
+
4806
+
4807
+ <div class="md-nav__link md-nav__container">
4808
+ <a href="dynamicgroup.html" class="md-nav__link md-nav__link--active">
4809
+
4405
4810
 
4406
- <nav class="md-nav" aria-label="Managing Child Groups">
4407
- <ul class="md-nav__list">
4408
-
4409
- <li class="md-nav__item">
4410
- <a href="#assigning-child-groups" class="md-nav__link">
4411
- <span class="md-ellipsis">
4412
- Assigning Child Groups
4413
- </span>
4414
- </a>
4811
+ <span class="md-ellipsis">
4812
+ Dynamic Groups
4813
+ </span>
4415
4814
 
4416
- </li>
4815
+
4816
+ </a>
4817
+
4818
+
4819
+ <label class="md-nav__link md-nav__link--active" for="__nav_2_4_5" id="__nav_2_4_5_label" tabindex="0">
4820
+ <span class="md-nav__icon md-icon"></span>
4821
+ </label>
4822
+
4823
+ </div>
4417
4824
 
4418
- <li class="md-nav__item">
4419
- <a href="#updating-or-deleting-child-groups" class="md-nav__link">
4420
- <span class="md-ellipsis">
4421
- Updating or Deleting Child Groups
4422
- </span>
4423
- </a>
4825
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_5_label" aria-expanded="true">
4826
+ <label class="md-nav__title" for="__nav_2_4_5">
4827
+ <span class="md-nav__icon md-icon"></span>
4828
+ Dynamic Groups
4829
+ </label>
4830
+ <ul class="md-nav__list" data-md-scrollfix>
4831
+
4832
+
4833
+
4424
4834
 
4425
- </li>
4426
-
4427
- </ul>
4428
- </nav>
4429
4835
 
4430
- </li>
4431
-
4432
- </ul>
4433
- </nav>
4434
4836
 
4435
- </li>
4436
-
4437
- <li class="md-nav__item">
4438
- <a href="#membership-and-caching" class="md-nav__link">
4439
- <span class="md-ellipsis">
4440
- Membership and Caching
4441
- </span>
4442
- </a>
4443
4837
 
4444
- <nav class="md-nav" aria-label="Membership and Caching">
4445
- <ul class="md-nav__list">
4838
+ <li class="md-nav__item">
4839
+ <a href="staticgroupassociation.html" class="md-nav__link">
4446
4840
 
4447
- <li class="md-nav__item">
4448
- <a href="#invalidatingrefreshing-the-cache" class="md-nav__link">
4449
- <span class="md-ellipsis">
4450
- Invalidating/Refreshing the Cache
4451
- </span>
4452
- </a>
4453
4841
 
4454
- </li>
4455
-
4456
- </ul>
4457
- </nav>
4842
+ <span class="md-ellipsis">
4843
+ Static Group Associations
4844
+ </span>
4458
4845
 
4459
- </li>
4460
-
4461
- </ul>
4846
+
4847
+ </a>
4848
+ </li>
4462
4849
 
4463
- </nav>
4850
+
4851
+
4852
+
4853
+ </ul>
4854
+ </nav>
4464
4855
 
4465
4856
  </li>
4466
4857
 
@@ -4812,6 +5203,27 @@
4812
5203
 
4813
5204
 
4814
5205
 
5206
+ <li class="md-nav__item">
5207
+ <a href="objectmetadata.html" class="md-nav__link">
5208
+
5209
+
5210
+ <span class="md-ellipsis">
5211
+ Object Metadata
5212
+ </span>
5213
+
5214
+
5215
+ </a>
5216
+ </li>
5217
+
5218
+
5219
+
5220
+
5221
+
5222
+
5223
+
5224
+
5225
+
5226
+
4815
5227
  <li class="md-nav__item">
4816
5228
  <a href="relationship.html" class="md-nav__link">
4817
5229
 
@@ -4844,7 +5256,7 @@
4844
5256
 
4845
5257
 
4846
5258
 
4847
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_15" >
5259
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_16" >
4848
5260
 
4849
5261
 
4850
5262
 
@@ -4860,14 +5272,14 @@
4860
5272
  </a>
4861
5273
 
4862
5274
 
4863
- <label class="md-nav__link " for="__nav_2_4_15" id="__nav_2_4_15_label" tabindex="0">
5275
+ <label class="md-nav__link " for="__nav_2_4_16" id="__nav_2_4_16_label" tabindex="0">
4864
5276
  <span class="md-nav__icon md-icon"></span>
4865
5277
  </label>
4866
5278
 
4867
5279
  </div>
4868
5280
 
4869
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_15_label" aria-expanded="false">
4870
- <label class="md-nav__title" for="__nav_2_4_15">
5281
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_16_label" aria-expanded="false">
5282
+ <label class="md-nav__title" for="__nav_2_4_16">
4871
5283
  <span class="md-nav__icon md-icon"></span>
4872
5284
  REST API
4873
5285
  </label>
@@ -4971,6 +5383,27 @@
4971
5383
 
4972
5384
 
4973
5385
 
5386
+ <li class="md-nav__item">
5387
+ <a href="savedview.html" class="md-nav__link">
5388
+
5389
+
5390
+ <span class="md-ellipsis">
5391
+ Saved Views
5392
+ </span>
5393
+
5394
+
5395
+ </a>
5396
+ </li>
5397
+
5398
+
5399
+
5400
+
5401
+
5402
+
5403
+
5404
+
5405
+
5406
+
4974
5407
  <li class="md-nav__item">
4975
5408
  <a href="secret.html" class="md-nav__link">
4976
5409
 
@@ -5066,10 +5499,10 @@
5066
5499
 
5067
5500
 
5068
5501
 
5069
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_21" >
5502
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4_23" >
5070
5503
 
5071
5504
 
5072
- <label class="md-nav__link" for="__nav_2_4_21" id="__nav_2_4_21_label" tabindex="0">
5505
+ <label class="md-nav__link" for="__nav_2_4_23" id="__nav_2_4_23_label" tabindex="0">
5073
5506
 
5074
5507
 
5075
5508
  <span class="md-ellipsis">
@@ -5080,8 +5513,8 @@
5080
5513
  <span class="md-nav__icon md-icon"></span>
5081
5514
  </label>
5082
5515
 
5083
- <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_21_label" aria-expanded="false">
5084
- <label class="md-nav__title" for="__nav_2_4_21">
5516
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_4_23_label" aria-expanded="false">
5517
+ <label class="md-nav__title" for="__nav_2_4_23">
5085
5518
  <span class="md-nav__icon md-icon"></span>
5086
5519
  Users
5087
5520
  </label>
@@ -7629,6 +8062,27 @@
7629
8062
 
7630
8063
 
7631
8064
 
8065
+ <li class="md-nav__item">
8066
+ <a href="../../release-notes/version-2.3.html" class="md-nav__link">
8067
+
8068
+
8069
+ <span class="md-ellipsis">
8070
+ Version 2.3
8071
+ </span>
8072
+
8073
+
8074
+ </a>
8075
+ </li>
8076
+
8077
+
8078
+
8079
+
8080
+
8081
+
8082
+
8083
+
8084
+
8085
+
7632
8086
  <li class="md-nav__item">
7633
8087
  <a href="../../release-notes/version-2.2.html" class="md-nav__link">
7634
8088
 
@@ -8206,53 +8660,71 @@
8206
8660
  <ul class="md-nav__list">
8207
8661
 
8208
8662
  <li class="md-nav__item">
8209
- <a href="#creating-dynamic-groups" class="md-nav__link">
8663
+ <a href="#creating-dynamic-groups-in-the-ui" class="md-nav__link">
8210
8664
  <span class="md-ellipsis">
8211
- Creating Dynamic Groups
8665
+ Creating Dynamic Groups in the UI
8212
8666
  </span>
8213
8667
  </a>
8214
8668
 
8215
8669
  </li>
8216
8670
 
8217
8671
  <li class="md-nav__item">
8218
- <a href="#working-with-dynamic-groups" class="md-nav__link">
8672
+ <a href="#working-with-dynamic-groups-in-the-ui" class="md-nav__link">
8219
8673
  <span class="md-ellipsis">
8220
- Working with Dynamic Groups
8674
+ Working with Dynamic Groups in the UI
8221
8675
  </span>
8222
8676
  </a>
8223
8677
 
8224
8678
  </li>
8225
8679
 
8226
- <li class="md-nav__item">
8227
- <a href="#filtering" class="md-nav__link">
8680
+ </ul>
8681
+ </nav>
8682
+
8683
+ </li>
8684
+
8685
+ <li class="md-nav__item">
8686
+ <a href="#about-membership-caching" class="md-nav__link">
8687
+ <span class="md-ellipsis">
8688
+ About Membership Caching
8689
+ </span>
8690
+ </a>
8691
+
8692
+ </li>
8693
+
8694
+ <li class="md-nav__item">
8695
+ <a href="#dynamic-group-types" class="md-nav__link">
8228
8696
  <span class="md-ellipsis">
8229
- Filtering
8697
+ Dynamic Group Types
8230
8698
  </span>
8231
8699
  </a>
8232
8700
 
8233
- <nav class="md-nav" aria-label="Filtering">
8701
+ <nav class="md-nav" aria-label="Dynamic Group Types">
8234
8702
  <ul class="md-nav__list">
8235
8703
 
8236
8704
  <li class="md-nav__item">
8237
- <a href="#basic-filtering" class="md-nav__link">
8705
+ <a href="#filter-based-dynamic-groups" class="md-nav__link">
8238
8706
  <span class="md-ellipsis">
8239
- Basic Filtering
8707
+ Filter-Based Dynamic Groups
8240
8708
  </span>
8241
8709
  </a>
8242
8710
 
8243
8711
  </li>
8244
8712
 
8245
8713
  <li class="md-nav__item">
8246
- <a href="#advanced-filtering" class="md-nav__link">
8714
+ <a href="#set-based-dynamic-groups" class="md-nav__link">
8247
8715
  <span class="md-ellipsis">
8248
- Advanced Filtering
8716
+ Set-Based Dynamic Groups
8249
8717
  </span>
8250
8718
  </a>
8251
8719
 
8252
8720
  </li>
8253
8721
 
8254
- </ul>
8255
- </nav>
8722
+ <li class="md-nav__item">
8723
+ <a href="#static-assignment-based-dynamic-groups" class="md-nav__link">
8724
+ <span class="md-ellipsis">
8725
+ Static-Assignment-Based Dynamic Groups
8726
+ </span>
8727
+ </a>
8256
8728
 
8257
8729
  </li>
8258
8730
 
@@ -8272,18 +8744,18 @@
8272
8744
  <ul class="md-nav__list">
8273
8745
 
8274
8746
  <li class="md-nav__item">
8275
- <a href="#basic-filtering-with-a-single-dynamic-group" class="md-nav__link">
8747
+ <a href="#basic-filtering-with-a-single-filter-based-dynamic-group" class="md-nav__link">
8276
8748
  <span class="md-ellipsis">
8277
- Basic Filtering with a single Dynamic Group
8749
+ Basic Filtering with a single Filter-Based Dynamic Group
8278
8750
  </span>
8279
8751
  </a>
8280
8752
 
8281
8753
  </li>
8282
8754
 
8283
8755
  <li class="md-nav__item">
8284
- <a href="#advanced-filtering-combining-two-dynamic-groups-into-a-third" class="md-nav__link">
8756
+ <a href="#advanced-filtering-defining-a-set-based-dynamic-group-to-combine-two-others" class="md-nav__link">
8285
8757
  <span class="md-ellipsis">
8286
- Advanced Filtering - Combining Two Dynamic Groups into a Third
8758
+ Advanced Filtering: Defining a Set-Based Dynamic Group to Combine Two Others
8287
8759
  </span>
8288
8760
  </a>
8289
8761
 
@@ -8413,28 +8885,28 @@
8413
8885
  </li>
8414
8886
 
8415
8887
  <li class="md-nav__item">
8416
- <a href="#managing-dynamic-groups" class="md-nav__link">
8888
+ <a href="#managing-dynamic-groups-in-the-rest-api" class="md-nav__link">
8417
8889
  <span class="md-ellipsis">
8418
- Managing Dynamic Groups
8890
+ Managing Dynamic Groups in the REST API
8419
8891
  </span>
8420
8892
  </a>
8421
8893
 
8422
- <nav class="md-nav" aria-label="Managing Dynamic Groups">
8894
+ <nav class="md-nav" aria-label="Managing Dynamic Groups in the REST API">
8423
8895
  <ul class="md-nav__list">
8424
8896
 
8425
8897
  <li class="md-nav__item">
8426
- <a href="#creating-a-dynamic-group" class="md-nav__link">
8898
+ <a href="#creating-a-dynamic-group-via-rest" class="md-nav__link">
8427
8899
  <span class="md-ellipsis">
8428
- Creating a Dynamic Group
8900
+ Creating a Dynamic Group via REST
8429
8901
  </span>
8430
8902
  </a>
8431
8903
 
8432
8904
  </li>
8433
8905
 
8434
8906
  <li class="md-nav__item">
8435
- <a href="#updating-or-deleting-a-dynamic-group" class="md-nav__link">
8907
+ <a href="#updating-or-deleting-a-dynamic-group-via-rest" class="md-nav__link">
8436
8908
  <span class="md-ellipsis">
8437
- Updating or Deleting a Dynamic Group
8909
+ Updating or Deleting a Dynamic Group via REST
8438
8910
  </span>
8439
8911
  </a>
8440
8912
 
@@ -8446,28 +8918,28 @@
8446
8918
  </li>
8447
8919
 
8448
8920
  <li class="md-nav__item">
8449
- <a href="#managing-child-groups" class="md-nav__link">
8921
+ <a href="#managing-child-groups-via-rest" class="md-nav__link">
8450
8922
  <span class="md-ellipsis">
8451
- Managing Child Groups
8923
+ Managing Child Groups via REST
8452
8924
  </span>
8453
8925
  </a>
8454
8926
 
8455
- <nav class="md-nav" aria-label="Managing Child Groups">
8927
+ <nav class="md-nav" aria-label="Managing Child Groups via REST">
8456
8928
  <ul class="md-nav__list">
8457
8929
 
8458
8930
  <li class="md-nav__item">
8459
- <a href="#assigning-child-groups" class="md-nav__link">
8931
+ <a href="#assigning-child-groups-via-rest" class="md-nav__link">
8460
8932
  <span class="md-ellipsis">
8461
- Assigning Child Groups
8933
+ Assigning Child Groups via REST
8462
8934
  </span>
8463
8935
  </a>
8464
8936
 
8465
8937
  </li>
8466
8938
 
8467
8939
  <li class="md-nav__item">
8468
- <a href="#updating-or-deleting-child-groups" class="md-nav__link">
8940
+ <a href="#updating-or-deleting-child-groups-via-rest" class="md-nav__link">
8469
8941
  <span class="md-ellipsis">
8470
- Updating or Deleting Child Groups
8942
+ Updating or Deleting Child Groups via REST
8471
8943
  </span>
8472
8944
  </a>
8473
8945
 
@@ -8484,19 +8956,37 @@
8484
8956
  </li>
8485
8957
 
8486
8958
  <li class="md-nav__item">
8487
- <a href="#membership-and-caching" class="md-nav__link">
8959
+ <a href="#dynamic-groups-and-the-python-api-django-orm" class="md-nav__link">
8488
8960
  <span class="md-ellipsis">
8489
- Membership and Caching
8961
+ Dynamic Groups and the Python API (Django ORM)
8490
8962
  </span>
8491
8963
  </a>
8492
8964
 
8493
- <nav class="md-nav" aria-label="Membership and Caching">
8965
+ <nav class="md-nav" aria-label="Dynamic Groups and the Python API (Django ORM)">
8494
8966
  <ul class="md-nav__list">
8495
8967
 
8496
8968
  <li class="md-nav__item">
8497
- <a href="#invalidatingrefreshing-the-cache" class="md-nav__link">
8969
+ <a href="#working-with-a-dynamic-groups-members" class="md-nav__link">
8970
+ <span class="md-ellipsis">
8971
+ Working with a Dynamic Group's Members
8972
+ </span>
8973
+ </a>
8974
+
8975
+ </li>
8976
+
8977
+ <li class="md-nav__item">
8978
+ <a href="#working-with-an-objects-containing-dynamic-groups" class="md-nav__link">
8979
+ <span class="md-ellipsis">
8980
+ Working with an Object's Containing Dynamic Groups
8981
+ </span>
8982
+ </a>
8983
+
8984
+ </li>
8985
+
8986
+ <li class="md-nav__item">
8987
+ <a href="#refreshing-the-cache" class="md-nav__link">
8498
8988
  <span class="md-ellipsis">
8499
- Invalidating/Refreshing the Cache
8989
+ Refreshing the Cache
8500
8990
  </span>
8501
8991
  </a>
8502
8992
 
@@ -8529,45 +9019,84 @@
8529
9019
  <details class="version-added">
8530
9020
  <summary>Added in version 1.3.0</summary>
8531
9021
  </details>
8532
- <p>Dynamic Groups provide a way to organize objects of the same Content Type by matching filters. A Dynamic Group can be used to create unique groups of objects matching a given filter, such as Devices for a specific location or set of locations. As indicated by the name, Dynamic Groups update in real time as potential member objects are created, updated, or deleted.</p>
8533
- <p>When creating a Dynamic Group, one must select a Content Type to which it is associated, for example <code>dcim.device</code>. The filtering parameters saved to the group behave as a bi-directional search query that is used to identify members of that group, and can also be used to determine from an individual object the list of Dynamic Groups to which an individual object belongs.</p>
8534
- <p>Once created the Content Type for a Dynamic Group may not be modified as this relationship is tightly-coupled to the available filtering parameters. All other fields may be updated at any time.</p>
9022
+ <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>
9023
+ <p>There are currently three ways to define the object members of a Dynamic group:</p>
9024
+ <ol>
9025
+ <li>Filter-based assignment (for example, "All Devices with Location X and Status Y")</li>
9026
+ <li>Set-based assignment from other defined groups (for example, "All devices in Group A or Group B but not Group C")</li>
9027
+ <li>Static assignment directly to the group (for example, "Device XYZ01, Device XYZ02, and Device XYZ04")</li>
9028
+ </ol>
9029
+ <details class="version-added">
9030
+ <summary>Added in version 1.4.0 — Set-based group assignment</summary>
9031
+ <p>Support for set-based assignment to groups was added.</p>
9032
+ </details>
9033
+ <details class="version-added">
9034
+ <summary>Added in version 2.3.0 — Static group assignment</summary>
9035
+ <p>Support for static assignment to groups was added, and the distinction between filter-based and set-based assignment was formally established.</p>
9036
+ </details>
9037
+ <p>The members of each Dynamic Group are cached and tracked by <a href="staticgroupassociation.html">Static Group Association</a> database records.</p>
8535
9038
  <h2 id="introduction">Introduction<a class="headerlink" href="#introduction" title="Permanent link">&para;</a></h2>
8536
- <h3 id="creating-dynamic-groups">Creating Dynamic Groups<a class="headerlink" href="#creating-dynamic-groups" title="Permanent link">&para;</a></h3>
8537
- <p>Dynamic Groups can be created through the UI under <em>Organization &gt; Dynamic Groups</em> and clicking the "Add" button, or through the REST API.</p>
8538
- <p>Each Dynamic Group must have a human-readable <strong>Name</strong> string, e.g. <code>devices-location-ams01</code>. You must select a <strong>Content Type</strong> for the group that determines the kind of objects that can be members of the group and the corresponding filtering parameters available. Finally, you may also assign an optional human-friendly <strong>Description</strong> (e.g. "Devices in location AMS01").</p>
8539
- <p>Once a new Dynamic Group is created, the group can be configured by clicking the "Edit" button to specify <strong>Filter Fields</strong> or <strong>Child Groups</strong> to use to narrow down the group's member objects. More on this below.</p>
9039
+ <h3 id="creating-dynamic-groups-in-the-ui">Creating Dynamic Groups in the UI<a class="headerlink" href="#creating-dynamic-groups-in-the-ui" title="Permanent link">&para;</a></h3>
9040
+ <p>Dynamic Groups can be created through the UI under <em>Organization &gt; Groups &gt; Dynamic Groups</em> and clicking the "Add" button.</p>
9041
+ <p>When creating a Dynamic Group, you must provide a unique <strong>Name</strong> for the group, select an <strong>Object Type</strong> (also known as content-type) of the objects that it will contain as members, for example <code>dcim.device</code>, and also select a <strong>Group Type</strong>, specifying which of the supported member assignment patterns will apply to this group. (Any given Dynamic Group can only use one such pattern; mixing assignment types within a single group is not permitted at this time.) You can also optionally provide a <strong>Description</strong> for the group, select a <a href="../core-data-model/tenancy/tenant.html"><strong>Tenant</strong></a> that the group applies to, and/or apply <a href="tag.html"><strong>Tags</strong></a> to it.</p>
9042
+ <details class="version-added">
9043
+ <summary>Added in version 2.3.0 — Tenant and tags</summary>
9044
+ <p>Support for assigning a tenant and/or tags to a Dynamic Group was added.</p>
9045
+ </details>
8540
9046
  <div class="admonition warning">
8541
9047
  <p class="admonition-title">Warning</p>
8542
- <p>The content type of a Dynamic Group cannot be modified once created, so take care in selecting this initially. This is intended to prevent the possibility of inconsistent data and enforces the importance of thinking about the data model when defining a new Dynamic Group.</p>
9048
+ <p>After initial creation, the Content Type for a Dynamic Group may not be modified, as doing so would invalidate the filter, set definition, or static assignments of members for this group. Similarly, the Group Type also generally may not be modified, except in a few specific cases that are permitted for backwards compatibility with the behavior of Dynamic Groups before an explicit Group Type field was added to the model. All other fields may be updated at any time.</p>
8543
9049
  </div>
8544
- <h3 id="working-with-dynamic-groups">Working with Dynamic Groups<a class="headerlink" href="#working-with-dynamic-groups" title="Permanent link">&para;</a></h3>
8545
- <p>Once created and configured, Dynamic Groups can be accessed from the primary Dynamic Groups landing page in the web interface under the <em>Organization &gt; Dynamic Groups</em> menu. From there you may view the list of available groups, search or filter the list, view or edit an individual group, or bulk delete groups. Additionally if a group's filter has matching members, the number of members may be clicked to take you to the list of members for that dynamic group containing those objects.</p>
9050
+ <p>Once a new Dynamic Group is created, the group membership can be configured by clicking the "Edit" button to specify <strong>Filter Fields</strong> or <strong>Child Groups</strong> as appropriate to the Group Type, or, for static membership, by navigating to the object list view and selecting the objects to add to the group. More on these options below.</p>
9051
+ <h3 id="working-with-dynamic-groups-in-the-ui">Working with Dynamic Groups in the UI<a class="headerlink" href="#working-with-dynamic-groups-in-the-ui" title="Permanent link">&para;</a></h3>
9052
+ <p>Once created and configured, Dynamic Groups can be accessed from the primary Dynamic Groups landing page in the web interface under the <em>Organization &gt; Groups &gt; Dynamic Groups</em> menu. From there you may view the list of available groups, search or filter the list, view or edit an individual group, or bulk delete groups. Additionally if a group has any members, you can click on the members count in the Dynamic Groups list view to display the full list of members for that Dynamic Group.</p>
8546
9053
  <p>Dynamic Groups cannot be imported nor can they be updated in bulk, as these operations would be complex and do not make sense in most cases.</p>
8547
9054
  <p>From an individual object's detail page, if it is a member of any groups, a "Dynamic Groups" tab will display in the navigation tabs. Clicking that tab will display all Dynamic Groups of which this object is a member.</p>
8548
- <h3 id="filtering">Filtering<a class="headerlink" href="#filtering" title="Permanent link">&para;</a></h3>
8549
- <p>Dynamic Group filtering is powered by <strong>FilterSet</strong> objects underneath the hood. Basic filtering is performed using the <code>filter</code> that is defined on a given Dynamic Group. Advanced filtering is performed by aggregating filters from multiple nested Dynamic Groups to form a combined parent Dynamic Group, which will be explained later in this document.</p>
8550
- <p>An object is considered to be a member of a Dynamic Group if it is of the same Content Type and it is not excluded by way of any of the filter criteria specified for that group. By default, a freshly created group has an empty filter (<code>{}</code>), which will include all objects of the matching Content Type, just as a default list view of those objects would display prior to any filter fields being filled in the web UI.</p>
9055
+ <h2 id="about-membership-caching">About Membership Caching<a class="headerlink" href="#about-membership-caching" title="Permanent link">&para;</a></h2>
9056
+ <p>Since looking up the members of a filter-based or set-based Dynamic Group can potentially involve an expensive set of database queries depending on the complexity of the group definition, Nautobot internally caches the members of these group types using the same <a href="staticgroupassociation.html">Static Group Association</a> database table that also records the members of statically-defined Dynamic Groups. In particular, this implementation greatly speeds up the "reverse lookup" pattern where, given an individual object, the user needs to identify all Dynamic Groups that it is a member of.</p>
9057
+ <p>Creating, updating, or deleting a Dynamic Group will automatically refresh the cache with the new membership information for this group, as will viewing the "detail view" of any given Dynamic Group.</p>
9058
+ <p>If you need to refresh the membership cache for all Dynamic Groups, you can do so by running the management command <code>nautobot-server refresh_dynamic_group_member_caches</code>. This will clear and repopulate the cache for all Dynamic Groups.</p>
9059
+ <p>You can also refresh the cache for one or all Dynamic Groups by running the <code>Refresh Dynamic Group Caches</code> system <a href="jobs/index.html">Job</a>. You may find it useful to define a schedule for this job such that it automatically refreshes these caches periodically, such as every 15 minutes or every day, depending on your needs.</p>
9060
+ <div class="admonition warning">
9061
+ <p class="admonition-title">Warning</p>
9062
+ <p>Creating or updating other objects (candidate group members and/or objects that are referenced by a Dynamic Group's filters) will <strong>not</strong> automatically refresh these caches.</p>
9063
+ </div>
9064
+ <h2 id="dynamic-group-types">Dynamic Group Types<a class="headerlink" href="#dynamic-group-types" title="Permanent link">&para;</a></h2>
9065
+ <h3 id="filter-based-dynamic-groups">Filter-Based Dynamic Groups<a class="headerlink" href="#filter-based-dynamic-groups" title="Permanent link">&para;</a></h3>
9066
+ <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>
9067
+ <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>
8551
9068
  <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>
8552
9069
  <details class="version-changed">
8553
- <summary>Changed in version 1.4.0</summary>
9070
+ <summary>Changed in version 1.4.0 — Change in empty filter behavior</summary>
8554
9071
  <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>
8555
9072
  <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>
8556
9073
  </details>
8557
- <h4 id="basic-filtering">Basic Filtering<a class="headerlink" href="#basic-filtering" title="Permanent link">&para;</a></h4>
8558
- <p>When editing a Dynamic Group, under the <strong>Filter Options</strong> section, you will find a <strong>Filter Fields</strong> tab that allows one to specify 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>
8559
- <h4 id="advanced-filtering">Advanced Filtering<a class="headerlink" href="#advanced-filtering" title="Permanent link">&para;</a></h4>
9074
+ <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>
9075
+ <h3 id="set-based-dynamic-groups">Set-Based Dynamic Groups<a class="headerlink" href="#set-based-dynamic-groups" title="Permanent link">&para;</a></h3>
8560
9076
  <details class="version-added">
8561
9077
  <summary>Added in version 1.4.0</summary>
8562
9078
  </details>
8563
- <p>Advanced filtering is performed using nested Dynamic Group memberships.</p>
8564
- <p>An object is considered a member of an advanced Dynamic Group if it matches the aggregated filter criteria across all descendant groups.</p>
8565
- <p>When editing a Dynamic Group, under the <strong>Filter Options</strong> section, you will find a <strong>Child Groups</strong> tab that allows one to make other Dynamic Groups of the same Content Type children of the parent group.</p>
9079
+ <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>
9080
+ <div class="admonition tip">
9081
+ <p class="admonition-title">Tip</p>
9082
+ <p>At this time, a set-based Dynamic Group may include filter-based Dynamic Groups and other set-based Dynamic Groups in its members definition, but set-based Dynamic Groups <em>may not</em> currently include static-assignment-based Dynamic Groups. This restriction may be removed in a future Nautobot release.</p>
9083
+ </div>
9084
+ <p>An object is considered a member of an set-based Dynamic Group if it matches the aggregated filter criteria derived from the "child" or "descendant" groups included in this group definition. The immediate descendants of a Dynamic Group are accessible through its <code>.children</code> attribute, but if the children are also set-based Dynamic Groups, then they may have their own descendants as well, and so forth. The many-to-many mapping of "parent" to "child" Dynamic Groups is implemented via a "through table" of <code>DynamicGroupMembership</code> records.</p>
9085
+ <div class="admonition info">
9086
+ <p class="admonition-title">Info</p>
9087
+ <p>The name "Dynamic Group Membership" is potentially confusing -- it does <em>not</em> describe the member objects (devices, IP addresses, etc.) of a Dynamic Group (that's the "Static Group Association" table, described below, used for static-assignment-based groups and caching); rather, this table defines the association between each set-based Dynamic Group and the other Dynamic Groups that are its "children".</p>
9088
+ </div>
9089
+ <p>When editing a set-based Dynamic Group, under the <strong>Filter Options</strong> section, you will find a <strong>Child Groups</strong> tab that allows you to select other Dynamic Groups of the same Content Type to be "children" of this "parent" group and how they will be used to select or exclude candidate objects from the "parent" group's members.</p>
8566
9090
  <p><img alt="Child Groups" src="../../media/models/dynamicgroup_filtering_01.png" /></p>
9091
+ <h3 id="static-assignment-based-dynamic-groups">Static-Assignment-Based Dynamic Groups<a class="headerlink" href="#static-assignment-based-dynamic-groups" title="Permanent link">&para;</a></h3>
9092
+ <details class="version-added">
9093
+ <summary>Added in version 2.3.0</summary>
9094
+ </details>
9095
+ <p>Unlike the other types of Dynamic Groups, the members of a static-assignment-based Dynamic Group are not automatically derived by Nautobot, but instead are each explicitly assigned to such a group. Each association of a given object into a given static-assignment-based Dynamic Group is recorded by a <a href="staticgroupassociation.html">Static Group Association</a> database record. Individual objects can be associated to these Dynamic Groups in the object's create/edit form, but in most cases it's easier and quicker to bulk-update a set of objects from their appropriate list/table view via the "Update Group Assignment" button.</p>
8567
9096
  <h2 id="example-workflow">Example Workflow<a class="headerlink" href="#example-workflow" title="Permanent link">&para;</a></h2>
8568
9097
  <p>Dynamic Groups are a complex topic and are perhaps best understood through a series of worked examples.</p>
8569
- <h3 id="basic-filtering-with-a-single-dynamic-group">Basic Filtering with a single Dynamic Group<a class="headerlink" href="#basic-filtering-with-a-single-dynamic-group" title="Permanent link">&para;</a></h3>
8570
- <p>Let's say you want to create a Dynamic Group that contains all production Devices at your first two Locations. You can create a Dynamic Group called "Devices at Locations A and B" for Content Type <code>dcim | device</code>, then edit it and set the <strong>Filter Fields</strong> to match:</p>
9098
+ <h3 id="basic-filtering-with-a-single-filter-based-dynamic-group">Basic Filtering with a single Filter-Based Dynamic Group<a class="headerlink" href="#basic-filtering-with-a-single-filter-based-dynamic-group" title="Permanent link">&para;</a></h3>
9099
+ <p>Let's say you want to create a Dynamic Group that contains all production Devices at your first two Locations. You can create a Dynamic Group named "Devices at Locations A and B", for Content Type <code>dcim | device</code>, with Group Type "Filter-based membership", then edit it and set the <strong>Filter Fields</strong> to match:</p>
8571
9100
  <ol>
8572
9101
  <li>a Location of either "AMS01" or "BKK01"</li>
8573
9102
  <li>a Status of "Active" or "Offline"</li>
@@ -8589,7 +9118,7 @@
8589
9118
  <p class="admonition-title">Note</p>
8590
9119
  <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>
8591
9120
  </div>
8592
- <h3 id="advanced-filtering-combining-two-dynamic-groups-into-a-third">Advanced Filtering - Combining Two Dynamic Groups into a Third<a class="headerlink" href="#advanced-filtering-combining-two-dynamic-groups-into-a-third" title="Permanent link">&para;</a></h3>
9121
+ <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>
8593
9122
  <details class="version-added">
8594
9123
  <summary>Added in version 1.4.0</summary>
8595
9124
  </details>
@@ -8606,8 +9135,8 @@
8606
9135
  <a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a> )
8607
9136
  <a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a>)
8608
9137
  </code></pre></div>
8609
- <p>This logic is too complex to express directly via a single Dynamic Group, but fear not! This is what combining Dynamic Groups allows you to do.</p>
8610
- <p>First, you can create a new "Devices of Interest" group. Edit this group, and instead of specifying <strong>Filter Fields</strong>, switch to the <strong>Child Groups</strong> tab of the editor, select the operator "Include (OR)" and the group "Devices at Locations A and B", and update the group.</p>
9138
+ <p>This logic is too complex to express directly via a single Dynamic Group, but fear not! This is what combining Dynamic Groups via a set-based group allows you to do.</p>
9139
+ <p>First, create a new "Devices of Interest" group, again of Content Type "dcim | device", but this time select "Set-based membership" as the Group Type. Edit this group, and instead of specifying <strong>Filter Fields</strong>, you will instead use the <strong>Child Groups</strong> tab of the editor, select the operator "Include (OR)" and the group "Devices at Locations A and B", and update the group.</p>
8611
9140
  <p><img alt="Creating a Parent Group" src="../../media/models/dynamicgroup_workflow_advanced_1_01.png" /></p>
8612
9141
  <p>In the new group's detail view, you can see that it now contains one child group, "Devices at Locations A and B", and its members are exactly the same as those of that group. But we're not done yet!</p>
8613
9142
  <p><img alt="Resulting Parent Group" src="../../media/models/dynamicgroup_workflow_advanced_1_02.png" /></p>
@@ -8676,7 +9205,7 @@
8676
9205
  <p><img alt="Final Group Members" src="../../media/models/dynamicgroup_workflow_advanced_2_07.png" /></p>
8677
9206
  <h2 id="technical-details">Technical Details<a class="headerlink" href="#technical-details" title="Permanent link">&para;</a></h2>
8678
9207
  <h3 id="filter-generation">Filter Generation<a class="headerlink" href="#filter-generation" title="Permanent link">&para;</a></h3>
8679
- <p>Filters are always processed hiearchically from the top down starting from the parent group and descending recursively to the last nested child group in order by the <code>weight</code> value assigned to that group when it was associated to its parent.</p>
9208
+ <p>Filters are always processed hierarchically from the top down starting from the parent group and descending recursively to the last nested child group in order by the <code>weight</code> value assigned to that group when it was associated to its parent.</p>
8680
9209
  <div class="admonition note">
8681
9210
  <p class="admonition-title">Note</p>
8682
9211
  <p>For the purpose illustration, we will use "left to right" terminology since when verbally describing precedence in English, we read from left to right, so that following it will be more intuitive.</p>
@@ -8786,7 +9315,10 @@
8786
9315
  <a id="__codelineno-9-11" name="__codelineno-9-11" href="#__codelineno-9-11"></a>)
8787
9316
  </code></pre></div>
8788
9317
  <h2 id="dynamic-groups-and-the-rest-api">Dynamic Groups and the REST API<a class="headerlink" href="#dynamic-groups-and-the-rest-api" title="Permanent link">&para;</a></h2>
8789
- <p>Dynamic Groups are fully supported by the API. Two distinct endpoints are required, one each for managing Dynamic Groups and for assigning child groups using Dynamic Group Memberships.</p>
9318
+ <p>Dynamic Groups are fully supported by the API. There are several distinct endpoints for accessing different aspects of this feature</p>
9319
+ <p>The REST API endpints under <code>/api/extras/dynamic-groups/</code> are used to perform standard CRUD (Create/Retrieve/Update/Delete) operations on Dynamic Group definitions. There is also a special read-only endpoint <code>/api/extras/dynamic-groups/&lt;group UUID&gt;/members/</code> that returns a serialized list of a group's member objects; for example, for a Dynamic Group of Prefixes, this endpoint would return the list of Prefix objects contained in this group.</p>
9320
+ <p>A second set of endpoints, <code>/api/extras/dynamic-group-memberships/</code>, provides CRUD functionality for the Dynamic Group Membership through table that manages the definition of a set-based Dynamic Group.</p>
9321
+ <p>A third set of endpoints, <code>/api/extras/static-group-associations/</code>, provides CRUD functionality for the <a href="staticgroupassociation.html">Static Group Association</a> through table that manages the assignment of members to a static-membership Dynamic Group.</p>
8790
9322
  <h3 id="specifying-filter-conditions">Specifying Filter Conditions<a class="headerlink" href="#specifying-filter-conditions" title="Permanent link">&para;</a></h3>
8791
9323
  <p>Dynamic Groups are fairly straightforward however it is important to understand how the <code>filter</code> field works before digging in.</p>
8792
9324
  <p>The <code>filter</code> is a JSON field and it must be able to be used as valid query parameters for filtering objects of the corresponding Content Type.</p>
@@ -8824,16 +9356,16 @@
8824
9356
  <p>Prior to v1.4.0, any invalid field names that are not eligible for filtering objects will be discarded upon validation.</p>
8825
9357
  <p>As of v1.4.0, <a href="../administration/configuration/optional-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>
8826
9358
  </details>
8827
- <h3 id="managing-dynamic-groups">Managing Dynamic Groups<a class="headerlink" href="#managing-dynamic-groups" title="Permanent link">&para;</a></h3>
8828
- <h4 id="creating-a-dynamic-group">Creating a Dynamic Group<a class="headerlink" href="#creating-a-dynamic-group" title="Permanent link">&para;</a></h4>
9359
+ <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>
9360
+ <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>
8829
9361
  <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>
8830
9362
  <div class="admonition note">
8831
9363
  <p class="admonition-title">Note</p>
8832
- <p>The <code>filter</code> field will default to an empty filter (<code>{}</code>) if not provided.</p>
9364
+ <p>The <code>group_type</code> field defaults to <code>dynamic-filter</code> (i.e., filter-based membership) if unspecified, and similarly the <code>filter</code> field will default to an empty filter (<code>{}</code>) if not provided.</p>
8833
9365
  </div>
8834
9366
  <div class="admonition important">
8835
9367
  <p class="admonition-title">Important</p>
8836
- <p>It is not possible to perform a nested assignment of <code>children</code> when creating a new Dynamic Group. You must first create the new group and then use the endpoint for creating Dynamic Group Memberships as explained below under <a href="#assigning-child-groups">Assigning Child Groups</a>.</p>
9368
+ <p>It is not possible to perform a nested assignment of <code>children</code> when creating a new Dynamic Group. You must first create the new group and then use the endpoint for creating Dynamic Group Memberships as explained below under <a href="#assigning-child-groups-via-rest">Assigning Child Groups via REST</a>.</p>
8837
9369
  </div>
8838
9370
  <p>Request:</p>
8839
9371
  <div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="err">POST</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">groups/</span>
@@ -8842,7 +9374,7 @@
8842
9374
  <a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
8843
9375
  <a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;I am a parent group with nested children.&quot;</span><span class="p">,</span>
8844
9376
  <a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a><span class="w"> </span><span class="nt">&quot;content-type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span><span class="p">,</span>
8845
- <a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a><span class="w"> </span><span class="nt">&quot;filter&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
9377
+ <a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a><span class="w"> </span><span class="nt">&quot;group-type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dynamic-filter&quot;</span><span class="p">,</span>
8846
9378
  <a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a><span class="p">}</span>
8847
9379
  </code></pre></div>
8848
9380
  <p>Response:</p>
@@ -8853,211 +9385,152 @@
8853
9385
  <a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
8854
9386
  <a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;I am the parent group with nested children.&quot;</span><span class="p">,</span>
8855
9387
  <a id="__codelineno-15-7" name="__codelineno-15-7" href="#__codelineno-15-7"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span><span class="p">,</span>
8856
- <a id="__codelineno-15-8" name="__codelineno-15-8" href="#__codelineno-15-8"></a><span class="w"> </span><span class="nt">&quot;filter&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
8857
- <a id="__codelineno-15-9" name="__codelineno-15-9" href="#__codelineno-15-9"></a><span class="w"> </span><span class="nt">&quot;children&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
8858
- <a id="__codelineno-15-10" name="__codelineno-15-10" href="#__codelineno-15-10"></a><span class="w"> </span><span class="nt">&quot;created&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2022-07-06T20:17:04.305663Z&quot;</span><span class="p">,</span>
8859
- <a id="__codelineno-15-11" name="__codelineno-15-11" href="#__codelineno-15-11"></a><span class="w"> </span><span class="nt">&quot;last_updated&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2022-07-06T20:17:04.305663Z&quot;</span><span class="p">,</span>
8860
- <a id="__codelineno-15-12" name="__codelineno-15-12" href="#__codelineno-15-12"></a><span class="w"> </span><span class="nt">&quot;custom_fields&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
8861
- <a id="__codelineno-15-13" name="__codelineno-15-13" href="#__codelineno-15-13"></a><span class="w"> </span><span class="nt">&quot;computed_fields&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
8862
- <a id="__codelineno-15-14" name="__codelineno-15-14" href="#__codelineno-15-14"></a><span class="w"> </span><span class="nt">&quot;relationships&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span>
8863
- <a id="__codelineno-15-15" name="__codelineno-15-15" href="#__codelineno-15-15"></a><span class="p">}</span>
9388
+ <a id="__codelineno-15-8" name="__codelineno-15-8" href="#__codelineno-15-8"></a><span class="w"> </span><span class="nt">&quot;group_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dynamic-filter&quot;</span><span class="p">,</span>
9389
+ <a id="__codelineno-15-9" name="__codelineno-15-9" href="#__codelineno-15-9"></a><span class="w"> </span><span class="nt">&quot;filter&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
9390
+ <a id="__codelineno-15-10" name="__codelineno-15-10" href="#__codelineno-15-10"></a><span class="w"> </span><span class="nt">&quot;children&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
9391
+ <a id="__codelineno-15-11" name="__codelineno-15-11" href="#__codelineno-15-11"></a><span class="w"> </span><span class="nt">&quot;created&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2022-07-06T20:17:04.305663Z&quot;</span><span class="p">,</span>
9392
+ <a id="__codelineno-15-12" name="__codelineno-15-12" href="#__codelineno-15-12"></a><span class="w"> </span><span class="nt">&quot;last_updated&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2022-07-06T20:17:04.305663Z&quot;</span><span class="p">,</span>
9393
+ <a id="__codelineno-15-13" name="__codelineno-15-13" href="#__codelineno-15-13"></a><span class="w"> </span><span class="nt">&quot;custom_fields&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
9394
+ <a id="__codelineno-15-14" name="__codelineno-15-14" href="#__codelineno-15-14"></a><span class="w"> </span><span class="nt">&quot;computed_fields&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
9395
+ <a id="__codelineno-15-15" name="__codelineno-15-15" href="#__codelineno-15-15"></a><span class="w"> </span><span class="nt">&quot;relationships&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span>
9396
+ <a id="__codelineno-15-16" name="__codelineno-15-16" href="#__codelineno-15-16"></a><span class="p">}</span>
8864
9397
  </code></pre></div>
8865
- <h4 id="updating-or-deleting-a-dynamic-group">Updating or Deleting a Dynamic Group<a class="headerlink" href="#updating-or-deleting-a-dynamic-group" title="Permanent link">&para;</a></h4>
9398
+ <h4 id="updating-or-deleting-a-dynamic-group-via-rest">Updating or Deleting a Dynamic Group via REST<a class="headerlink" href="#updating-or-deleting-a-dynamic-group-via-rest" title="Permanent link">&para;</a></h4>
8866
9399
  <div class="admonition important">
8867
9400
  <p class="admonition-title">Important</p>
8868
- <p>It is not possible to perform a nested update of <code>children</code> when updating a new Dynamic Group. You must use the endpoint for creating Dynamic Group Memberships as explained below under <a href="#updating-or-deleting-child-groups">Updating or Deleting Child Groups</a>.</p>
9401
+ <p>It is not possible to perform a nested update of <code>children</code> when updating a Dynamic Group. You must use the endpoint for creating Dynamic Group Memberships as explained below under <a href="#updating-or-deleting-child-groups-via-rest">Updating or Deleting Child Groups via REST</a>.</p>
8869
9402
  </div>
8870
9403
  <p>Updating or deleting a Dynamic Group is done by sending a request to the detail endpoint for that object.</p>
8871
- <p>A Dynamic Group may be updated using <code>PUT</code> or <code>PATCH</code> (for a partial update) requests. A <code>PUT</code> request requires the entire object to be updated in place. For example if you wanted to update the <code>name</code> and the <code>description</code> together, leaving every other field with their current values as provided:</p>
8872
- <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="err">PUT</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">groups/</span><span class="p">{</span><span class="err">uuid</span><span class="p">}</span><span class="err">/</span>
9404
+ <p>A Dynamic Group may be updated using <code>PUT</code> or <code>PATCH</code> requests. As usual for REST, a <code>PUT</code> request requires the entire object to be described, while a <code>PATCH</code> allows for individual fields to be updated without affecting the other fields. For example if you wanted to update the <code>name</code> and the <code>description</code> together, leaving every other field with their current values as provided:</p>
9405
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="err">PATCH</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">groups/</span><span class="p">{</span><span class="err">uuid</span><span class="p">}</span><span class="err">/</span>
8873
9406
  <a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a>
8874
9407
  <a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a><span class="p">{</span>
8875
9408
  <a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;I am the best parent group&quot;</span><span class="p">,</span>
8876
9409
  <a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;I am the best parent group with nested children.&quot;</span><span class="p">,</span>
8877
- <a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a><span class="w"> </span><span class="nt">&quot;filter&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span>
8878
- <a id="__codelineno-16-7" name="__codelineno-16-7" href="#__codelineno-16-7"></a><span class="p">}</span>
8879
- </code></pre></div>
8880
- <p>Performing a partial update using a <code>PATCH</code> request can allow any single field to be updated without affecting the other fields. For example, if we wanted to update only the <code>name</code> for a group:</p>
8881
- <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="err">PATCH</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">group</span><span class="mi">-</span><span class="err">memberships/</span><span class="p">{</span><span class="err">uuid</span><span class="p">}</span><span class="err">/</span>
8882
- <a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a>
8883
- <a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a><span class="p">{</span>
8884
- <a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;I am the best parent group&quot;</span>
8885
- <a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a><span class="p">}</span>
9410
+ <a id="__codelineno-16-6" name="__codelineno-16-6" href="#__codelineno-16-6"></a><span class="p">}</span>
8886
9411
  </code></pre></div>
8887
9412
  <p>To delete a Dynamic Group you would send a <code>DELETE</code> request to the detail endpoint:</p>
8888
- <div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="err">DELETE</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">group</span><span class="mi">-</span><span class="err">memberships/</span><span class="p">{</span><span class="err">uuid</span><span class="p">}</span><span class="err">/</span>
9413
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="err">DELETE</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">groups/</span><span class="p">{</span><span class="err">uuid</span><span class="p">}</span><span class="err">/</span>
8889
9414
  </code></pre></div>
8890
- <h3 id="managing-child-groups">Managing Child Groups<a class="headerlink" href="#managing-child-groups" title="Permanent link">&para;</a></h3>
8891
- <p>Dynamic Groups may be nested to a parent group by creating a new Dynamic Group Membership. The act of assigning a Dynamic Group as a child to a parent group creates a Dynamic Group Membership.</p>
9415
+ <h3 id="managing-child-groups-via-rest">Managing Child Groups via REST<a class="headerlink" href="#managing-child-groups-via-rest" title="Permanent link">&para;</a></h3>
9416
+ <p>Dynamic Groups may be added to a set-based group by creating a new Dynamic Group Membership. The act of assigning a Dynamic Group as a child to a parent group creates a Dynamic Group Membership.</p>
8892
9417
  <p>This can be done at the list endpoint found at <code>/api/extras/dynamic-group-memberships/</code>.</p>
8893
- <h4 id="assigning-child-groups">Assigning Child Groups<a class="headerlink" href="#assigning-child-groups" title="Permanent link">&para;</a></h4>
9418
+ <h4 id="assigning-child-groups-via-rest">Assigning Child Groups via REST<a class="headerlink" href="#assigning-child-groups-via-rest" title="Permanent link">&para;</a></h4>
8894
9419
  <p>Dynamic Group Membership objects may be created, updated, or deleted just like any other object and are represented as <code>children</code> on the parent group.</p>
8895
9420
  <div class="admonition note">
8896
9421
  <p class="admonition-title">Note</p>
8897
9422
  <p>When interacting with the REST API, the <code>operator</code> must be provided using the string representation that is stored in the database. The human-readable operator names (such as "Exclude (AND)" for "intersection") are not accepted.</p>
8898
9423
  </div>
8899
9424
  <p>Request:</p>
8900
- <div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="err">POST</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">group</span><span class="mi">-</span><span class="err">memberships/</span>
8901
- <a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a>
8902
- <a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a><span class="p">{</span>
8903
- <a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a><span class="w"> </span><span class="nt">&quot;group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">},</span>
8904
- <a id="__codelineno-19-5" name="__codelineno-19-5" href="#__codelineno-19-5"></a><span class="w"> </span><span class="nt">&quot;parent_group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">},</span>
8905
- <a id="__codelineno-19-6" name="__codelineno-19-6" href="#__codelineno-19-6"></a><span class="w"> </span><span class="nt">&quot;operator&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;intersection&quot;</span><span class="p">,</span>
8906
- <a id="__codelineno-19-7" name="__codelineno-19-7" href="#__codelineno-19-7"></a><span class="w"> </span><span class="nt">&quot;weight&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span>
8907
- <a id="__codelineno-19-8" name="__codelineno-19-8" href="#__codelineno-19-8"></a><span class="p">}</span>
9425
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="err">POST</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">group</span><span class="mi">-</span><span class="err">memberships/</span>
9426
+ <a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a>
9427
+ <a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a><span class="p">{</span>
9428
+ <a id="__codelineno-18-4" name="__codelineno-18-4" href="#__codelineno-18-4"></a><span class="w"> </span><span class="nt">&quot;group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">},</span>
9429
+ <a id="__codelineno-18-5" name="__codelineno-18-5" href="#__codelineno-18-5"></a><span class="w"> </span><span class="nt">&quot;parent_group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">},</span>
9430
+ <a id="__codelineno-18-6" name="__codelineno-18-6" href="#__codelineno-18-6"></a><span class="w"> </span><span class="nt">&quot;operator&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;intersection&quot;</span><span class="p">,</span>
9431
+ <a id="__codelineno-18-7" name="__codelineno-18-7" href="#__codelineno-18-7"></a><span class="w"> </span><span class="nt">&quot;weight&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span>
9432
+ <a id="__codelineno-18-8" name="__codelineno-18-8" href="#__codelineno-18-8"></a><span class="p">}</span>
8908
9433
  </code></pre></div>
8909
9434
  <p>Response:</p>
8910
- <div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a><span class="p">{</span>
8911
- <a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;4c8296de-42bc-49a6-8fed-fc1b1f6b93ca&quot;</span><span class="p">,</span>
8912
- <a id="__codelineno-20-3" name="__codelineno-20-3" href="#__codelineno-20-3"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent &gt; intersection (10) &gt; first-child&quot;</span><span class="p">,</span>
8913
- <a id="__codelineno-20-4" name="__codelineno-20-4" href="#__codelineno-20-4"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-group-memberships/4c8296de-42bc-49a6-8fed-fc1b1f6b93ca/&quot;</span><span class="p">,</span>
8914
- <a id="__codelineno-20-5" name="__codelineno-20-5" href="#__codelineno-20-5"></a><span class="w"> </span><span class="nt">&quot;group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
8915
- <a id="__codelineno-20-6" name="__codelineno-20-6" href="#__codelineno-20-6"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">,</span>
8916
- <a id="__codelineno-20-7" name="__codelineno-20-7" href="#__codelineno-20-7"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;97188a74-eddd-46d8-be41-909c1ece1d43&quot;</span><span class="p">,</span>
8917
- <a id="__codelineno-20-8" name="__codelineno-20-8" href="#__codelineno-20-8"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/97188a74-eddd-46d8-be41-909c1ece1d43/&quot;</span><span class="p">,</span>
8918
- <a id="__codelineno-20-9" name="__codelineno-20-9" href="#__codelineno-20-9"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">,</span>
8919
- <a id="__codelineno-20-10" name="__codelineno-20-10" href="#__codelineno-20-10"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span>
8920
- <a id="__codelineno-20-11" name="__codelineno-20-11" href="#__codelineno-20-11"></a><span class="w"> </span><span class="p">},</span>
8921
- <a id="__codelineno-20-12" name="__codelineno-20-12" href="#__codelineno-20-12"></a><span class="w"> </span><span class="nt">&quot;parent_group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
8922
- <a id="__codelineno-20-13" name="__codelineno-20-13" href="#__codelineno-20-13"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
8923
- <a id="__codelineno-20-14" name="__codelineno-20-14" href="#__codelineno-20-14"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1f825078-b6dc-4b12-9463-be5a9189b03f&quot;</span><span class="p">,</span>
8924
- <a id="__codelineno-20-15" name="__codelineno-20-15" href="#__codelineno-20-15"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/1f825078-b6dc-4b12-9463-be5a9189b03f/&quot;</span><span class="p">,</span>
8925
- <a id="__codelineno-20-16" name="__codelineno-20-16" href="#__codelineno-20-16"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
8926
- <a id="__codelineno-20-17" name="__codelineno-20-17" href="#__codelineno-20-17"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span>
8927
- <a id="__codelineno-20-18" name="__codelineno-20-18" href="#__codelineno-20-18"></a><span class="w"> </span><span class="p">},</span>
8928
- <a id="__codelineno-20-19" name="__codelineno-20-19" href="#__codelineno-20-19"></a><span class="w"> </span><span class="nt">&quot;operator&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;intersection&quot;</span><span class="p">,</span>
8929
- <a id="__codelineno-20-20" name="__codelineno-20-20" href="#__codelineno-20-20"></a><span class="w"> </span><span class="nt">&quot;weight&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span>
8930
- <a id="__codelineno-20-21" name="__codelineno-20-21" href="#__codelineno-20-21"></a><span class="p">}</span>
9435
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="p">{</span>
9436
+ <a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;4c8296de-42bc-49a6-8fed-fc1b1f6b93ca&quot;</span><span class="p">,</span>
9437
+ <a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent &gt; intersection (10) &gt; first-child&quot;</span><span class="p">,</span>
9438
+ <a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-group-memberships/4c8296de-42bc-49a6-8fed-fc1b1f6b93ca/&quot;</span><span class="p">,</span>
9439
+ <a id="__codelineno-19-5" name="__codelineno-19-5" href="#__codelineno-19-5"></a><span class="w"> </span><span class="nt">&quot;group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
9440
+ <a id="__codelineno-19-6" name="__codelineno-19-6" href="#__codelineno-19-6"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">,</span>
9441
+ <a id="__codelineno-19-7" name="__codelineno-19-7" href="#__codelineno-19-7"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;97188a74-eddd-46d8-be41-909c1ece1d43&quot;</span><span class="p">,</span>
9442
+ <a id="__codelineno-19-8" name="__codelineno-19-8" href="#__codelineno-19-8"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/97188a74-eddd-46d8-be41-909c1ece1d43/&quot;</span><span class="p">,</span>
9443
+ <a id="__codelineno-19-9" name="__codelineno-19-9" href="#__codelineno-19-9"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">,</span>
9444
+ <a id="__codelineno-19-10" name="__codelineno-19-10" href="#__codelineno-19-10"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span>
9445
+ <a id="__codelineno-19-11" name="__codelineno-19-11" href="#__codelineno-19-11"></a><span class="w"> </span><span class="p">},</span>
9446
+ <a id="__codelineno-19-12" name="__codelineno-19-12" href="#__codelineno-19-12"></a><span class="w"> </span><span class="nt">&quot;parent_group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
9447
+ <a id="__codelineno-19-13" name="__codelineno-19-13" href="#__codelineno-19-13"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
9448
+ <a id="__codelineno-19-14" name="__codelineno-19-14" href="#__codelineno-19-14"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1f825078-b6dc-4b12-9463-be5a9189b03f&quot;</span><span class="p">,</span>
9449
+ <a id="__codelineno-19-15" name="__codelineno-19-15" href="#__codelineno-19-15"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/1f825078-b6dc-4b12-9463-be5a9189b03f/&quot;</span><span class="p">,</span>
9450
+ <a id="__codelineno-19-16" name="__codelineno-19-16" href="#__codelineno-19-16"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
9451
+ <a id="__codelineno-19-17" name="__codelineno-19-17" href="#__codelineno-19-17"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span>
9452
+ <a id="__codelineno-19-18" name="__codelineno-19-18" href="#__codelineno-19-18"></a><span class="w"> </span><span class="p">},</span>
9453
+ <a id="__codelineno-19-19" name="__codelineno-19-19" href="#__codelineno-19-19"></a><span class="w"> </span><span class="nt">&quot;operator&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;intersection&quot;</span><span class="p">,</span>
9454
+ <a id="__codelineno-19-20" name="__codelineno-19-20" href="#__codelineno-19-20"></a><span class="w"> </span><span class="nt">&quot;weight&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span>
9455
+ <a id="__codelineno-19-21" name="__codelineno-19-21" href="#__codelineno-19-21"></a><span class="p">}</span>
8931
9456
  </code></pre></div>
8932
9457
  <p>Observe that after adding this new membership object, the parent group now reflects this in its <code>children</code>:</p>
8933
- <div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a><span class="err">GET</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">groups/</span><span class="mi">1</span><span class="kc">f</span><span class="mi">825078-</span><span class="err">b</span><span class="mi">6</span><span class="err">dc</span><span class="mi">-4</span><span class="err">b</span><span class="mi">12-9463-</span><span class="err">be</span><span class="mi">5</span><span class="err">a</span><span class="mi">9189</span><span class="err">b</span><span class="mi">03</span><span class="kc">f</span><span class="err">/</span>
8934
- <a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a>
8935
- <a id="__codelineno-21-3" name="__codelineno-21-3" href="#__codelineno-21-3"></a><span class="p">{</span>
8936
- <a id="__codelineno-21-4" name="__codelineno-21-4" href="#__codelineno-21-4"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1f825078-b6dc-4b12-9463-be5a9189b03f&quot;</span><span class="p">,</span>
8937
- <a id="__codelineno-21-5" name="__codelineno-21-5" href="#__codelineno-21-5"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
8938
- <a id="__codelineno-21-6" name="__codelineno-21-6" href="#__codelineno-21-6"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/1f825078-b6dc-4b12-9463-be5a9189b03f/&quot;</span><span class="p">,</span>
8939
- <a id="__codelineno-21-7" name="__codelineno-21-7" href="#__codelineno-21-7"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
8940
- <a id="__codelineno-21-8" name="__codelineno-21-8" href="#__codelineno-21-8"></a><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
8941
- <a id="__codelineno-21-9" name="__codelineno-21-9" href="#__codelineno-21-9"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span><span class="p">,</span>
8942
- <a id="__codelineno-21-10" name="__codelineno-21-10" href="#__codelineno-21-10"></a><span class="w"> </span><span class="nt">&quot;filter&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
8943
- <a id="__codelineno-21-11" name="__codelineno-21-11" href="#__codelineno-21-11"></a><span class="w"> </span><span class="nt">&quot;children&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
8944
- <a id="__codelineno-21-12" name="__codelineno-21-12" href="#__codelineno-21-12"></a><span class="w"> </span><span class="p">{</span>
8945
- <a id="__codelineno-21-13" name="__codelineno-21-13" href="#__codelineno-21-13"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;4c8296de-42bc-49a6-8fed-fc1b1f6b93ca&quot;</span><span class="p">,</span>
8946
- <a id="__codelineno-21-14" name="__codelineno-21-14" href="#__codelineno-21-14"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent &gt; intersection (10) &gt; first-child&quot;</span><span class="p">,</span>
8947
- <a id="__codelineno-21-15" name="__codelineno-21-15" href="#__codelineno-21-15"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-group-memberships/4c8296de-42bc-49a6-8fed-fc1b1f6b93ca/&quot;</span><span class="p">,</span>
8948
- <a id="__codelineno-21-16" name="__codelineno-21-16" href="#__codelineno-21-16"></a><span class="w"> </span><span class="nt">&quot;group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
8949
- <a id="__codelineno-21-17" name="__codelineno-21-17" href="#__codelineno-21-17"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">,</span>
8950
- <a id="__codelineno-21-18" name="__codelineno-21-18" href="#__codelineno-21-18"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;97188a74-eddd-46d8-be41-909c1ece1d43&quot;</span><span class="p">,</span>
8951
- <a id="__codelineno-21-19" name="__codelineno-21-19" href="#__codelineno-21-19"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/97188a74-eddd-46d8-be41-909c1ece1d43/&quot;</span><span class="p">,</span>
8952
- <a id="__codelineno-21-20" name="__codelineno-21-20" href="#__codelineno-21-20"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">,</span>
8953
- <a id="__codelineno-21-21" name="__codelineno-21-21" href="#__codelineno-21-21"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span>
8954
- <a id="__codelineno-21-22" name="__codelineno-21-22" href="#__codelineno-21-22"></a><span class="w"> </span><span class="p">},</span>
8955
- <a id="__codelineno-21-23" name="__codelineno-21-23" href="#__codelineno-21-23"></a><span class="w"> </span><span class="nt">&quot;parent_group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
8956
- <a id="__codelineno-21-24" name="__codelineno-21-24" href="#__codelineno-21-24"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
8957
- <a id="__codelineno-21-25" name="__codelineno-21-25" href="#__codelineno-21-25"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1f825078-b6dc-4b12-9463-be5a9189b03f&quot;</span><span class="p">,</span>
8958
- <a id="__codelineno-21-26" name="__codelineno-21-26" href="#__codelineno-21-26"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/1f825078-b6dc-4b12-9463-be5a9189b03f/&quot;</span><span class="p">,</span>
8959
- <a id="__codelineno-21-27" name="__codelineno-21-27" href="#__codelineno-21-27"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
8960
- <a id="__codelineno-21-28" name="__codelineno-21-28" href="#__codelineno-21-28"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span>
8961
- <a id="__codelineno-21-29" name="__codelineno-21-29" href="#__codelineno-21-29"></a><span class="w"> </span><span class="p">},</span>
8962
- <a id="__codelineno-21-30" name="__codelineno-21-30" href="#__codelineno-21-30"></a><span class="w"> </span><span class="nt">&quot;operator&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;intersection&quot;</span><span class="p">,</span>
8963
- <a id="__codelineno-21-31" name="__codelineno-21-31" href="#__codelineno-21-31"></a><span class="w"> </span><span class="nt">&quot;weight&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span>
8964
- <a id="__codelineno-21-32" name="__codelineno-21-32" href="#__codelineno-21-32"></a><span class="w"> </span><span class="p">}</span>
8965
- <a id="__codelineno-21-33" name="__codelineno-21-33" href="#__codelineno-21-33"></a><span class="w"> </span><span class="p">],</span>
8966
- <a id="__codelineno-21-34" name="__codelineno-21-34" href="#__codelineno-21-34"></a><span class="w"> </span><span class="nt">&quot;created&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2022-07-15T00:00:00Z&quot;</span><span class="p">,</span>
8967
- <a id="__codelineno-21-35" name="__codelineno-21-35" href="#__codelineno-21-35"></a><span class="w"> </span><span class="nt">&quot;last_updated&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2022-07-15T16:50:45.453965Z&quot;</span><span class="p">,</span>
8968
- <a id="__codelineno-21-36" name="__codelineno-21-36" href="#__codelineno-21-36"></a><span class="w"> </span><span class="nt">&quot;notes_url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/1f825078-b6dc-4b12-9463-be5a9189b03f/notes/&quot;</span><span class="p">,</span>
8969
- <a id="__codelineno-21-37" name="__codelineno-21-37" href="#__codelineno-21-37"></a><span class="w"> </span><span class="nt">&quot;custom_fields&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span>
8970
- <a id="__codelineno-21-38" name="__codelineno-21-38" href="#__codelineno-21-38"></a><span class="p">}</span>
9458
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a><span class="err">GET</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">groups/</span><span class="mi">1</span><span class="kc">f</span><span class="mi">825078-</span><span class="err">b</span><span class="mi">6</span><span class="err">dc</span><span class="mi">-4</span><span class="err">b</span><span class="mi">12-9463-</span><span class="err">be</span><span class="mi">5</span><span class="err">a</span><span class="mi">9189</span><span class="err">b</span><span class="mi">03</span><span class="kc">f</span><span class="err">/</span>
9459
+ <a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a>
9460
+ <a id="__codelineno-20-3" name="__codelineno-20-3" href="#__codelineno-20-3"></a><span class="p">{</span>
9461
+ <a id="__codelineno-20-4" name="__codelineno-20-4" href="#__codelineno-20-4"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1f825078-b6dc-4b12-9463-be5a9189b03f&quot;</span><span class="p">,</span>
9462
+ <a id="__codelineno-20-5" name="__codelineno-20-5" href="#__codelineno-20-5"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
9463
+ <a id="__codelineno-20-6" name="__codelineno-20-6" href="#__codelineno-20-6"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/1f825078-b6dc-4b12-9463-be5a9189b03f/&quot;</span><span class="p">,</span>
9464
+ <a id="__codelineno-20-7" name="__codelineno-20-7" href="#__codelineno-20-7"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
9465
+ <a id="__codelineno-20-8" name="__codelineno-20-8" href="#__codelineno-20-8"></a><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
9466
+ <a id="__codelineno-20-9" name="__codelineno-20-9" href="#__codelineno-20-9"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span><span class="p">,</span>
9467
+ <a id="__codelineno-20-10" name="__codelineno-20-10" href="#__codelineno-20-10"></a><span class="w"> </span><span class="nt">&quot;group_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dynamic-set&quot;</span><span class="p">,</span>
9468
+ <a id="__codelineno-20-11" name="__codelineno-20-11" href="#__codelineno-20-11"></a><span class="w"> </span><span class="nt">&quot;filter&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
9469
+ <a id="__codelineno-20-12" name="__codelineno-20-12" href="#__codelineno-20-12"></a><span class="w"> </span><span class="nt">&quot;children&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
9470
+ <a id="__codelineno-20-13" name="__codelineno-20-13" href="#__codelineno-20-13"></a><span class="w"> </span><span class="p">{</span>
9471
+ <a id="__codelineno-20-14" name="__codelineno-20-14" href="#__codelineno-20-14"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;4c8296de-42bc-49a6-8fed-fc1b1f6b93ca&quot;</span><span class="p">,</span>
9472
+ <a id="__codelineno-20-15" name="__codelineno-20-15" href="#__codelineno-20-15"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent &gt; intersection (10) &gt; first-child&quot;</span><span class="p">,</span>
9473
+ <a id="__codelineno-20-16" name="__codelineno-20-16" href="#__codelineno-20-16"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-group-memberships/4c8296de-42bc-49a6-8fed-fc1b1f6b93ca/&quot;</span><span class="p">,</span>
9474
+ <a id="__codelineno-20-17" name="__codelineno-20-17" href="#__codelineno-20-17"></a><span class="w"> </span><span class="nt">&quot;group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
9475
+ <a id="__codelineno-20-18" name="__codelineno-20-18" href="#__codelineno-20-18"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">,</span>
9476
+ <a id="__codelineno-20-19" name="__codelineno-20-19" href="#__codelineno-20-19"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;97188a74-eddd-46d8-be41-909c1ece1d43&quot;</span><span class="p">,</span>
9477
+ <a id="__codelineno-20-20" name="__codelineno-20-20" href="#__codelineno-20-20"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/97188a74-eddd-46d8-be41-909c1ece1d43/&quot;</span><span class="p">,</span>
9478
+ <a id="__codelineno-20-21" name="__codelineno-20-21" href="#__codelineno-20-21"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">,</span>
9479
+ <a id="__codelineno-20-22" name="__codelineno-20-22" href="#__codelineno-20-22"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span>
9480
+ <a id="__codelineno-20-23" name="__codelineno-20-23" href="#__codelineno-20-23"></a><span class="w"> </span><span class="p">},</span>
9481
+ <a id="__codelineno-20-24" name="__codelineno-20-24" href="#__codelineno-20-24"></a><span class="w"> </span><span class="nt">&quot;parent_group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
9482
+ <a id="__codelineno-20-25" name="__codelineno-20-25" href="#__codelineno-20-25"></a><span class="w"> </span><span class="nt">&quot;display&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
9483
+ <a id="__codelineno-20-26" name="__codelineno-20-26" href="#__codelineno-20-26"></a><span class="w"> </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1f825078-b6dc-4b12-9463-be5a9189b03f&quot;</span><span class="p">,</span>
9484
+ <a id="__codelineno-20-27" name="__codelineno-20-27" href="#__codelineno-20-27"></a><span class="w"> </span><span class="nt">&quot;url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/1f825078-b6dc-4b12-9463-be5a9189b03f/&quot;</span><span class="p">,</span>
9485
+ <a id="__codelineno-20-28" name="__codelineno-20-28" href="#__codelineno-20-28"></a><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">,</span>
9486
+ <a id="__codelineno-20-29" name="__codelineno-20-29" href="#__codelineno-20-29"></a><span class="w"> </span><span class="nt">&quot;content_type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;dcim.device&quot;</span>
9487
+ <a id="__codelineno-20-30" name="__codelineno-20-30" href="#__codelineno-20-30"></a><span class="w"> </span><span class="p">},</span>
9488
+ <a id="__codelineno-20-31" name="__codelineno-20-31" href="#__codelineno-20-31"></a><span class="w"> </span><span class="nt">&quot;operator&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;intersection&quot;</span><span class="p">,</span>
9489
+ <a id="__codelineno-20-32" name="__codelineno-20-32" href="#__codelineno-20-32"></a><span class="w"> </span><span class="nt">&quot;weight&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span>
9490
+ <a id="__codelineno-20-33" name="__codelineno-20-33" href="#__codelineno-20-33"></a><span class="w"> </span><span class="p">}</span>
9491
+ <a id="__codelineno-20-34" name="__codelineno-20-34" href="#__codelineno-20-34"></a><span class="w"> </span><span class="p">],</span>
9492
+ <a id="__codelineno-20-35" name="__codelineno-20-35" href="#__codelineno-20-35"></a><span class="w"> </span><span class="nt">&quot;created&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2022-07-15T00:00:00Z&quot;</span><span class="p">,</span>
9493
+ <a id="__codelineno-20-36" name="__codelineno-20-36" href="#__codelineno-20-36"></a><span class="w"> </span><span class="nt">&quot;last_updated&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2022-07-15T16:50:45.453965Z&quot;</span><span class="p">,</span>
9494
+ <a id="__codelineno-20-37" name="__codelineno-20-37" href="#__codelineno-20-37"></a><span class="w"> </span><span class="nt">&quot;notes_url&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;http://localhost:6789/api/extras/dynamic-groups/1f825078-b6dc-4b12-9463-be5a9189b03f/notes/&quot;</span><span class="p">,</span>
9495
+ <a id="__codelineno-20-38" name="__codelineno-20-38" href="#__codelineno-20-38"></a><span class="w"> </span><span class="nt">&quot;custom_fields&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span>
9496
+ <a id="__codelineno-20-39" name="__codelineno-20-39" href="#__codelineno-20-39"></a><span class="p">}</span>
8971
9497
  </code></pre></div>
8972
- <h4 id="updating-or-deleting-child-groups">Updating or Deleting Child Groups<a class="headerlink" href="#updating-or-deleting-child-groups" title="Permanent link">&para;</a></h4>
9498
+ <h4 id="updating-or-deleting-child-groups-via-rest">Updating or Deleting Child Groups via REST<a class="headerlink" href="#updating-or-deleting-child-groups-via-rest" title="Permanent link">&para;</a></h4>
8973
9499
  <p>Updating or deleting Dynamic Group Membership is done by sending a request to the detail endpoint for that membership object.</p>
8974
- <p>A Dynamic Group Membership may be updated using <code>PUT</code> or <code>PATCH</code> (for a partial update) requests. A <code>PUT</code> request requires the entire object to be updated in place. For example if you wanted to update the <code>operator</code> and the <code>weight</code> together,leaving every other field with their current values as provided:</p>
8975
- <div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a><span class="err">PUT</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">group</span><span class="mi">-</span><span class="err">memberships/</span><span class="p">{</span><span class="err">uuid</span><span class="p">}</span><span class="err">/</span>
8976
- <a id="__codelineno-22-2" name="__codelineno-22-2" href="#__codelineno-22-2"></a>
8977
- <a id="__codelineno-22-3" name="__codelineno-22-3" href="#__codelineno-22-3"></a><span class="p">{</span>
8978
- <a id="__codelineno-22-4" name="__codelineno-22-4" href="#__codelineno-22-4"></a><span class="w"> </span><span class="nt">&quot;group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;first-child&quot;</span><span class="p">},</span>
8979
- <a id="__codelineno-22-5" name="__codelineno-22-5" href="#__codelineno-22-5"></a><span class="w"> </span><span class="nt">&quot;parent_group&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;parent&quot;</span><span class="p">},</span>
8980
- <a id="__codelineno-22-6" name="__codelineno-22-6" href="#__codelineno-22-6"></a><span class="w"> </span><span class="nt">&quot;operator&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;difference&quot;</span><span class="p">,</span>
8981
- <a id="__codelineno-22-7" name="__codelineno-22-7" href="#__codelineno-22-7"></a><span class="w"> </span><span class="nt">&quot;weight&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span>
8982
- <a id="__codelineno-22-8" name="__codelineno-22-8" href="#__codelineno-22-8"></a><span class="p">}</span>
8983
- </code></pre></div>
8984
- <p>Performing a partial update using a <code>PATCH</code> request can allow any single field to be updated without affecting the other fields. For example, if we only wanted to update the <code>weight</code> for a membership:</p>
8985
- <div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a><span class="err">PATCH</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">group</span><span class="mi">-</span><span class="err">memberships/</span><span class="p">{</span><span class="err">uuid</span><span class="p">}</span><span class="err">/</span>
8986
- <a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a>
8987
- <a id="__codelineno-23-3" name="__codelineno-23-3" href="#__codelineno-23-3"></a><span class="p">{</span>
8988
- <a id="__codelineno-23-4" name="__codelineno-23-4" href="#__codelineno-23-4"></a><span class="w"> </span><span class="nt">&quot;weight&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">15</span>
8989
- <a id="__codelineno-23-5" name="__codelineno-23-5" href="#__codelineno-23-5"></a><span class="p">}</span>
9500
+ <p>A Dynamic Group Membership may be updated using <code>PUT</code> or <code>PATCH</code> requests. Again, a <code>PUT</code> request requires the entire object to be described, while performing a partial update using a <code>PATCH</code> request can allow any single field to be updated without affecting the other fields. For example, if we only wanted to update the <code>weight</code> for a membership:</p>
9501
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a><span class="err">PATCH</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">group</span><span class="mi">-</span><span class="err">memberships/</span><span class="p">{</span><span class="err">uuid</span><span class="p">}</span><span class="err">/</span>
9502
+ <a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a>
9503
+ <a id="__codelineno-21-3" name="__codelineno-21-3" href="#__codelineno-21-3"></a><span class="p">{</span>
9504
+ <a id="__codelineno-21-4" name="__codelineno-21-4" href="#__codelineno-21-4"></a><span class="w"> </span><span class="nt">&quot;weight&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">15</span>
9505
+ <a id="__codelineno-21-5" name="__codelineno-21-5" href="#__codelineno-21-5"></a><span class="p">}</span>
8990
9506
  </code></pre></div>
8991
9507
  <p>To delete a Dynamic Group Membership you would send a <code>DELETE</code> request to the detail endpoint:</p>
8992
- <div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a><span class="err">DELETE</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">group</span><span class="mi">-</span><span class="err">memberships/</span><span class="p">{</span><span class="err">uuid</span><span class="p">}</span><span class="err">/</span>
8993
- </code></pre></div>
8994
- <h2 id="membership-and-caching">Membership and Caching<a class="headerlink" href="#membership-and-caching" title="Permanent link">&para;</a></h2>
8995
- <p>Since looking up the members of a Dynamic Group can be a very expensive operation, Nautobot caches the results of these lookups for a configurable amount of time. By default this cache is disabled. You can change this default value by changing the <code>DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT</code> in the administration panel. This value is in seconds.</p>
8996
- <p>Creating, updating, or deleting a Dynamic Group will automatically invalidate the cache for that group. This means that the next time the group is evaluated, the cache will be refreshed with the new membership information.</p>
8997
- <p>This greatly speeds up the reverse association of any object to any Dynamic Group(s) to which it may be associated.</p>
8998
- <p>A Dynamic Group object in the ORM exposes two (2) properties for retrieving the members of that group:</p>
8999
- <ul>
9000
- <li><code>members</code> - The evaluated QuerySet defined by the Dynamic Group and it's potential child groups. This will always perform database queries.</li>
9001
- <li><code>members_cached</code> - A cached instance of <code>members.all()</code>. This will only perform database queries if the cache is expired. You can continue to perform <code>.filter()</code> and other QuerySet operations but this will incur additional database queries.</li>
9002
- </ul>
9003
- <p>Additionally, a Dynamic Group has the following methods for working with group membership and caching:</p>
9004
- <ul>
9005
- <li><code>update_cached_members</code> - A way of forcing an update to the cached members of a Dynamic Group. This will always perform database queries. It will also return the updated <code>members_cached</code> property.</li>
9006
- <li><code>has_member</code> - A way of checking if an object is a member of a Dynamic Group. The arguments are:<ul>
9007
- <li><code>obj</code> - An instance of an object to check if it is a member of the given group.</li>
9008
- <li><code>use_cache</code> - A boolean value to choose whether to use the cached member list (<code>use_cache=True</code>) or force the database query (<code>use_cache=False</code>, the default). This is a handy way to have Nautobot perform the ideal membership check.<ul>
9009
- <li><code>DynamicGroup.members_cached.filter(pk=obj.pk).exists()</code> will re-perform a database query, where <code>DynamicGroup.has_member(obj, use_cache=False)</code> will perform <code>obj in list(DyamicGroup.members_cached)</code>, performing no additional database queries.</li>
9010
- <li>In contrast <code>DynamicGroup.members.filter(pk=obj.pk).exists()</code> will always a database query but a much faster one as opposed to<code>obj in list(DyamicGroup.members)</code>.</li>
9011
- </ul>
9012
- </li>
9013
- </ul>
9014
- </li>
9015
- </ul>
9016
- <p>A model instance that supports Dynamic Groups will expose the following properties:</p>
9017
- <ul>
9018
- <li><code>dynamic_groups</code> - A QuerySet of <code>DynamicGroup</code> objects; performs the most database queries.<ul>
9019
- <li>Iterates over all Dynamic Groups that are applicable to the instance's content type, resulting in a list (what is available as <code>dynamic_groups_list</code>) of applicable Dynamic Groups.</li>
9020
- <li>A final query (<code>DynamicGroup.objects.filter(pk__in=dynamic_groups_list)</code>) is necessary to retrieve a QuerySet of <code>DynamicGroup</code> objects.</li>
9021
- <li>Always performs <code>N+1</code> queries where <code>N</code> is the number of Dynamic Groups that are applicable to the instance's content type</li>
9022
- <li>Evaluation of <code>instance_1.dynamic_groups</code> adds no benefit to <code>instance_2.dynamic_groups</code>: each instance will perform <code>N+1</code> queries.</li>
9023
- </ul>
9024
- </li>
9025
- <li><code>dynamic_groups_cached</code> - A QuerySet of <code>DynamicGroup</code> objects; uses cached member list if available. Ideal for most use cases.<ul>
9026
- <li>Uses cached member lists for each Dynamic Group that is applicable to the instance's content type. Membership check returns a list (what is available as <code>dynamic_groups_list_cached</code>) of applicable Dynamic Groups.</li>
9027
- <li>A query (<code>DynamicGroup.objects.filter(pk__in=dynamic_groups_list_cached)</code>) is necessary to retrieve a QuerySet of <code>DynamicGroup</code> objects.</li>
9028
- <li>Ideal for most use cases, performing only <code>1</code> query if membership lists are cached.</li>
9029
- <li>Evaluation of <code>instance_1.dynamic_groups_cached</code> benefits <code>instance_2.dynamic_groups_cached</code> as all dynamic group membership lists are cached: <code>instance_1.dynamic_groups_cached</code> may perform <code>N+1</code> queries, but <code>instance_2.dynamic_groups_cached</code> will perform <code>1</code> query.</li>
9030
- </ul>
9031
- </li>
9032
- <li><code>dynamic_groups_list</code> - List of membership to <code>DynamicGroup</code> objects; performs one less database query than <code>dynamic_groups</code>.<ul>
9033
- <li>The internal list used by <code>dynamic_groups</code> to retrieve a QuerySet of <code>DynamicGroup</code> objects, but saves the final query.</li>
9034
- <li>Beneficial if you don't need QuerySet instance of <code>DynamicGroup</code> objects, but want to use uncached membership lists on a large amount of objects.</li>
9035
- <li>Always performs <code>N</code> queries where <code>N</code> is the number of Dynamic Groups that are applicable to the instance's content type</li>
9036
- </ul>
9037
- </li>
9038
- <li><code>dynamic_groups_list_cached</code> - List of membership to <code>DynamicGroup</code> objects; uses cached member list if available. Performs no database queries in optimal conditions.<ul>
9039
- <li>The internal list used by <code>dynamic_groups_cached</code> to retrieve a QuerySet of <code>DynamicGroup</code> objects, but saves the final query.</li>
9040
- <li>The most optimal way to retrieve a list of <code>DynamicGroup</code> objects for an instance: Worst case <code>instance_1.dynamic_groups_list_cached</code> will perform <code>N</code> queries, but <code>instance_2.dynamic_groups_list_cached</code> will perform <code>0</code> queries.</li>
9041
- </ul>
9042
- </li>
9043
- </ul>
9044
- <h3 id="invalidatingrefreshing-the-cache">Invalidating/Refreshing the Cache<a class="headerlink" href="#invalidatingrefreshing-the-cache" title="Permanent link">&para;</a></h3>
9045
- <p>If you need to invalidate the membership cache for a Dynamic Group, you can do so by running the management command: <code>nautobot-server refresh_dynamic_group_member_caches</code>. This will invalidate the cache for all Dynamic Groups.</p>
9046
- <p>You can also create a <code>Job</code> to run periodically to refresh the cache for particular Dynamic Groups and running on a schedule:</p>
9047
- <div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a><span class="kn">from</span> <span class="nn">nautobot.extras.jobs</span> <span class="kn">import</span> <span class="n">Job</span><span class="p">,</span> <span class="n">ObjectVar</span>
9048
- <a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a><span class="kn">from</span> <span class="nn">nautobot.extras.models</span> <span class="kn">import</span> <span class="n">DynamicGroup</span>
9049
- <a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a>
9050
- <a id="__codelineno-25-4" name="__codelineno-25-4" href="#__codelineno-25-4"></a><span class="k">class</span> <span class="nc">ExampleDynamicGroupMemberCacheRefresh</span><span class="p">(</span><span class="n">Job</span><span class="p">):</span>
9051
- <a id="__codelineno-25-5" name="__codelineno-25-5" href="#__codelineno-25-5"></a> <span class="n">dynamic_group</span> <span class="o">=</span> <span class="n">ObjectVar</span><span class="p">(</span>
9052
- <a id="__codelineno-25-6" name="__codelineno-25-6" href="#__codelineno-25-6"></a> <span class="n">model</span><span class="o">=</span><span class="n">DynamicGroup</span>
9053
- <a id="__codelineno-25-7" name="__codelineno-25-7" href="#__codelineno-25-7"></a> <span class="p">)</span>
9054
- <a id="__codelineno-25-8" name="__codelineno-25-8" href="#__codelineno-25-8"></a>
9055
- <a id="__codelineno-25-9" name="__codelineno-25-9" href="#__codelineno-25-9"></a> <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
9056
- <a id="__codelineno-25-10" name="__codelineno-25-10" href="#__codelineno-25-10"></a> <span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;Update Dynamic Group Member Cache&quot;</span>
9057
- <a id="__codelineno-25-11" name="__codelineno-25-11" href="#__codelineno-25-11"></a>
9058
- <a id="__codelineno-25-12" name="__codelineno-25-12" href="#__codelineno-25-12"></a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">commit</span><span class="p">):</span>
9059
- <a id="__codelineno-25-13" name="__codelineno-25-13" href="#__codelineno-25-13"></a> <span class="n">DynamicGroup</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">data</span><span class="p">[</span><span class="s1">&#39;dynamic_group&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">update_cached_members</span><span class="p">()</span>
9508
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a><span class="err">DELETE</span><span class="w"> </span><span class="err">/api/ex</span><span class="kc">tras</span><span class="err">/dy</span><span class="kc">na</span><span class="err">mic</span><span class="mi">-</span><span class="err">group</span><span class="mi">-</span><span class="err">memberships/</span><span class="p">{</span><span class="err">uuid</span><span class="p">}</span><span class="err">/</span>
9060
9509
  </code></pre></div>
9510
+ <h2 id="dynamic-groups-and-the-python-api-django-orm">Dynamic Groups and the Python API (Django ORM)<a class="headerlink" href="#dynamic-groups-and-the-python-api-django-orm" title="Permanent link">&para;</a></h2>
9511
+ <div class="admonition tip">
9512
+ <p class="admonition-title">Tip</p>
9513
+ <p>By default, all models inheriting from Nautobot's <code>OrganizationalModel</code> or <code>PrimaryModel</code> classes are assumed to be a viable object type for Dynamic Groups to be defined for. Individual models that do not wish to be assignable to Dynamic Groups can declare the flag <code>is_dynamic_group_associable_model = False</code> on their model definition. Conversely, models that inherit directly from Nautobot's <code>BaseModel</code> default to <em>not</em> supporting Dynamic Groups, but can include the <code>nautobot.apps.models.DynamicGroupsModelMixin</code> class as a part of their class definition in order to enable Dynamic Group support.</p>
9514
+ </div>
9515
+ <h3 id="working-with-a-dynamic-groups-members">Working with a Dynamic Group's Members<a class="headerlink" href="#working-with-a-dynamic-groups-members" title="Permanent link">&para;</a></h3>
9516
+ <p>Any Dynamic Group object in the ORM has a simple property, <code>.members</code>, for retrieving the QuerySet of (cached) members of that group. Because this data is cached in the database, even for a complex filter-based or set-based group definition, no expensive queries are required here; evaluating the QuerySet will perform a single efficient database query. You can of course perform further <code>.filter()</code> and other QuerySet operations, but (as always with QuerySets) this will incur additional database queries to re-evaluate the modified QuerySet.</p>
9517
+ <p>Additionally, a Dynamic Group has the method <code>.has_member(obj)</code> for checking whether a single given database object is a (cached) member of this group. This too is a very efficient query.</p>
9518
+ <p>Neither of the above attributes provide a way to directly bypass the cache used by this Dynamic Group; if it's important to your use case to guarantee up-to-the-minute accurate membership information, you can call a Dynamic Group's <code>.update_cached_members()</code> method, which will refresh its cache and return the resulting member QuerySet. Because refreshing the cache involves evaluating the Dynamic Group's defined filter(s), this is necessarily a more expensive database query(s) than either of the above access patterns, so it should only be done if required.</p>
9519
+ <details class="version-changed">
9520
+ <summary>Changed in version 2.3.0 — Simpler, always-on caching</summary>
9521
+ <p>In prior versions of Nautobot, <code>.members</code> did not use a cache (and so would always re-evaluate the Dynamic Group), and a separate <code>.members_cached</code> property used a configurable Redis cache to temporarily store the evaluated QuerySet. For performance reasons, the behavior of <code>.members</code> has been changed to behave as described above. <code>.members_cached</code> should be considered deprecated and will likely be removed in a future major release.</p>
9522
+ <p>Similarly, <code>.has_member(obj)</code> was previously non-cached by default, but the Redis cache could be used by invoking it as <code>.has_member(obj, use_cache=True)</code>; this too has been changed in this release, and the <code>use_cache</code> flag should be considered deprecated as well.</p>
9523
+ </details>
9524
+ <p>For static-assignment-based Dynamic groups (only!) you can update its member list by assigning directly to its <code>.members</code> or calling its <code>.add_members()</code> or <code>.remove_members()</code> methods as desired. Invoking any of these APIs for a filter-based or set-based Dynamic Group is an error and will raise an exception.</p>
9525
+ <h3 id="working-with-an-objects-containing-dynamic-groups">Working with an Object's Containing Dynamic Groups<a class="headerlink" href="#working-with-an-objects-containing-dynamic-groups" title="Permanent link">&para;</a></h3>
9526
+ <p>Conversely, any model instance that supports Dynamic Groups will expose the property <code>.dynamic_groups</code>, which returns the QuerySet of (cached) Dynamic Groups that contain the model instance. As above, there's no direct way to bypass caching; if it's critically important to your use case to have up-to-the-minute accuracy, your only recourse is to call <code>DynamicGroup.update_cached_members()</code> for <em>each and every potentially relevant DynamicGroup record</em>, which obviously has the potential to be a very expensive operation if many Dynamic Groups are defined.</p>
9527
+ <details class="version-changed">
9528
+ <summary>Changed in version 2.3.0 — Simpler, always-on caching</summary>
9529
+ <p>In prior versions of Nautobot, <code>.dynamic_groups</code> did not use a cache (and so had the potential to be a very expensive lookup every time it was accessed), and a separate <code>.dynamic_groups_cached</code> property used a configurable Redis cache to temporarily store the evaluated QuerySet. For performance reasons, the behavior of <code>.dynamic_groups</code> has been changed to behave as described above. <code>.dynamic_groups_cached</code> should be considered deprecated and will likely be removed in a future major release.</p>
9530
+ <p>Additionally, prior versions of Nautobot exposed two additional model properties, <code>.dynamic_groups_list</code> and <code>.dynamic_groups_cached</code>, which provided a (very slight) performance improvement over the previous two properties. With the introduction of the database cache implementation, these properties no longer provide any relevant performance improvement, and should be considered deprecated as well.</p>
9531
+ </details>
9532
+ <h3 id="refreshing-the-cache">Refreshing the Cache<a class="headerlink" href="#refreshing-the-cache" title="Permanent link">&para;</a></h3>
9533
+ <p>In addition to the UI, management command, and Job based mechanisms for refreshing a group's members cache, described earlier in this document, from an App or Job, you can also directly call <code>group.update_cached_members()</code> as described above.</p>
9061
9534
 
9062
9535
 
9063
9536
 
@@ -9106,13 +9579,13 @@
9106
9579
 
9107
9580
 
9108
9581
 
9109
- <a href="exporttemplate.html" class="md-footer__link md-footer__link--next" aria-label="Next: Export Templates">
9582
+ <a href="staticgroupassociation.html" class="md-footer__link md-footer__link--next" aria-label="Next: Static Group Associations">
9110
9583
  <div class="md-footer__title">
9111
9584
  <span class="md-footer__direction">
9112
9585
  Next
9113
9586
  </span>
9114
9587
  <div class="md-ellipsis">
9115
- Export Templates
9588
+ Static Group Associations
9116
9589
  </div>
9117
9590
  </div>
9118
9591
  <div class="md-footer__button md-icon">
@@ -9154,7 +9627,7 @@
9154
9627
 
9155
9628
 
9156
9629
  <a href="https://blog.networktocode.com/blog/tags/nautobot" target="_blank" rel="noopener" title="Network to Code Blog" class="md-social__link">
9157
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64zm0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0zm32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32z"/></svg>
9630
+ <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 64zm0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0zm32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32z"/></svg>
9158
9631
  </a>
9159
9632
 
9160
9633
 
@@ -9162,7 +9635,7 @@
9162
9635
 
9163
9636
 
9164
9637
  <a href="https://www.youtube.com/playlist?list=PLjA0bhxgryJ2Ts4GJMDA-tPzVWEncv4pb" target="_blank" rel="noopener" title="Nautobot Videos" class="md-social__link">
9165
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
9638
+ <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.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
9166
9639
  </a>
9167
9640
 
9168
9641
 
@@ -9170,7 +9643,7 @@
9170
9643
 
9171
9644
 
9172
9645
  <a href="https://www.networktocode.com/community/" target="_blank" rel="noopener" title="Network to Code Community" class="md-social__link">
9173
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z"/></svg>
9646
+ <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.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z"/></svg>
9174
9647
  </a>
9175
9648
 
9176
9649
 
@@ -9178,7 +9651,7 @@
9178
9651
 
9179
9652
 
9180
9653
  <a href="https://github.com/nautobot/nautobot" target="_blank" rel="noopener" title="GitHub Repo" class="md-social__link">
9181
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
9654
+ <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.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
9182
9655
  </a>
9183
9656
 
9184
9657
 
@@ -9186,7 +9659,7 @@
9186
9659
 
9187
9660
 
9188
9661
  <a href="https://twitter.com/networktocode" target="_blank" rel="noopener" title="Network to Code Twitter" class="md-social__link">
9189
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
9662
+ <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.253z"/></svg>
9190
9663
  </a>
9191
9664
 
9192
9665
  </div>