nautobot 3.0.0a3__py3-none-any.whl → 3.0.0rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. nautobot/apps/choices.py +4 -0
  2. nautobot/apps/ui.py +4 -0
  3. nautobot/apps/utils.py +8 -0
  4. nautobot/circuits/tests/integration/test_circuits_bulk_operations.py +0 -3
  5. nautobot/circuits/views.py +6 -2
  6. nautobot/core/api/serializers.py +1 -1
  7. nautobot/core/api/urls.py +1 -0
  8. nautobot/core/api/views.py +4 -0
  9. nautobot/core/choices.py +1 -1
  10. nautobot/core/cli/bootstrap_v3_to_v5.py +36 -13
  11. nautobot/core/cli/migrate_deprecated_templates.py +36 -9
  12. nautobot/core/filters.py +4 -0
  13. nautobot/core/forms/__init__.py +2 -0
  14. nautobot/core/forms/widgets.py +21 -2
  15. nautobot/core/jobs/__init__.py +56 -0
  16. nautobot/core/management/commands/generate_test_data.py +3 -3
  17. nautobot/core/models/__init__.py +11 -0
  18. nautobot/core/models/utils.py +1 -1
  19. nautobot/core/settings.py +17 -7
  20. nautobot/core/settings.yaml +4 -26
  21. nautobot/core/templates/admin/base.html +1 -2
  22. nautobot/core/templates/admin/change_list.html +9 -12
  23. nautobot/core/templates/base_django.html +1 -2
  24. nautobot/core/templates/components/panel/header_extra_content_table.html +1 -1
  25. nautobot/core/templates/components/tab/content_wrapper.html +4 -4
  26. nautobot/core/templates/echarts/echarts.html +21 -8
  27. nautobot/core/templates/generic/object_bulk_create.html +2 -2
  28. nautobot/core/templates/generic/object_bulk_delete.html +1 -1
  29. nautobot/core/templates/generic/object_bulk_edit.html +1 -1
  30. nautobot/core/templates/generic/object_bulk_import.html +1 -1
  31. nautobot/core/templates/generic/object_delete.html +1 -1
  32. nautobot/core/templates/generic/object_detail.html +1 -1
  33. nautobot/core/templates/generic/object_edit.html +1 -1
  34. nautobot/core/templates/generic/object_retrieve.html +2 -2
  35. nautobot/core/templates/graphene/graphiql.html +0 -1
  36. nautobot/core/templates/inc/footer.html +3 -1
  37. nautobot/core/templates/inc/header.html +10 -0
  38. nautobot/core/templates/inc/media.html +14 -0
  39. nautobot/core/templates/inc/nav_menu.html +1 -8
  40. nautobot/core/templates/inc/object_details_advanced_panel.html +2 -2
  41. nautobot/core/templates/nautobot_config.py.j2 +0 -6
  42. nautobot/core/templates/rest_framework/api.html +103 -2
  43. nautobot/core/templates/utilities/templatetags/filter_form_drawer.html +33 -0
  44. nautobot/core/templates/utilities/theme_preview.html +3 -0
  45. nautobot/core/templates/widgets/number_input_with_choices.html +44 -0
  46. nautobot/core/templatetags/helpers.py +24 -12
  47. nautobot/core/testing/integration.py +24 -13
  48. nautobot/core/testing/utils.py +18 -4
  49. nautobot/core/testing/views.py +104 -17
  50. nautobot/core/tests/integration/test_filters.py +48 -11
  51. nautobot/core/tests/integration/test_theme.py +22 -21
  52. nautobot/core/tests/nautobot_config.py +3 -0
  53. nautobot/core/tests/runner.py +1 -2
  54. nautobot/core/tests/test_breadcrumbs.py +21 -21
  55. nautobot/core/tests/test_jobs.py +73 -6
  56. nautobot/core/tests/test_renderers.py +59 -0
  57. nautobot/core/tests/test_settings_schema.py +1 -0
  58. nautobot/core/tests/test_templatetags_helpers.py +9 -0
  59. nautobot/core/tests/test_titles.py +0 -16
  60. nautobot/core/tests/test_ui.py +122 -3
  61. nautobot/core/tests/test_utils.py +41 -1
  62. nautobot/core/ui/breadcrumbs.py +68 -17
  63. nautobot/core/ui/bulk_buttons.py +1 -1
  64. nautobot/core/ui/choices.py +49 -65
  65. nautobot/core/ui/echarts.py +15 -20
  66. nautobot/core/ui/object_detail.py +54 -46
  67. nautobot/core/ui/titles.py +3 -6
  68. nautobot/core/urls.py +8 -8
  69. nautobot/core/utils/filtering.py +11 -1
  70. nautobot/core/utils/lookup.py +46 -0
  71. nautobot/core/views/mixins.py +31 -20
  72. nautobot/core/views/renderers.py +2 -3
  73. nautobot/data_validation/migrations/0002_data_migration_from_app.py +3 -2
  74. nautobot/dcim/api/serializers.py +3 -0
  75. nautobot/dcim/choices.py +49 -0
  76. nautobot/dcim/constants.py +7 -0
  77. nautobot/dcim/factory.py +1 -1
  78. nautobot/dcim/filters.py +13 -1
  79. nautobot/dcim/forms.py +89 -3
  80. nautobot/dcim/migrations/0075_interface_duplex_interface_speed_and_more.py +32 -0
  81. nautobot/dcim/migrations/{0075_add_deviceclusterassignment.py → 0076_add_deviceclusterassignment.py} +1 -1
  82. nautobot/dcim/migrations/{0076_device_cluster_to_clusters_data_migration.py → 0077_device_cluster_to_clusters_data_migration.py} +1 -1
  83. nautobot/dcim/migrations/{0077_remove_device_cluster.py → 0078_remove_device_cluster.py} +1 -1
  84. nautobot/dcim/migrations/{0078_remove_device_location_tenant_name_uniqueness.py → 0079_remove_device_location_tenant_name_uniqueness.py} +1 -1
  85. nautobot/dcim/migrations/{0079_device_name_data_migration.py → 0080_device_name_data_migration.py} +1 -1
  86. nautobot/dcim/migrations/0081_alter_device_device_redundancy_group_priority_and_more.py +25 -0
  87. nautobot/dcim/models/device_component_templates.py +33 -1
  88. nautobot/dcim/models/device_components.py +22 -1
  89. nautobot/dcim/models/devices.py +17 -4
  90. nautobot/dcim/tables/devices.py +15 -0
  91. nautobot/dcim/tables/devicetypes.py +8 -1
  92. nautobot/dcim/tables/racks.py +0 -2
  93. nautobot/dcim/tables/template_code.py +1 -1
  94. nautobot/dcim/templates/dcim/cable_trace.html +0 -2
  95. nautobot/dcim/templates/dcim/consoleport.html +1 -1
  96. nautobot/dcim/templates/dcim/consoleserverport.html +1 -1
  97. nautobot/dcim/templates/dcim/devicebay.html +1 -1
  98. nautobot/dcim/templates/dcim/frontport.html +1 -1
  99. nautobot/dcim/templates/dcim/inc/devicetype_component_table.html +1 -1
  100. nautobot/dcim/templates/dcim/inc/moduletype_component_table.html +1 -1
  101. nautobot/dcim/templates/dcim/inc/rack_elevation.html +1 -1
  102. nautobot/dcim/templates/dcim/interface.html +9 -1
  103. nautobot/dcim/templates/dcim/interface_edit.html +2 -0
  104. nautobot/dcim/templates/dcim/inventoryitem.html +1 -1
  105. nautobot/dcim/templates/dcim/module_consoleports.html +1 -1
  106. nautobot/dcim/templates/dcim/module_consoleserverports.html +1 -1
  107. nautobot/dcim/templates/dcim/module_frontports.html +1 -1
  108. nautobot/dcim/templates/dcim/module_interfaces.html +1 -1
  109. nautobot/dcim/templates/dcim/module_modulebays.html +1 -1
  110. nautobot/dcim/templates/dcim/module_poweroutlets.html +1 -1
  111. nautobot/dcim/templates/dcim/module_powerports.html +1 -1
  112. nautobot/dcim/templates/dcim/module_rearports.html +1 -1
  113. nautobot/dcim/templates/dcim/moduletype_list.html +2 -2
  114. nautobot/dcim/templates/dcim/poweroutlet.html +1 -1
  115. nautobot/dcim/templates/dcim/powerport.html +1 -1
  116. nautobot/dcim/templates/dcim/rack_elevation_list.html +1 -1
  117. nautobot/dcim/templates/dcim/rack_retrieve.html +0 -11
  118. nautobot/dcim/templates/dcim/rearport.html +1 -1
  119. nautobot/dcim/templates/dcim/trace/cable.html +1 -1
  120. nautobot/dcim/templates/dcim/virtualchassis_update.html +1 -1
  121. nautobot/dcim/tests/integration/test_controller.py +3 -6
  122. nautobot/dcim/tests/integration/test_controller_managed_device_group.py +1 -5
  123. nautobot/dcim/tests/integration/test_create_device.py +0 -2
  124. nautobot/dcim/tests/integration/test_device_bulk_operations.py +1 -3
  125. nautobot/dcim/tests/integration/test_fileinputpicker.py +6 -10
  126. nautobot/dcim/tests/integration/test_location_bulk_operations.py +0 -2
  127. nautobot/dcim/tests/integration/test_module_bay_position.py +3 -4
  128. nautobot/dcim/tests/test_api.py +186 -6
  129. nautobot/dcim/tests/test_filters.py +43 -1
  130. nautobot/dcim/tests/test_forms.py +110 -8
  131. nautobot/dcim/tests/test_graphql.py +44 -1
  132. nautobot/dcim/tests/test_models.py +265 -0
  133. nautobot/dcim/tests/test_tables.py +160 -0
  134. nautobot/dcim/tests/test_views.py +69 -7
  135. nautobot/dcim/views.py +232 -126
  136. nautobot/extras/api/views.py +51 -44
  137. nautobot/extras/datasources/git.py +3 -1
  138. nautobot/extras/filters.py +19 -2
  139. nautobot/extras/forms/forms.py +9 -2
  140. nautobot/extras/jobs.py +2 -0
  141. nautobot/extras/jobs_ui.py +4 -3
  142. nautobot/extras/management/__init__.py +2 -0
  143. nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +4 -1
  144. nautobot/extras/migrations/0131_configcontext_device_families.py +18 -0
  145. nautobot/extras/models/approvals.py +11 -1
  146. nautobot/extras/models/change_logging.py +4 -0
  147. nautobot/extras/models/jobs.py +1 -3
  148. nautobot/extras/models/models.py +10 -2
  149. nautobot/extras/plugins/marketplace_manifest.yml +49 -1
  150. nautobot/extras/plugins/views.py +0 -5
  151. nautobot/extras/querysets.py +8 -0
  152. nautobot/extras/tables.py +12 -0
  153. nautobot/extras/templates/django_ajax_tables/ajax_wrapper.html +2 -0
  154. nautobot/extras/templates/extras/configcontext_update.html +1 -0
  155. nautobot/extras/templates/extras/dynamicgroup_update.html +1 -1
  156. nautobot/extras/templates/extras/objectchange_retrieve.html +0 -2
  157. nautobot/extras/templates/extras/plugin_detail.html +3 -3
  158. nautobot/extras/templates/extras/secret_create.html +1 -1
  159. nautobot/extras/tests/integration/test_computedfields.py +8 -9
  160. nautobot/extras/tests/integration/test_customfields.py +1 -3
  161. nautobot/extras/tests/integration/test_dynamicgroups.py +7 -8
  162. nautobot/extras/tests/integration/test_relationships.py +0 -2
  163. nautobot/extras/tests/test_api.py +63 -0
  164. nautobot/extras/tests/test_changelog.py +24 -2
  165. nautobot/extras/tests/test_filters.py +36 -3
  166. nautobot/extras/tests/test_models.py +38 -2
  167. nautobot/extras/tests/test_utils.py +3 -4
  168. nautobot/extras/tests/test_views.py +22 -83
  169. nautobot/extras/urls.py +0 -14
  170. nautobot/extras/views.py +83 -52
  171. nautobot/ipam/filters.py +26 -0
  172. nautobot/ipam/tables.py +6 -0
  173. nautobot/ipam/templates/ipam/namespace_ip_addresses.html +1 -1
  174. nautobot/ipam/templates/ipam/namespace_prefixes.html +1 -1
  175. nautobot/ipam/templates/ipam/namespace_vrfs.html +1 -1
  176. nautobot/ipam/tests/test_filters.py +26 -1
  177. nautobot/ipam/tests/test_models.py +1 -1
  178. nautobot/ipam/views.py +9 -7
  179. nautobot/load_balancers/__init__.py +0 -0
  180. nautobot/load_balancers/api/__init__.py +1 -0
  181. nautobot/load_balancers/api/serializers.py +75 -0
  182. nautobot/load_balancers/api/urls.py +23 -0
  183. nautobot/load_balancers/api/views.py +61 -0
  184. nautobot/load_balancers/apps.py +17 -0
  185. nautobot/load_balancers/choices.py +167 -0
  186. nautobot/load_balancers/filters.py +225 -0
  187. nautobot/load_balancers/forms.py +532 -0
  188. nautobot/load_balancers/management/commands/__init__.py +0 -0
  189. nautobot/load_balancers/management/commands/generate_load_balancer_models_test_data.py +38 -0
  190. nautobot/load_balancers/migrations/0001_initial.py +465 -0
  191. nautobot/load_balancers/migrations/0002_create_default_statuses_pool_members.py +31 -0
  192. nautobot/load_balancers/migrations/__init__.py +0 -0
  193. nautobot/load_balancers/models.py +423 -0
  194. nautobot/load_balancers/navigation.py +80 -0
  195. nautobot/load_balancers/tables.py +255 -0
  196. nautobot/load_balancers/tests/__init__.py +474 -0
  197. nautobot/load_balancers/tests/test_api.py +353 -0
  198. nautobot/load_balancers/tests/test_filters.py +134 -0
  199. nautobot/load_balancers/tests/test_forms.py +266 -0
  200. nautobot/load_balancers/tests/test_models.py +195 -0
  201. nautobot/load_balancers/tests/test_views.py +229 -0
  202. nautobot/load_balancers/urls.py +17 -0
  203. nautobot/load_balancers/views.py +248 -0
  204. nautobot/project-static/dist/css/github-dark.min.css +10 -0
  205. nautobot/project-static/dist/css/github.min.css +10 -0
  206. nautobot/project-static/dist/css/nautobot.css +1 -11
  207. nautobot/project-static/dist/css/nautobot.css.map +1 -1
  208. nautobot/project-static/dist/js/libraries.js +1 -1
  209. nautobot/project-static/dist/js/libraries.js.map +1 -1
  210. nautobot/project-static/dist/js/nautobot.js +1 -1
  211. nautobot/project-static/dist/js/nautobot.js.map +1 -1
  212. nautobot/project-static/js/forms.js +13 -0
  213. nautobot/project-static/nautobot-icons/bus-globe.svg +3 -0
  214. nautobot/project-static/nautobot-icons/bus-shield-check.svg +3 -0
  215. nautobot/project-static/nautobot-icons/bus-shield.svg +3 -0
  216. nautobot/ui/package-lock.json +87 -4
  217. nautobot/ui/package.json +2 -1
  218. nautobot/ui/src/js/nautobot.js +0 -1
  219. nautobot/ui/src/js/select2.js +53 -2
  220. nautobot/ui/src/scss/nautobot.scss +51 -2
  221. nautobot/ui/webpack.config.js +13 -0
  222. nautobot/users/templates/users/preferences.html +11 -2
  223. nautobot/virtualization/filters.py +6 -1
  224. nautobot/virtualization/tests/test_filters.py +10 -1
  225. nautobot/virtualization/tests/test_models.py +1 -0
  226. nautobot/virtualization/views.py +4 -1
  227. nautobot/vpn/factory.py +25 -15
  228. nautobot/vpn/filters.py +1 -0
  229. nautobot/vpn/forms.py +1 -0
  230. nautobot/vpn/migrations/0001_initial.py +1 -1
  231. nautobot/vpn/models.py +16 -8
  232. nautobot/vpn/tables.py +5 -2
  233. nautobot/vpn/tests/test_api.py +0 -5
  234. nautobot/vpn/tests/test_forms.py +1 -2
  235. nautobot/vpn/tests/test_models.py +57 -7
  236. nautobot/vpn/tests/test_views.py +22 -3
  237. nautobot/vpn/views.py +78 -20
  238. {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/METADATA +4 -4
  239. {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/RECORD +243 -352
  240. nautobot/circuits/templates/circuits/circuit.html +0 -2
  241. nautobot/circuits/templates/circuits/circuit_edit.html +0 -2
  242. nautobot/circuits/templates/circuits/circuit_retrieve.html +0 -2
  243. nautobot/circuits/templates/circuits/circuit_update.html +0 -1
  244. nautobot/circuits/templates/circuits/circuittermination.html +0 -2
  245. nautobot/circuits/templates/circuits/circuittermination_edit.html +0 -2
  246. nautobot/circuits/templates/circuits/circuittermination_retrieve.html +0 -2
  247. nautobot/circuits/templates/circuits/circuittermination_update.html +0 -1
  248. nautobot/circuits/templates/circuits/circuittype.html +0 -2
  249. nautobot/circuits/templates/circuits/circuittype_retrieve.html +0 -2
  250. nautobot/circuits/templates/circuits/inc/circuit_termination.html +0 -85
  251. nautobot/circuits/templates/circuits/provider.html +0 -2
  252. nautobot/circuits/templates/circuits/provider_edit.html +0 -2
  253. nautobot/circuits/templates/circuits/provider_retrieve.html +0 -1
  254. nautobot/circuits/templates/circuits/provider_update.html +0 -1
  255. nautobot/circuits/templates/circuits/providernetwork.html +0 -2
  256. nautobot/circuits/templates/circuits/providernetwork_retrieve.html +0 -2
  257. nautobot/cloud/templates/cloud/cloudaccount_retrieve.html +0 -2
  258. nautobot/cloud/templates/cloud/cloudnetwork_retrieve.html +0 -2
  259. nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +0 -2
  260. nautobot/cloud/templates/cloud/cloudservice_retrieve.html +0 -2
  261. nautobot/core/templates/buttons/import.html +0 -9
  262. nautobot/data_validation/templates/data_validation/datacompliance_retrieve.html +0 -1
  263. nautobot/dcim/templates/dcim/cable.html +0 -2
  264. nautobot/dcim/templates/dcim/cable_edit.html +0 -2
  265. nautobot/dcim/templates/dcim/controller/base.html +0 -2
  266. nautobot/dcim/templates/dcim/controller_retrieve.html +0 -2
  267. nautobot/dcim/templates/dcim/controller_wirelessnetworks.html +0 -2
  268. nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +0 -2
  269. nautobot/dcim/templates/dcim/device/base.html +0 -2
  270. nautobot/dcim/templates/dcim/device/consoleports.html +0 -2
  271. nautobot/dcim/templates/dcim/device/consoleserverports.html +0 -2
  272. nautobot/dcim/templates/dcim/device/devicebays.html +0 -2
  273. nautobot/dcim/templates/dcim/device/frontports.html +0 -2
  274. nautobot/dcim/templates/dcim/device/interfaces.html +0 -2
  275. nautobot/dcim/templates/dcim/device/inventory.html +0 -2
  276. nautobot/dcim/templates/dcim/device/modulebays.html +0 -2
  277. nautobot/dcim/templates/dcim/device/poweroutlets.html +0 -2
  278. nautobot/dcim/templates/dcim/device/powerports.html +0 -2
  279. nautobot/dcim/templates/dcim/device/rearports.html +0 -2
  280. nautobot/dcim/templates/dcim/device/wireless.html +0 -2
  281. nautobot/dcim/templates/dcim/device_component.html +0 -2
  282. nautobot/dcim/templates/dcim/device_edit.html +0 -2
  283. nautobot/dcim/templates/dcim/devicefamily_retrieve.html +0 -2
  284. nautobot/dcim/templates/dcim/deviceredundancygroup_retrieve.html +0 -2
  285. nautobot/dcim/templates/dcim/devicetype.html +0 -2
  286. nautobot/dcim/templates/dcim/devicetype_edit.html +0 -2
  287. nautobot/dcim/templates/dcim/devicetype_retrieve.html +0 -2
  288. nautobot/dcim/templates/dcim/inc/device_napalm_tabs.html +0 -1
  289. nautobot/dcim/templates/dcim/interfaceredundancygroup_retrieve.html +0 -2
  290. nautobot/dcim/templates/dcim/location.html +0 -2
  291. nautobot/dcim/templates/dcim/location_edit.html +0 -2
  292. nautobot/dcim/templates/dcim/location_retrieve.html +0 -2
  293. nautobot/dcim/templates/dcim/locationtype.html +0 -2
  294. nautobot/dcim/templates/dcim/locationtype_retrieve.html +0 -2
  295. nautobot/dcim/templates/dcim/manufacturer.html +0 -2
  296. nautobot/dcim/templates/dcim/modulebay_retrieve.html +0 -1
  297. nautobot/dcim/templates/dcim/platform.html +0 -2
  298. nautobot/dcim/templates/dcim/powerfeed.html +0 -2
  299. nautobot/dcim/templates/dcim/powerfeed_retrieve.html +0 -2
  300. nautobot/dcim/templates/dcim/powerpanel.html +0 -2
  301. nautobot/dcim/templates/dcim/powerpanel_edit.html +0 -2
  302. nautobot/dcim/templates/dcim/powerpanel_retrieve.html +0 -2
  303. nautobot/dcim/templates/dcim/rack.html +0 -2
  304. nautobot/dcim/templates/dcim/rack_edit.html +0 -2
  305. nautobot/dcim/templates/dcim/rackgroup.html +0 -2
  306. nautobot/dcim/templates/dcim/rackreservation.html +0 -2
  307. nautobot/dcim/templates/dcim/softwareimagefile_retrieve.html +0 -2
  308. nautobot/dcim/templates/dcim/softwareversion_retrieve.html +0 -2
  309. nautobot/dcim/templates/dcim/virtualchassis.html +0 -2
  310. nautobot/dcim/templates/dcim/virtualchassis_add.html +0 -2
  311. nautobot/dcim/templates/dcim/virtualchassis_edit.html +0 -2
  312. nautobot/dcim/templates/dcim/virtualchassis_retrieve.html +0 -2
  313. nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +0 -2
  314. nautobot/dcim/ui.py +0 -29
  315. nautobot/extras/templates/extras/computedfield.html +0 -2
  316. nautobot/extras/templates/extras/computedfield_retrieve.html +0 -2
  317. nautobot/extras/templates/extras/configcontext.html +0 -2
  318. nautobot/extras/templates/extras/configcontext_edit.html +0 -2
  319. nautobot/extras/templates/extras/configcontext_retrieve.html +0 -2
  320. nautobot/extras/templates/extras/configcontextschema.html +0 -2
  321. nautobot/extras/templates/extras/configcontextschema_edit.html +0 -2
  322. nautobot/extras/templates/extras/contact_retrieve.html +0 -2
  323. nautobot/extras/templates/extras/customfield.html +0 -2
  324. nautobot/extras/templates/extras/customfield_edit.html +0 -2
  325. nautobot/extras/templates/extras/customfield_retrieve.html +0 -2
  326. nautobot/extras/templates/extras/customlink.html +0 -2
  327. nautobot/extras/templates/extras/dynamicgroup.html +0 -2
  328. nautobot/extras/templates/extras/dynamicgroup_edit.html +0 -2
  329. nautobot/extras/templates/extras/exporttemplate.html +0 -2
  330. nautobot/extras/templates/extras/gitrepository.html +0 -2
  331. nautobot/extras/templates/extras/gitrepository_object_edit.html +0 -2
  332. nautobot/extras/templates/extras/graphqlquery.html +0 -2
  333. nautobot/extras/templates/extras/graphqlquery_list.html +0 -1
  334. nautobot/extras/templates/extras/graphqlquery_retrieve.html +0 -2
  335. nautobot/extras/templates/extras/job_detail.html +0 -2
  336. nautobot/extras/templates/extras/jobbutton_retrieve.html +0 -2
  337. nautobot/extras/templates/extras/jobhook.html +0 -2
  338. nautobot/extras/templates/extras/jobqueue_retrieve.html +0 -2
  339. nautobot/extras/templates/extras/jobresult.html +0 -2
  340. nautobot/extras/templates/extras/metadatatype_retrieve.html +0 -2
  341. nautobot/extras/templates/extras/note.html +0 -2
  342. nautobot/extras/templates/extras/note_retrieve.html +0 -1
  343. nautobot/extras/templates/extras/object_changelog.html +0 -2
  344. nautobot/extras/templates/extras/object_notes.html +0 -2
  345. nautobot/extras/templates/extras/objectchange.html +0 -2
  346. nautobot/extras/templates/extras/objectchange_list.html +0 -3
  347. nautobot/extras/templates/extras/relationship.html +0 -1
  348. nautobot/extras/templates/extras/secret.html +0 -1
  349. nautobot/extras/templates/extras/secret_edit.html +0 -1
  350. nautobot/extras/templates/extras/secretsgroup.html +0 -2
  351. nautobot/extras/templates/extras/secretsgroup_edit.html +0 -2
  352. nautobot/extras/templates/extras/secretsgroup_retrieve.html +0 -2
  353. nautobot/extras/templates/extras/status.html +0 -2
  354. nautobot/extras/templates/extras/tag.html +0 -2
  355. nautobot/extras/templates/extras/tag_edit.html +0 -2
  356. nautobot/extras/templates/extras/tag_retrieve.html +0 -2
  357. nautobot/extras/templates/extras/team_retrieve.html +0 -2
  358. nautobot/ipam/templates/ipam/namespace_retrieve.html +0 -1
  359. nautobot/ipam/templates/ipam/prefix.html +0 -2
  360. nautobot/ipam/templates/ipam/prefix_edit.html +0 -1
  361. nautobot/ipam/templates/ipam/prefix_retrieve.html +0 -2
  362. nautobot/ipam/templates/ipam/rir.html +0 -2
  363. nautobot/ipam/templates/ipam/routetarget.html +0 -1
  364. nautobot/ipam/templates/ipam/service.html +0 -2
  365. nautobot/ipam/templates/ipam/service_edit.html +0 -2
  366. nautobot/ipam/templates/ipam/service_retrieve.html +0 -2
  367. nautobot/ipam/templates/ipam/vlan.html +0 -2
  368. nautobot/ipam/templates/ipam/vlan_edit.html +0 -2
  369. nautobot/ipam/templates/ipam/vlan_retrieve.html +0 -2
  370. nautobot/ipam/templates/ipam/vlangroup.html +0 -2
  371. nautobot/ipam/templates/ipam/vrf.html +0 -1
  372. nautobot/tenancy/templates/tenancy/tenant.html +0 -2
  373. nautobot/tenancy/templates/tenancy/tenant_edit.html +0 -2
  374. nautobot/tenancy/templates/tenancy/tenantgroup.html +0 -2
  375. nautobot/tenancy/templates/tenancy/tenantgroup_retrieve.html +0 -1
  376. nautobot/virtualization/templates/virtualization/clustergroup.html +0 -2
  377. nautobot/virtualization/templates/virtualization/clustertype.html +0 -2
  378. nautobot/virtualization/templates/virtualization/virtualmachine.html +0 -2
  379. nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +0 -2
  380. nautobot/virtualization/templates/virtualization/virtualmachine_retrieve.html +0 -2
  381. nautobot/vpn/templates/vpn/vpnprofile.html +0 -2
  382. nautobot/wireless/templates/wireless/radioprofile_retrieve.html +0 -2
  383. nautobot/wireless/templates/wireless/supporteddatarate_retrieve.html +0 -2
  384. nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +0 -2
  385. {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/LICENSE.txt +0 -0
  386. {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/NOTICE +0 -0
  387. {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/WHEEL +0 -0
  388. {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/entry_points.txt +0 -0
nautobot/ipam/views.py CHANGED
@@ -242,6 +242,8 @@ class VRFUIViewSet(NautobotUIViewSet):
242
242
  table_class=tables.VRFDeviceAssignmentTable,
243
243
  table_filter="vrf",
244
244
  table_title="Assigned Devices",
245
+ related_list_url_name="dcim:device_list",
246
+ related_field_name="vrfs",
245
247
  exclude_columns=["vrf", "namespace", "rd"],
246
248
  add_button_route=None,
247
249
  ),
@@ -351,7 +353,7 @@ class PrefixUIViewSet(NautobotUIViewSet):
351
353
  ModelBreadcrumbItem(
352
354
  model=Prefix,
353
355
  reverse_query_params=lambda context: {"namespace": context["object"].namespace.pk},
354
- label_key="verbose_name_plural",
356
+ label_type="plural",
355
357
  ),
356
358
  ]
357
359
  }
@@ -396,7 +398,7 @@ class PrefixUIViewSet(NautobotUIViewSet):
396
398
  table_attribute="default_ancestors",
397
399
  table_title="Parent Prefixes",
398
400
  exclude_columns=["namespace"],
399
- related_field_name="prefixes",
401
+ related_field_name="ancestors",
400
402
  add_button_route=None,
401
403
  paginate=False,
402
404
  show_table_config_button=False,
@@ -407,7 +409,8 @@ class PrefixUIViewSet(NautobotUIViewSet):
407
409
  table_class=tables.VRFPrefixAssignmentTable,
408
410
  table_attribute="vrf_assignments",
409
411
  table_title="Assigned VRFs",
410
- related_field_name="vrfs",
412
+ related_field_name="prefix",
413
+ related_list_url_name="ipam:vrf_list",
411
414
  add_button_route=None,
412
415
  paginate=False,
413
416
  show_table_config_button=False,
@@ -419,7 +422,7 @@ class PrefixUIViewSet(NautobotUIViewSet):
419
422
  table_attribute="cloud_networks",
420
423
  table_title="Assigned Cloud Networks",
421
424
  exclude_columns=["actions", "assigned_prefix_count", "circuit_count", "cloud_service_count"],
422
- related_field_name="cloud_networks",
425
+ related_field_name="prefixes",
423
426
  add_button_route=None,
424
427
  paginate=False,
425
428
  show_table_config_button=False,
@@ -429,7 +432,7 @@ class PrefixUIViewSet(NautobotUIViewSet):
429
432
  weight=300,
430
433
  table_class=VPNTunnelEndpointTable,
431
434
  table_attribute="vpn_tunnel_endpoints",
432
- table_title="VPN Tunnel Endpoints",
435
+ table_title="VPN Tunnel Endpoints Protecting Prefix",
433
436
  exclude_columns=[
434
437
  "vpn_profile",
435
438
  "destination_ipaddress",
@@ -438,7 +441,7 @@ class PrefixUIViewSet(NautobotUIViewSet):
438
441
  "protected_prefixes_count",
439
442
  "actions",
440
443
  ],
441
- related_field_name="vpn_tunnel_endpoints",
444
+ related_field_name="protected_prefixes",
442
445
  add_button_route=None,
443
446
  paginate=False,
444
447
  show_table_config_button=False,
@@ -535,7 +538,6 @@ class PrefixUIViewSet(NautobotUIViewSet):
535
538
  detail=True,
536
539
  url_path="prefixes",
537
540
  custom_view_base_action="view",
538
- custom_view_additional_permissions=["ipam.view_prefix"],
539
541
  )
540
542
  def prefixes(self, request, *args, **kwargs):
541
543
  instance = self.get_object()
File without changes
@@ -0,0 +1 @@
1
+ """REST API module for load_balancers app."""
@@ -0,0 +1,75 @@
1
+ """API serializers for nautobot_load_balancer_models."""
2
+
3
+ from nautobot.core.api import NautobotModelSerializer, ValidatedModelSerializer
4
+ from nautobot.extras.api.mixins import TaggedModelSerializerMixin
5
+ from nautobot.load_balancers import models
6
+
7
+
8
+ class VirtualServerSerializer(TaggedModelSerializerMixin, NautobotModelSerializer): # pylint: disable=too-many-ancestors
9
+ """VirtualServer Serializer."""
10
+
11
+ class Meta:
12
+ """Meta attributes."""
13
+
14
+ model = models.VirtualServer
15
+ fields = "__all__"
16
+
17
+
18
+ class LoadBalancerPoolSerializer(TaggedModelSerializerMixin, NautobotModelSerializer): # pylint: disable=too-many-ancestors
19
+ """LoadBalancerPool Serializer."""
20
+
21
+ class Meta:
22
+ """Meta attributes."""
23
+
24
+ model = models.LoadBalancerPool
25
+ fields = "__all__"
26
+
27
+
28
+ class LoadBalancerPoolMemberSerializer(TaggedModelSerializerMixin, NautobotModelSerializer): # pylint: disable=too-many-ancestors
29
+ """LoadBalancerPoolMember Serializer."""
30
+
31
+ class Meta:
32
+ """Meta attributes."""
33
+
34
+ model = models.LoadBalancerPoolMember
35
+ fields = "__all__"
36
+
37
+
38
+ class HealthCheckMonitorSerializer(TaggedModelSerializerMixin, NautobotModelSerializer): # pylint: disable=too-many-ancestors
39
+ """HealthCheckMonitor Serializer."""
40
+
41
+ class Meta:
42
+ """Meta attributes."""
43
+
44
+ model = models.HealthCheckMonitor
45
+ fields = "__all__"
46
+
47
+
48
+ class CertificateProfileSerializer(TaggedModelSerializerMixin, NautobotModelSerializer): # pylint: disable=too-many-ancestors
49
+ """CertificateProfile Serializer."""
50
+
51
+ class Meta:
52
+ """Meta attributes."""
53
+
54
+ model = models.CertificateProfile
55
+ fields = "__all__"
56
+
57
+
58
+ class VirtualServerCertificateProfileAssignmentSerializer(ValidatedModelSerializer): # pylint: disable=too-many-ancestors
59
+ """VirtualServerCertificateProfileAssignment Serializer."""
60
+
61
+ class Meta:
62
+ """Meta attributes."""
63
+
64
+ model = models.VirtualServerCertificateProfileAssignment
65
+ fields = "__all__"
66
+
67
+
68
+ class LoadBalancerPoolMemberCertificateProfileAssignmentSerializer(ValidatedModelSerializer): # pylint: disable=too-many-ancestors
69
+ """LoadBalancerPoolMemberCertificateProfileAssignment Serializer."""
70
+
71
+ class Meta:
72
+ """Meta attributes."""
73
+
74
+ model = models.LoadBalancerPoolMemberCertificateProfileAssignment
75
+ fields = "__all__"
@@ -0,0 +1,23 @@
1
+ """Django API urlpatterns declaration for nautobot_load_balancer_models app."""
2
+
3
+ from nautobot.core.api.routers import OrderedDefaultRouter
4
+
5
+ from . import views
6
+
7
+ router = OrderedDefaultRouter(view_name="Load Balancers")
8
+
9
+ router.register("certificate-profiles", views.CertificateProfileViewSet)
10
+ router.register("health-check-monitors", views.HealthCheckMonitorViewSet)
11
+ router.register("load-balancer-pool-members", views.LoadBalancerPoolMemberViewSet)
12
+ router.register(
13
+ "load-balancer-pool-member-certificate-profile-assignments",
14
+ views.LoadBalancerPoolMemberCertificateProfileAssignmentViewSet,
15
+ )
16
+ router.register("load-balancer-pools", views.LoadBalancerPoolViewSet)
17
+ router.register("virtual-servers", views.VirtualServerViewSet)
18
+ router.register(
19
+ "virtual-server-certificate-profile-assignments", views.VirtualServerCertificateProfileAssignmentViewSet
20
+ )
21
+
22
+ app_name = "load_balancers-api"
23
+ urlpatterns = router.urls
@@ -0,0 +1,61 @@
1
+ """API views for nautobot_load_balancer_models."""
2
+
3
+ from nautobot.extras.api.views import ModelViewSet, NautobotModelViewSet
4
+ from nautobot.load_balancers import filters, models
5
+ from nautobot.load_balancers.api import serializers
6
+
7
+
8
+ class VirtualServerViewSet(NautobotModelViewSet): # pylint: disable=too-many-ancestors
9
+ """VirtualServer viewset."""
10
+
11
+ queryset = models.VirtualServer.objects.all()
12
+ serializer_class = serializers.VirtualServerSerializer
13
+ filterset_class = filters.VirtualServerFilterSet
14
+
15
+
16
+ class LoadBalancerPoolViewSet(NautobotModelViewSet): # pylint: disable=too-many-ancestors
17
+ """LoadBalancerPool viewset."""
18
+
19
+ queryset = models.LoadBalancerPool.objects.all()
20
+ serializer_class = serializers.LoadBalancerPoolSerializer
21
+ filterset_class = filters.LoadBalancerPoolFilterSet
22
+
23
+
24
+ class LoadBalancerPoolMemberViewSet(NautobotModelViewSet): # pylint: disable=too-many-ancestors
25
+ """LoadBalancerPoolMember viewset."""
26
+
27
+ queryset = models.LoadBalancerPoolMember.objects.all()
28
+ serializer_class = serializers.LoadBalancerPoolMemberSerializer
29
+ filterset_class = filters.LoadBalancerPoolMemberFilterSet
30
+
31
+
32
+ class HealthCheckMonitorViewSet(NautobotModelViewSet): # pylint: disable=too-many-ancestors
33
+ """HealthCheckMonitor viewset."""
34
+
35
+ queryset = models.HealthCheckMonitor.objects.all()
36
+ serializer_class = serializers.HealthCheckMonitorSerializer
37
+ filterset_class = filters.HealthCheckMonitorFilterSet
38
+
39
+
40
+ class CertificateProfileViewSet(NautobotModelViewSet): # pylint: disable=too-many-ancestors
41
+ """CertificateProfile viewset."""
42
+
43
+ queryset = models.CertificateProfile.objects.all()
44
+ serializer_class = serializers.CertificateProfileSerializer
45
+ filterset_class = filters.CertificateProfileFilterSet
46
+
47
+
48
+ class VirtualServerCertificateProfileAssignmentViewSet(ModelViewSet): # pylint: disable=too-many-ancestors
49
+ """VirtualServerCertificateProfileAssignment viewset."""
50
+
51
+ queryset = models.VirtualServerCertificateProfileAssignment.objects.all()
52
+ serializer_class = serializers.VirtualServerCertificateProfileAssignmentSerializer
53
+ filterset_class = filters.VirtualServerCertificateProfileAssignmentFilterSet
54
+
55
+
56
+ class LoadBalancerPoolMemberCertificateProfileAssignmentViewSet(ModelViewSet): # pylint: disable=too-many-ancestors
57
+ """LoadBalancerPoolMemberCertificateProfileAssignment viewset."""
58
+
59
+ queryset = models.LoadBalancerPoolMemberCertificateProfileAssignment.objects.all()
60
+ serializer_class = serializers.LoadBalancerPoolMemberCertificateProfileAssignmentSerializer
61
+ filterset_class = filters.LoadBalancerPoolMemberCertificateProfileAssignmentFilterSet
@@ -0,0 +1,17 @@
1
+ from nautobot.core.apps import NautobotConfig
2
+
3
+
4
+ class LoadBalancersConfig(NautobotConfig):
5
+ """App configuration for the nautobot_load_balancer_models app."""
6
+
7
+ default = True
8
+ name = "nautobot.load_balancers"
9
+ verbose_name = "Load Balancers"
10
+ base_url = "load-balancers"
11
+ searchable_models = [
12
+ "virtualserver",
13
+ "loadbalancerpool",
14
+ "loadbalancerpoolmember",
15
+ "healthcheckmonitor",
16
+ "certificateprofile",
17
+ ]
@@ -0,0 +1,167 @@
1
+ """Custom choices for the Load Balancer models."""
2
+
3
+ from nautobot.core.choices import ChoiceSet
4
+
5
+
6
+ class SourceNATTypeChoices(ChoiceSet):
7
+ """Source NAT Type choices for VirtualServers."""
8
+
9
+ TYPE_AUTO = "auto"
10
+ TYPE_POOL = "pool"
11
+ TYPE_STATIC = "static"
12
+
13
+ CHOICES = (
14
+ (TYPE_AUTO, "Auto"),
15
+ (TYPE_POOL, "Pool"),
16
+ (TYPE_STATIC, "Static"),
17
+ )
18
+
19
+
20
+ class LoadBalancerTypeChoices(ChoiceSet):
21
+ """Load balancer type choices for VirtualServers."""
22
+
23
+ TYPE_LAYER2 = "layer2"
24
+ TYPE_LAYER4 = "layer4"
25
+ TYPE_LAYER7 = "layer7"
26
+ TYPE_DNS = "dns"
27
+
28
+ CHOICES = (
29
+ (TYPE_LAYER2, "Layer 2"),
30
+ (TYPE_LAYER4, "Layer 4"),
31
+ (TYPE_LAYER7, "Layer 7"),
32
+ (TYPE_DNS, "DNS"),
33
+ )
34
+
35
+
36
+ class ProtocolChoices(ChoiceSet):
37
+ """Protocol choices for VirtualServers."""
38
+
39
+ # Layer4
40
+ PROTOCOL_TCP = "tcp"
41
+ PROTOCOL_UDP = "udp"
42
+ PROTOCOL_ICMP = "icmp"
43
+ PROTOCOL_SCTP = "sctp"
44
+
45
+ # Layer7
46
+ PROTOCOL_HTTP = "http"
47
+ PROTOCOL_HTTPS = "https"
48
+ PROTOCOL_HTTP2 = "http2"
49
+ PROTOCOL_GRPC = "grpc"
50
+ PROTOCOL_QUIC = "quic"
51
+
52
+ # DNS
53
+ PROTOCOL_DNS = "dns"
54
+
55
+ # Any
56
+ PROTOCOL_ANY = "any"
57
+
58
+ CHOICES = (
59
+ (
60
+ "Layer 4",
61
+ (
62
+ (PROTOCOL_TCP, "TCP"),
63
+ (PROTOCOL_UDP, "UDP"),
64
+ (PROTOCOL_ICMP, "ICMP"),
65
+ (PROTOCOL_SCTP, "SCTP"),
66
+ ),
67
+ ),
68
+ (
69
+ "Layer 7",
70
+ (
71
+ (PROTOCOL_HTTP, "HTTP"),
72
+ (PROTOCOL_HTTPS, "HTTPS"),
73
+ (PROTOCOL_HTTP2, "HTTP2"),
74
+ (PROTOCOL_GRPC, "gRPC"),
75
+ (PROTOCOL_QUIC, "QUIC"),
76
+ ),
77
+ ),
78
+ ("DNS", ((PROTOCOL_DNS, "DNS"),)),
79
+ ("Any", ((PROTOCOL_ANY, "Any"),)),
80
+ )
81
+
82
+
83
+ class LoadBalancingAlgorithmChoices(ChoiceSet):
84
+ """Choices for the load_balancing_algorithm field on the LoadBalancerPool model."""
85
+
86
+ # TODO Pull from Netutils
87
+ ROUND_ROBIN = "round_robin"
88
+ URL_HASH = "url_hash"
89
+ LEAST_CONNECTIONS = "least_connections"
90
+ LEAST_RESPONSE_TIME = "least_response_time"
91
+ LEAST_BANDWIDTH = "least_bandwidth"
92
+ LEAST_PACKETS = "least_packets"
93
+ DOMAIN_HASH = "domain_hash"
94
+ DESTINATION_IP_HASH = "destination_ip_hash"
95
+ SOURCE_IP_HASH = "source_ip_hash"
96
+ SRCIP_DESTIP_HASH = "srcip_destip_hash"
97
+ LEAST_REQUEST = "least_request"
98
+ CUSTOM_LOAD = "custom_load"
99
+ SRCIP_SRCPORT_HASH = "srcip_srcport_hash"
100
+
101
+ CHOICES = (
102
+ (ROUND_ROBIN, "Round Robin"),
103
+ (URL_HASH, "URL Hash"),
104
+ (LEAST_CONNECTIONS, "Least Connections"),
105
+ (LEAST_RESPONSE_TIME, "Least Response Time"),
106
+ (LEAST_BANDWIDTH, "Least Bandwidth"),
107
+ (LEAST_PACKETS, "Least Packets"),
108
+ (DOMAIN_HASH, "Domain Hash"),
109
+ (DESTINATION_IP_HASH, "Destination IP Hash"),
110
+ (SOURCE_IP_HASH, "Source IP Hash"),
111
+ (SRCIP_DESTIP_HASH, "Source IP Destination IP Hash"),
112
+ (LEAST_REQUEST, "Least Request"),
113
+ (CUSTOM_LOAD, "Custom Load"),
114
+ (SRCIP_SRCPORT_HASH, "Source IP Source Port Hash"),
115
+ )
116
+
117
+
118
+ class LoadBalancerPoolMemberStatusChoices(ChoiceSet):
119
+ """Choices for the status field on the LoadBalancerPoolMember model."""
120
+
121
+ STATUS_ACTIVE = "active"
122
+ STATUS_MAINTENANCE = "maintenance"
123
+ STATUS_PLANNED = "planned"
124
+ STATUS_FAILED = "failed"
125
+ STATUS_DECOMMISSIONING = "decommissioning"
126
+
127
+ CHOICES = (
128
+ (STATUS_ACTIVE, "Active"),
129
+ (STATUS_MAINTENANCE, "Maintenance"),
130
+ (STATUS_PLANNED, "Planned"),
131
+ (STATUS_FAILED, "Failed"),
132
+ (STATUS_DECOMMISSIONING, "Decommissioning"),
133
+ )
134
+
135
+
136
+ class HealthCheckTypeChoices(ChoiceSet):
137
+ """Choices for the health_check_type field on the HealthCheckMonitor model."""
138
+
139
+ PING = "ping"
140
+ TCP = "tcp"
141
+ DNS = "dns"
142
+ HTTP = "http"
143
+ HTTPS = "https"
144
+ CUSTOM = "custom"
145
+
146
+ CHOICES = (
147
+ (PING, "Ping"),
148
+ (TCP, "TCP"),
149
+ (DNS, "DNS"),
150
+ (HTTP, "HTTP"),
151
+ (HTTPS, "HTTPS"),
152
+ (CUSTOM, "Custom"),
153
+ )
154
+
155
+
156
+ class CertificateTypeChoices(ChoiceSet):
157
+ """Choices for the certificate_type field on the CertificateProfile model."""
158
+
159
+ TYPE_CLIENT = "client"
160
+ TYPE_SERVER = "server"
161
+ TYPE_MTLS = "mutual_tls"
162
+
163
+ CHOICES = (
164
+ (TYPE_CLIENT, "Client"),
165
+ (TYPE_SERVER, "Server"),
166
+ (TYPE_MTLS, "mTLS (Mutual TLS)"),
167
+ )
@@ -0,0 +1,225 @@
1
+ """Filtering for nautobot_load_balancer_models."""
2
+
3
+ import django_filters
4
+
5
+ from nautobot.cloud.models import CloudService
6
+ from nautobot.core.filters import (
7
+ BaseFilterSet,
8
+ MultiValueDateTimeFilter,
9
+ NameSearchFilterSet,
10
+ NaturalKeyOrPKMultipleChoiceFilter,
11
+ SearchFilter,
12
+ )
13
+ from nautobot.dcim.models import Device, DeviceRedundancyGroup, VirtualChassis
14
+ from nautobot.extras.filters import NautobotFilterSet, StatusModelFilterSetMixin
15
+ from nautobot.ipam.models import IPAddress, Prefix
16
+ from nautobot.load_balancers import models
17
+ from nautobot.tenancy.filter_mixins import TenancyModelFilterSetMixin
18
+
19
+
20
+ class VirtualServerFilterSet(NameSearchFilterSet, TenancyModelFilterSetMixin, NautobotFilterSet): # pylint: disable=too-many-ancestors
21
+ """Filter for VirtualServer."""
22
+
23
+ vip = django_filters.ModelMultipleChoiceFilter(
24
+ queryset=IPAddress.objects.all(),
25
+ label="VIP (ID)",
26
+ )
27
+ source_nat_pool = django_filters.ModelMultipleChoiceFilter(
28
+ queryset=Prefix.objects.all(),
29
+ label="Source NAT Pool (ID)",
30
+ )
31
+ load_balancer_pool = NaturalKeyOrPKMultipleChoiceFilter(
32
+ queryset=models.LoadBalancerPool.objects.all(),
33
+ label="Load Balancer Pool (name or ID)",
34
+ )
35
+ device = NaturalKeyOrPKMultipleChoiceFilter(
36
+ queryset=Device.objects.all(),
37
+ label="Device (name or ID)",
38
+ )
39
+ device_redundancy_group = NaturalKeyOrPKMultipleChoiceFilter(
40
+ queryset=DeviceRedundancyGroup.objects.all(),
41
+ label="Device Redundancy Group (name or ID)",
42
+ )
43
+ cloud_service = NaturalKeyOrPKMultipleChoiceFilter(
44
+ queryset=CloudService.objects.all(),
45
+ label="Cloud Service (name or ID)",
46
+ )
47
+ virtual_chassis = NaturalKeyOrPKMultipleChoiceFilter(
48
+ queryset=VirtualChassis.objects.all(),
49
+ label="Virtual Chassis (name or ID)",
50
+ )
51
+ health_check_monitor = NaturalKeyOrPKMultipleChoiceFilter(
52
+ queryset=models.HealthCheckMonitor.objects.all(),
53
+ label="Health Check Monitor (name or ID)",
54
+ )
55
+ certificate_profiles = NaturalKeyOrPKMultipleChoiceFilter(
56
+ to_field_name="name",
57
+ queryset=models.CertificateProfile.objects.all(),
58
+ label="Certificate Profile (name or ID)",
59
+ )
60
+
61
+ class Meta:
62
+ """Meta attributes for filter."""
63
+
64
+ model = models.VirtualServer
65
+
66
+ fields = "__all__"
67
+
68
+
69
+ class LoadBalancerPoolFilterSet(NameSearchFilterSet, NautobotFilterSet, TenancyModelFilterSetMixin): # pylint: disable=too-many-ancestors
70
+ """Filter for LoadBalancerPool."""
71
+
72
+ health_check_monitor = NaturalKeyOrPKMultipleChoiceFilter(
73
+ queryset=models.HealthCheckMonitor.objects.all(),
74
+ label="Health Check Monitor (name or ID)",
75
+ )
76
+
77
+ class Meta:
78
+ """Meta attributes for filter."""
79
+
80
+ model = models.LoadBalancerPool
81
+
82
+ fields = "__all__"
83
+
84
+
85
+ class LoadBalancerPoolMemberFilterSet(StatusModelFilterSetMixin, TenancyModelFilterSetMixin, NautobotFilterSet): # pylint: disable=too-many-ancestors
86
+ """Filter for LoadBalancerPoolMember."""
87
+
88
+ q = SearchFilter(
89
+ filter_predicates={
90
+ "ip_address__host": "icontains",
91
+ "label": "icontains",
92
+ "load_balancer_pool__name": "icontains",
93
+ "port": "icontains",
94
+ }
95
+ )
96
+ ip_address = django_filters.ModelMultipleChoiceFilter(
97
+ queryset=IPAddress.objects.all(),
98
+ label="IP Address (ID)",
99
+ )
100
+ load_balancer_pool = NaturalKeyOrPKMultipleChoiceFilter(
101
+ to_field_name="name",
102
+ queryset=models.LoadBalancerPool.objects.all(),
103
+ label="Load Balancer Pool (name or ID)",
104
+ )
105
+ health_check_monitor = NaturalKeyOrPKMultipleChoiceFilter(
106
+ queryset=models.HealthCheckMonitor.objects.all(),
107
+ label="Health Check Monitor (name or ID)",
108
+ )
109
+ certificate_profiles = NaturalKeyOrPKMultipleChoiceFilter(
110
+ to_field_name="name",
111
+ queryset=models.CertificateProfile.objects.all(),
112
+ label="Certificate Profile (name or ID)",
113
+ )
114
+
115
+ class Meta:
116
+ """Meta attributes for filter."""
117
+
118
+ model = models.LoadBalancerPoolMember
119
+ fields = "__all__"
120
+
121
+
122
+ class HealthCheckMonitorFilterSet(TenancyModelFilterSetMixin, NautobotFilterSet): # pylint: disable=too-many-ancestors
123
+ """Filter for HealthCheckMonitor."""
124
+
125
+ q = SearchFilter(
126
+ filter_predicates={
127
+ "name": "icontains",
128
+ "interval": {
129
+ "lookup_expr": "exact",
130
+ "preprocessor": int,
131
+ },
132
+ "retry": {
133
+ "lookup_expr": "exact",
134
+ "preprocessor": int,
135
+ },
136
+ "timeout": {
137
+ "lookup_expr": "exact",
138
+ "preprocessor": int,
139
+ },
140
+ "port": {
141
+ "lookup_expr": "exact",
142
+ "preprocessor": int,
143
+ },
144
+ "health_check_type": "icontains",
145
+ }
146
+ )
147
+
148
+ class Meta:
149
+ """Meta attributes for filter."""
150
+
151
+ model = models.HealthCheckMonitor
152
+ fields = "__all__"
153
+
154
+
155
+ class CertificateProfileFilterSet(TenancyModelFilterSetMixin, NautobotFilterSet): # pylint: disable=too-many-ancestors
156
+ """Filter for CertificateProfile."""
157
+
158
+ q = SearchFilter(
159
+ filter_predicates={
160
+ "name": "icontains",
161
+ "certificate_type": "icontains",
162
+ "cipher": "icontains",
163
+ "certificate_file_path": "icontains",
164
+ "chain_file_path": "icontains",
165
+ "key_file_path": "icontains",
166
+ }
167
+ )
168
+ expiration_date = MultiValueDateTimeFilter()
169
+ load_balancer_pool_members = NaturalKeyOrPKMultipleChoiceFilter(
170
+ to_field_name="ip_address__host",
171
+ queryset=models.LoadBalancerPoolMember.objects.all(),
172
+ label="Load Balancer Pool Members (ID or host string)",
173
+ )
174
+ virtual_servers = NaturalKeyOrPKMultipleChoiceFilter(
175
+ queryset=models.VirtualServer.objects.all(),
176
+ label="Virtual Servers",
177
+ )
178
+
179
+ class Meta:
180
+ """Meta attributes for filter."""
181
+
182
+ model = models.CertificateProfile
183
+ fields = "__all__"
184
+
185
+
186
+ class VirtualServerCertificateProfileAssignmentFilterSet(BaseFilterSet): # pylint: disable=too-many-ancestors
187
+ """Filter for VirtualServerCertificateProfileAssignment."""
188
+
189
+ virtual_server = NaturalKeyOrPKMultipleChoiceFilter(
190
+ to_field_name="name",
191
+ queryset=models.VirtualServer.objects.all(),
192
+ label="Virtual Server (name or ID)",
193
+ )
194
+ certificate_profile = NaturalKeyOrPKMultipleChoiceFilter(
195
+ to_field_name="name",
196
+ queryset=models.CertificateProfile.objects.all(),
197
+ label="Certificate Profile (name or ID)",
198
+ )
199
+
200
+ class Meta:
201
+ """Meta attributes for filter."""
202
+
203
+ model = models.VirtualServerCertificateProfileAssignment
204
+ fields = "__all__"
205
+
206
+
207
+ class LoadBalancerPoolMemberCertificateProfileAssignmentFilterSet(BaseFilterSet): # pylint: disable=too-many-ancestors
208
+ """Filter for LoadBalancerPoolMemberCertificateProfileAssignment."""
209
+
210
+ load_balancer_pool_member = NaturalKeyOrPKMultipleChoiceFilter(
211
+ to_field_name="name",
212
+ queryset=models.LoadBalancerPoolMember.objects.all(),
213
+ label="Load Balancer Pool Member (name or ID)",
214
+ )
215
+ certificate_profile = NaturalKeyOrPKMultipleChoiceFilter(
216
+ to_field_name="name",
217
+ queryset=models.CertificateProfile.objects.all(),
218
+ label="Certificate Profile (name or ID)",
219
+ )
220
+
221
+ class Meta:
222
+ """Meta attributes for filter."""
223
+
224
+ model = models.LoadBalancerPoolMemberCertificateProfileAssignment
225
+ fields = "__all__"