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.
- nautobot/apps/choices.py +4 -0
- nautobot/apps/ui.py +4 -0
- nautobot/apps/utils.py +8 -0
- nautobot/circuits/tests/integration/test_circuits_bulk_operations.py +0 -3
- nautobot/circuits/views.py +6 -2
- nautobot/core/api/serializers.py +1 -1
- nautobot/core/api/urls.py +1 -0
- nautobot/core/api/views.py +4 -0
- nautobot/core/choices.py +1 -1
- nautobot/core/cli/bootstrap_v3_to_v5.py +36 -13
- nautobot/core/cli/migrate_deprecated_templates.py +36 -9
- nautobot/core/filters.py +4 -0
- nautobot/core/forms/__init__.py +2 -0
- nautobot/core/forms/widgets.py +21 -2
- nautobot/core/jobs/__init__.py +56 -0
- nautobot/core/management/commands/generate_test_data.py +3 -3
- nautobot/core/models/__init__.py +11 -0
- nautobot/core/models/utils.py +1 -1
- nautobot/core/settings.py +17 -7
- nautobot/core/settings.yaml +4 -26
- nautobot/core/templates/admin/base.html +1 -2
- nautobot/core/templates/admin/change_list.html +9 -12
- nautobot/core/templates/base_django.html +1 -2
- nautobot/core/templates/components/panel/header_extra_content_table.html +1 -1
- nautobot/core/templates/components/tab/content_wrapper.html +4 -4
- nautobot/core/templates/echarts/echarts.html +21 -8
- nautobot/core/templates/generic/object_bulk_create.html +2 -2
- nautobot/core/templates/generic/object_bulk_delete.html +1 -1
- nautobot/core/templates/generic/object_bulk_edit.html +1 -1
- nautobot/core/templates/generic/object_bulk_import.html +1 -1
- nautobot/core/templates/generic/object_delete.html +1 -1
- nautobot/core/templates/generic/object_detail.html +1 -1
- nautobot/core/templates/generic/object_edit.html +1 -1
- nautobot/core/templates/generic/object_retrieve.html +2 -2
- nautobot/core/templates/graphene/graphiql.html +0 -1
- nautobot/core/templates/inc/footer.html +3 -1
- nautobot/core/templates/inc/header.html +10 -0
- nautobot/core/templates/inc/media.html +14 -0
- nautobot/core/templates/inc/nav_menu.html +1 -8
- nautobot/core/templates/inc/object_details_advanced_panel.html +2 -2
- nautobot/core/templates/nautobot_config.py.j2 +0 -6
- nautobot/core/templates/rest_framework/api.html +103 -2
- nautobot/core/templates/utilities/templatetags/filter_form_drawer.html +33 -0
- nautobot/core/templates/utilities/theme_preview.html +3 -0
- nautobot/core/templates/widgets/number_input_with_choices.html +44 -0
- nautobot/core/templatetags/helpers.py +24 -12
- nautobot/core/testing/integration.py +24 -13
- nautobot/core/testing/utils.py +18 -4
- nautobot/core/testing/views.py +104 -17
- nautobot/core/tests/integration/test_filters.py +48 -11
- nautobot/core/tests/integration/test_theme.py +22 -21
- nautobot/core/tests/nautobot_config.py +3 -0
- nautobot/core/tests/runner.py +1 -2
- nautobot/core/tests/test_breadcrumbs.py +21 -21
- nautobot/core/tests/test_jobs.py +73 -6
- nautobot/core/tests/test_renderers.py +59 -0
- nautobot/core/tests/test_settings_schema.py +1 -0
- nautobot/core/tests/test_templatetags_helpers.py +9 -0
- nautobot/core/tests/test_titles.py +0 -16
- nautobot/core/tests/test_ui.py +122 -3
- nautobot/core/tests/test_utils.py +41 -1
- nautobot/core/ui/breadcrumbs.py +68 -17
- nautobot/core/ui/bulk_buttons.py +1 -1
- nautobot/core/ui/choices.py +49 -65
- nautobot/core/ui/echarts.py +15 -20
- nautobot/core/ui/object_detail.py +54 -46
- nautobot/core/ui/titles.py +3 -6
- nautobot/core/urls.py +8 -8
- nautobot/core/utils/filtering.py +11 -1
- nautobot/core/utils/lookup.py +46 -0
- nautobot/core/views/mixins.py +31 -20
- nautobot/core/views/renderers.py +2 -3
- nautobot/data_validation/migrations/0002_data_migration_from_app.py +3 -2
- nautobot/dcim/api/serializers.py +3 -0
- nautobot/dcim/choices.py +49 -0
- nautobot/dcim/constants.py +7 -0
- nautobot/dcim/factory.py +1 -1
- nautobot/dcim/filters.py +13 -1
- nautobot/dcim/forms.py +89 -3
- nautobot/dcim/migrations/0075_interface_duplex_interface_speed_and_more.py +32 -0
- nautobot/dcim/migrations/{0075_add_deviceclusterassignment.py → 0076_add_deviceclusterassignment.py} +1 -1
- nautobot/dcim/migrations/{0076_device_cluster_to_clusters_data_migration.py → 0077_device_cluster_to_clusters_data_migration.py} +1 -1
- nautobot/dcim/migrations/{0077_remove_device_cluster.py → 0078_remove_device_cluster.py} +1 -1
- nautobot/dcim/migrations/{0078_remove_device_location_tenant_name_uniqueness.py → 0079_remove_device_location_tenant_name_uniqueness.py} +1 -1
- nautobot/dcim/migrations/{0079_device_name_data_migration.py → 0080_device_name_data_migration.py} +1 -1
- nautobot/dcim/migrations/0081_alter_device_device_redundancy_group_priority_and_more.py +25 -0
- nautobot/dcim/models/device_component_templates.py +33 -1
- nautobot/dcim/models/device_components.py +22 -1
- nautobot/dcim/models/devices.py +17 -4
- nautobot/dcim/tables/devices.py +15 -0
- nautobot/dcim/tables/devicetypes.py +8 -1
- nautobot/dcim/tables/racks.py +0 -2
- nautobot/dcim/tables/template_code.py +1 -1
- nautobot/dcim/templates/dcim/cable_trace.html +0 -2
- nautobot/dcim/templates/dcim/consoleport.html +1 -1
- nautobot/dcim/templates/dcim/consoleserverport.html +1 -1
- nautobot/dcim/templates/dcim/devicebay.html +1 -1
- nautobot/dcim/templates/dcim/frontport.html +1 -1
- nautobot/dcim/templates/dcim/inc/devicetype_component_table.html +1 -1
- nautobot/dcim/templates/dcim/inc/moduletype_component_table.html +1 -1
- nautobot/dcim/templates/dcim/inc/rack_elevation.html +1 -1
- nautobot/dcim/templates/dcim/interface.html +9 -1
- nautobot/dcim/templates/dcim/interface_edit.html +2 -0
- nautobot/dcim/templates/dcim/inventoryitem.html +1 -1
- nautobot/dcim/templates/dcim/module_consoleports.html +1 -1
- nautobot/dcim/templates/dcim/module_consoleserverports.html +1 -1
- nautobot/dcim/templates/dcim/module_frontports.html +1 -1
- nautobot/dcim/templates/dcim/module_interfaces.html +1 -1
- nautobot/dcim/templates/dcim/module_modulebays.html +1 -1
- nautobot/dcim/templates/dcim/module_poweroutlets.html +1 -1
- nautobot/dcim/templates/dcim/module_powerports.html +1 -1
- nautobot/dcim/templates/dcim/module_rearports.html +1 -1
- nautobot/dcim/templates/dcim/moduletype_list.html +2 -2
- nautobot/dcim/templates/dcim/poweroutlet.html +1 -1
- nautobot/dcim/templates/dcim/powerport.html +1 -1
- nautobot/dcim/templates/dcim/rack_elevation_list.html +1 -1
- nautobot/dcim/templates/dcim/rack_retrieve.html +0 -11
- nautobot/dcim/templates/dcim/rearport.html +1 -1
- nautobot/dcim/templates/dcim/trace/cable.html +1 -1
- nautobot/dcim/templates/dcim/virtualchassis_update.html +1 -1
- nautobot/dcim/tests/integration/test_controller.py +3 -6
- nautobot/dcim/tests/integration/test_controller_managed_device_group.py +1 -5
- nautobot/dcim/tests/integration/test_create_device.py +0 -2
- nautobot/dcim/tests/integration/test_device_bulk_operations.py +1 -3
- nautobot/dcim/tests/integration/test_fileinputpicker.py +6 -10
- nautobot/dcim/tests/integration/test_location_bulk_operations.py +0 -2
- nautobot/dcim/tests/integration/test_module_bay_position.py +3 -4
- nautobot/dcim/tests/test_api.py +186 -6
- nautobot/dcim/tests/test_filters.py +43 -1
- nautobot/dcim/tests/test_forms.py +110 -8
- nautobot/dcim/tests/test_graphql.py +44 -1
- nautobot/dcim/tests/test_models.py +265 -0
- nautobot/dcim/tests/test_tables.py +160 -0
- nautobot/dcim/tests/test_views.py +69 -7
- nautobot/dcim/views.py +232 -126
- nautobot/extras/api/views.py +51 -44
- nautobot/extras/datasources/git.py +3 -1
- nautobot/extras/filters.py +19 -2
- nautobot/extras/forms/forms.py +9 -2
- nautobot/extras/jobs.py +2 -0
- nautobot/extras/jobs_ui.py +4 -3
- nautobot/extras/management/__init__.py +2 -0
- nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +4 -1
- nautobot/extras/migrations/0131_configcontext_device_families.py +18 -0
- nautobot/extras/models/approvals.py +11 -1
- nautobot/extras/models/change_logging.py +4 -0
- nautobot/extras/models/jobs.py +1 -3
- nautobot/extras/models/models.py +10 -2
- nautobot/extras/plugins/marketplace_manifest.yml +49 -1
- nautobot/extras/plugins/views.py +0 -5
- nautobot/extras/querysets.py +8 -0
- nautobot/extras/tables.py +12 -0
- nautobot/extras/templates/django_ajax_tables/ajax_wrapper.html +2 -0
- nautobot/extras/templates/extras/configcontext_update.html +1 -0
- nautobot/extras/templates/extras/dynamicgroup_update.html +1 -1
- nautobot/extras/templates/extras/objectchange_retrieve.html +0 -2
- nautobot/extras/templates/extras/plugin_detail.html +3 -3
- nautobot/extras/templates/extras/secret_create.html +1 -1
- nautobot/extras/tests/integration/test_computedfields.py +8 -9
- nautobot/extras/tests/integration/test_customfields.py +1 -3
- nautobot/extras/tests/integration/test_dynamicgroups.py +7 -8
- nautobot/extras/tests/integration/test_relationships.py +0 -2
- nautobot/extras/tests/test_api.py +63 -0
- nautobot/extras/tests/test_changelog.py +24 -2
- nautobot/extras/tests/test_filters.py +36 -3
- nautobot/extras/tests/test_models.py +38 -2
- nautobot/extras/tests/test_utils.py +3 -4
- nautobot/extras/tests/test_views.py +22 -83
- nautobot/extras/urls.py +0 -14
- nautobot/extras/views.py +83 -52
- nautobot/ipam/filters.py +26 -0
- nautobot/ipam/tables.py +6 -0
- nautobot/ipam/templates/ipam/namespace_ip_addresses.html +1 -1
- nautobot/ipam/templates/ipam/namespace_prefixes.html +1 -1
- nautobot/ipam/templates/ipam/namespace_vrfs.html +1 -1
- nautobot/ipam/tests/test_filters.py +26 -1
- nautobot/ipam/tests/test_models.py +1 -1
- nautobot/ipam/views.py +9 -7
- nautobot/load_balancers/__init__.py +0 -0
- nautobot/load_balancers/api/__init__.py +1 -0
- nautobot/load_balancers/api/serializers.py +75 -0
- nautobot/load_balancers/api/urls.py +23 -0
- nautobot/load_balancers/api/views.py +61 -0
- nautobot/load_balancers/apps.py +17 -0
- nautobot/load_balancers/choices.py +167 -0
- nautobot/load_balancers/filters.py +225 -0
- nautobot/load_balancers/forms.py +532 -0
- nautobot/load_balancers/management/commands/__init__.py +0 -0
- nautobot/load_balancers/management/commands/generate_load_balancer_models_test_data.py +38 -0
- nautobot/load_balancers/migrations/0001_initial.py +465 -0
- nautobot/load_balancers/migrations/0002_create_default_statuses_pool_members.py +31 -0
- nautobot/load_balancers/migrations/__init__.py +0 -0
- nautobot/load_balancers/models.py +423 -0
- nautobot/load_balancers/navigation.py +80 -0
- nautobot/load_balancers/tables.py +255 -0
- nautobot/load_balancers/tests/__init__.py +474 -0
- nautobot/load_balancers/tests/test_api.py +353 -0
- nautobot/load_balancers/tests/test_filters.py +134 -0
- nautobot/load_balancers/tests/test_forms.py +266 -0
- nautobot/load_balancers/tests/test_models.py +195 -0
- nautobot/load_balancers/tests/test_views.py +229 -0
- nautobot/load_balancers/urls.py +17 -0
- nautobot/load_balancers/views.py +248 -0
- nautobot/project-static/dist/css/github-dark.min.css +10 -0
- nautobot/project-static/dist/css/github.min.css +10 -0
- nautobot/project-static/dist/css/nautobot.css +1 -11
- nautobot/project-static/dist/css/nautobot.css.map +1 -1
- nautobot/project-static/dist/js/libraries.js +1 -1
- nautobot/project-static/dist/js/libraries.js.map +1 -1
- nautobot/project-static/dist/js/nautobot.js +1 -1
- nautobot/project-static/dist/js/nautobot.js.map +1 -1
- nautobot/project-static/js/forms.js +13 -0
- nautobot/project-static/nautobot-icons/bus-globe.svg +3 -0
- nautobot/project-static/nautobot-icons/bus-shield-check.svg +3 -0
- nautobot/project-static/nautobot-icons/bus-shield.svg +3 -0
- nautobot/ui/package-lock.json +87 -4
- nautobot/ui/package.json +2 -1
- nautobot/ui/src/js/nautobot.js +0 -1
- nautobot/ui/src/js/select2.js +53 -2
- nautobot/ui/src/scss/nautobot.scss +51 -2
- nautobot/ui/webpack.config.js +13 -0
- nautobot/users/templates/users/preferences.html +11 -2
- nautobot/virtualization/filters.py +6 -1
- nautobot/virtualization/tests/test_filters.py +10 -1
- nautobot/virtualization/tests/test_models.py +1 -0
- nautobot/virtualization/views.py +4 -1
- nautobot/vpn/factory.py +25 -15
- nautobot/vpn/filters.py +1 -0
- nautobot/vpn/forms.py +1 -0
- nautobot/vpn/migrations/0001_initial.py +1 -1
- nautobot/vpn/models.py +16 -8
- nautobot/vpn/tables.py +5 -2
- nautobot/vpn/tests/test_api.py +0 -5
- nautobot/vpn/tests/test_forms.py +1 -2
- nautobot/vpn/tests/test_models.py +57 -7
- nautobot/vpn/tests/test_views.py +22 -3
- nautobot/vpn/views.py +78 -20
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/METADATA +4 -4
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/RECORD +243 -352
- nautobot/circuits/templates/circuits/circuit.html +0 -2
- nautobot/circuits/templates/circuits/circuit_edit.html +0 -2
- nautobot/circuits/templates/circuits/circuit_retrieve.html +0 -2
- nautobot/circuits/templates/circuits/circuit_update.html +0 -1
- nautobot/circuits/templates/circuits/circuittermination.html +0 -2
- nautobot/circuits/templates/circuits/circuittermination_edit.html +0 -2
- nautobot/circuits/templates/circuits/circuittermination_retrieve.html +0 -2
- nautobot/circuits/templates/circuits/circuittermination_update.html +0 -1
- nautobot/circuits/templates/circuits/circuittype.html +0 -2
- nautobot/circuits/templates/circuits/circuittype_retrieve.html +0 -2
- nautobot/circuits/templates/circuits/inc/circuit_termination.html +0 -85
- nautobot/circuits/templates/circuits/provider.html +0 -2
- nautobot/circuits/templates/circuits/provider_edit.html +0 -2
- nautobot/circuits/templates/circuits/provider_retrieve.html +0 -1
- nautobot/circuits/templates/circuits/provider_update.html +0 -1
- nautobot/circuits/templates/circuits/providernetwork.html +0 -2
- nautobot/circuits/templates/circuits/providernetwork_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudaccount_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudnetwork_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudservice_retrieve.html +0 -2
- nautobot/core/templates/buttons/import.html +0 -9
- nautobot/data_validation/templates/data_validation/datacompliance_retrieve.html +0 -1
- nautobot/dcim/templates/dcim/cable.html +0 -2
- nautobot/dcim/templates/dcim/cable_edit.html +0 -2
- nautobot/dcim/templates/dcim/controller/base.html +0 -2
- nautobot/dcim/templates/dcim/controller_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/controller_wirelessnetworks.html +0 -2
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/device/base.html +0 -2
- nautobot/dcim/templates/dcim/device/consoleports.html +0 -2
- nautobot/dcim/templates/dcim/device/consoleserverports.html +0 -2
- nautobot/dcim/templates/dcim/device/devicebays.html +0 -2
- nautobot/dcim/templates/dcim/device/frontports.html +0 -2
- nautobot/dcim/templates/dcim/device/interfaces.html +0 -2
- nautobot/dcim/templates/dcim/device/inventory.html +0 -2
- nautobot/dcim/templates/dcim/device/modulebays.html +0 -2
- nautobot/dcim/templates/dcim/device/poweroutlets.html +0 -2
- nautobot/dcim/templates/dcim/device/powerports.html +0 -2
- nautobot/dcim/templates/dcim/device/rearports.html +0 -2
- nautobot/dcim/templates/dcim/device/wireless.html +0 -2
- nautobot/dcim/templates/dcim/device_component.html +0 -2
- nautobot/dcim/templates/dcim/device_edit.html +0 -2
- nautobot/dcim/templates/dcim/devicefamily_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/deviceredundancygroup_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/devicetype.html +0 -2
- nautobot/dcim/templates/dcim/devicetype_edit.html +0 -2
- nautobot/dcim/templates/dcim/devicetype_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/inc/device_napalm_tabs.html +0 -1
- nautobot/dcim/templates/dcim/interfaceredundancygroup_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/location.html +0 -2
- nautobot/dcim/templates/dcim/location_edit.html +0 -2
- nautobot/dcim/templates/dcim/location_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/locationtype.html +0 -2
- nautobot/dcim/templates/dcim/locationtype_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/manufacturer.html +0 -2
- nautobot/dcim/templates/dcim/modulebay_retrieve.html +0 -1
- nautobot/dcim/templates/dcim/platform.html +0 -2
- nautobot/dcim/templates/dcim/powerfeed.html +0 -2
- nautobot/dcim/templates/dcim/powerfeed_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/powerpanel.html +0 -2
- nautobot/dcim/templates/dcim/powerpanel_edit.html +0 -2
- nautobot/dcim/templates/dcim/powerpanel_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/rack.html +0 -2
- nautobot/dcim/templates/dcim/rack_edit.html +0 -2
- nautobot/dcim/templates/dcim/rackgroup.html +0 -2
- nautobot/dcim/templates/dcim/rackreservation.html +0 -2
- nautobot/dcim/templates/dcim/softwareimagefile_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/softwareversion_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis_add.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis_edit.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +0 -2
- nautobot/dcim/ui.py +0 -29
- nautobot/extras/templates/extras/computedfield.html +0 -2
- nautobot/extras/templates/extras/computedfield_retrieve.html +0 -2
- nautobot/extras/templates/extras/configcontext.html +0 -2
- nautobot/extras/templates/extras/configcontext_edit.html +0 -2
- nautobot/extras/templates/extras/configcontext_retrieve.html +0 -2
- nautobot/extras/templates/extras/configcontextschema.html +0 -2
- nautobot/extras/templates/extras/configcontextschema_edit.html +0 -2
- nautobot/extras/templates/extras/contact_retrieve.html +0 -2
- nautobot/extras/templates/extras/customfield.html +0 -2
- nautobot/extras/templates/extras/customfield_edit.html +0 -2
- nautobot/extras/templates/extras/customfield_retrieve.html +0 -2
- nautobot/extras/templates/extras/customlink.html +0 -2
- nautobot/extras/templates/extras/dynamicgroup.html +0 -2
- nautobot/extras/templates/extras/dynamicgroup_edit.html +0 -2
- nautobot/extras/templates/extras/exporttemplate.html +0 -2
- nautobot/extras/templates/extras/gitrepository.html +0 -2
- nautobot/extras/templates/extras/gitrepository_object_edit.html +0 -2
- nautobot/extras/templates/extras/graphqlquery.html +0 -2
- nautobot/extras/templates/extras/graphqlquery_list.html +0 -1
- nautobot/extras/templates/extras/graphqlquery_retrieve.html +0 -2
- nautobot/extras/templates/extras/job_detail.html +0 -2
- nautobot/extras/templates/extras/jobbutton_retrieve.html +0 -2
- nautobot/extras/templates/extras/jobhook.html +0 -2
- nautobot/extras/templates/extras/jobqueue_retrieve.html +0 -2
- nautobot/extras/templates/extras/jobresult.html +0 -2
- nautobot/extras/templates/extras/metadatatype_retrieve.html +0 -2
- nautobot/extras/templates/extras/note.html +0 -2
- nautobot/extras/templates/extras/note_retrieve.html +0 -1
- nautobot/extras/templates/extras/object_changelog.html +0 -2
- nautobot/extras/templates/extras/object_notes.html +0 -2
- nautobot/extras/templates/extras/objectchange.html +0 -2
- nautobot/extras/templates/extras/objectchange_list.html +0 -3
- nautobot/extras/templates/extras/relationship.html +0 -1
- nautobot/extras/templates/extras/secret.html +0 -1
- nautobot/extras/templates/extras/secret_edit.html +0 -1
- nautobot/extras/templates/extras/secretsgroup.html +0 -2
- nautobot/extras/templates/extras/secretsgroup_edit.html +0 -2
- nautobot/extras/templates/extras/secretsgroup_retrieve.html +0 -2
- nautobot/extras/templates/extras/status.html +0 -2
- nautobot/extras/templates/extras/tag.html +0 -2
- nautobot/extras/templates/extras/tag_edit.html +0 -2
- nautobot/extras/templates/extras/tag_retrieve.html +0 -2
- nautobot/extras/templates/extras/team_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/namespace_retrieve.html +0 -1
- nautobot/ipam/templates/ipam/prefix.html +0 -2
- nautobot/ipam/templates/ipam/prefix_edit.html +0 -1
- nautobot/ipam/templates/ipam/prefix_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/rir.html +0 -2
- nautobot/ipam/templates/ipam/routetarget.html +0 -1
- nautobot/ipam/templates/ipam/service.html +0 -2
- nautobot/ipam/templates/ipam/service_edit.html +0 -2
- nautobot/ipam/templates/ipam/service_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/vlan.html +0 -2
- nautobot/ipam/templates/ipam/vlan_edit.html +0 -2
- nautobot/ipam/templates/ipam/vlan_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/vlangroup.html +0 -2
- nautobot/ipam/templates/ipam/vrf.html +0 -1
- nautobot/tenancy/templates/tenancy/tenant.html +0 -2
- nautobot/tenancy/templates/tenancy/tenant_edit.html +0 -2
- nautobot/tenancy/templates/tenancy/tenantgroup.html +0 -2
- nautobot/tenancy/templates/tenancy/tenantgroup_retrieve.html +0 -1
- nautobot/virtualization/templates/virtualization/clustergroup.html +0 -2
- nautobot/virtualization/templates/virtualization/clustertype.html +0 -2
- nautobot/virtualization/templates/virtualization/virtualmachine.html +0 -2
- nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +0 -2
- nautobot/virtualization/templates/virtualization/virtualmachine_retrieve.html +0 -2
- nautobot/vpn/templates/vpn/vpnprofile.html +0 -2
- nautobot/wireless/templates/wireless/radioprofile_retrieve.html +0 -2
- nautobot/wireless/templates/wireless/supporteddatarate_retrieve.html +0 -2
- nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +0 -2
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/LICENSE.txt +0 -0
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/NOTICE +0 -0
- {nautobot-3.0.0a3.dist-info → nautobot-3.0.0rc1.dist-info}/WHEEL +0 -0
- {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
|
-
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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__"
|