nautobot 2.2.8__py3-none-any.whl → 2.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of nautobot might be problematic. Click here for more details.
- nautobot/apps/forms.py +4 -0
- nautobot/apps/models.py +10 -1
- nautobot/circuits/__init__.py +0 -1
- nautobot/circuits/apps.py +1 -0
- nautobot/circuits/factory.py +15 -3
- nautobot/circuits/filters.py +13 -0
- nautobot/circuits/forms.py +13 -0
- nautobot/circuits/migrations/0021_alter_circuit_status_alter_circuittermination__path.py +32 -0
- nautobot/circuits/migrations/0022_circuittermination_cloud_network.py +25 -0
- nautobot/circuits/models.py +16 -3
- nautobot/circuits/tables.py +16 -2
- nautobot/circuits/templates/circuits/circuittermination_create.html +10 -2
- nautobot/circuits/templates/circuits/circuittermination_retrieve.html +6 -0
- nautobot/circuits/templates/circuits/inc/circuit_termination.html +6 -1
- nautobot/circuits/tests/test_api.py +7 -5
- nautobot/circuits/tests/test_filters.py +12 -5
- nautobot/circuits/tests/test_models.py +33 -2
- nautobot/circuits/views.py +2 -3
- nautobot/cloud/__init__.py +0 -0
- nautobot/cloud/api/__init__.py +0 -0
- nautobot/cloud/api/serializers.py +54 -0
- nautobot/cloud/api/urls.py +16 -0
- nautobot/cloud/api/views.py +48 -0
- nautobot/cloud/apps.py +13 -0
- nautobot/cloud/factory.py +113 -0
- nautobot/cloud/filters.py +187 -0
- nautobot/cloud/forms.py +339 -0
- nautobot/cloud/homepage.py +43 -0
- nautobot/cloud/migrations/0001_initial.py +304 -0
- nautobot/cloud/migrations/__init__.py +0 -0
- nautobot/cloud/models.py +246 -0
- nautobot/cloud/navigation.py +85 -0
- nautobot/cloud/tables.py +157 -0
- nautobot/cloud/templates/cloud/cloudaccount_retrieve.html +43 -0
- nautobot/cloud/templates/cloud/cloudnetwork_retrieve.html +122 -0
- nautobot/cloud/templates/cloud/cloudnetwork_update.html +33 -0
- nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +111 -0
- nautobot/cloud/templates/cloud/cloudservice_retrieve.html +69 -0
- nautobot/cloud/templates/cloud/cloudservice_update.html +25 -0
- nautobot/cloud/tests/__init__.py +0 -0
- nautobot/cloud/tests/test_api.py +248 -0
- nautobot/cloud/tests/test_filters.py +125 -0
- nautobot/cloud/tests/test_models.py +43 -0
- nautobot/cloud/tests/test_views.py +153 -0
- nautobot/cloud/urls.py +14 -0
- nautobot/cloud/views.py +181 -0
- nautobot/core/__init__.py +0 -3
- nautobot/core/api/metadata.py +1 -0
- nautobot/core/api/parsers.py +7 -1
- nautobot/core/api/urls.py +1 -0
- nautobot/core/api/utils.py +1 -0
- nautobot/core/api/views.py +4 -0
- nautobot/core/apps/__init__.py +6 -3
- nautobot/core/constants.py +8 -0
- nautobot/core/factory.py +32 -1
- nautobot/core/filters.py +110 -14
- nautobot/core/forms/fields.py +10 -4
- nautobot/core/forms/forms.py +11 -3
- nautobot/core/forms/widgets.py +18 -1
- nautobot/core/graphql/generators.py +2 -2
- nautobot/core/graphql/schema.py +28 -7
- nautobot/core/jobs/__init__.py +20 -3
- nautobot/core/jobs/cleanup.py +100 -0
- nautobot/core/jobs/groups.py +38 -0
- nautobot/core/management/commands/generate_test_data.py +116 -3
- nautobot/core/models/__init__.py +34 -9
- nautobot/core/models/generics.py +19 -3
- nautobot/core/models/name_color_content_types.py +7 -28
- nautobot/core/models/querysets.py +4 -3
- nautobot/core/models/tree_queries.py +1 -1
- nautobot/core/models/utils.py +21 -5
- nautobot/core/settings.py +15 -19
- nautobot/core/settings.yaml +48 -13
- nautobot/core/settings_funcs.py +103 -0
- nautobot/core/tables.py +130 -56
- nautobot/core/templates/admin/search_form.html +1 -1
- nautobot/core/templates/buttons/add.html +11 -3
- nautobot/core/templates/buttons/consolidated_bulk_action_buttons.html +13 -0
- nautobot/core/templates/buttons/consolidated_detail_view_action_buttons.html +13 -0
- nautobot/core/templates/buttons/export.html +101 -53
- nautobot/core/templates/buttons/job_import.html +11 -3
- nautobot/core/templates/generic/object_bulk_destroy.html +3 -1
- nautobot/core/templates/generic/object_bulk_update.html +3 -1
- nautobot/core/templates/generic/object_changelog.html +0 -9
- nautobot/core/templates/generic/object_list.html +156 -17
- nautobot/core/templates/generic/object_retrieve.html +80 -16
- nautobot/core/templates/inc/extras_features_edit_form_fields.html +8 -0
- nautobot/core/templates/inc/javascript.html +2 -0
- nautobot/core/templates/inc/media.html +2 -2
- nautobot/core/templates/inc/nav_menu.html +1 -0
- nautobot/core/templates/inc/paginator.html +7 -7
- nautobot/core/templates/inc/search_panel.html +2 -2
- nautobot/core/templates/inc/table.html +2 -2
- nautobot/core/templates/nautobot_config.py.j2 +28 -8
- nautobot/core/templates/utilities/templatetags/dynamic_group_assignment_modal.html +37 -0
- nautobot/core/templates/utilities/templatetags/filter_form_modal.html +2 -2
- nautobot/core/templates/utilities/templatetags/saved_view_modal.html +38 -0
- nautobot/core/templates/utilities/theme_preview.html +25 -8
- nautobot/core/templates/utilities/worker_status.html +152 -0
- nautobot/core/templatetags/buttons.py +335 -38
- nautobot/core/templatetags/form_helpers.py +1 -1
- nautobot/core/templatetags/helpers.py +181 -11
- nautobot/core/testing/api.py +5 -4
- nautobot/core/testing/filters.py +63 -14
- nautobot/core/testing/mixins.py +46 -0
- nautobot/core/testing/models.py +22 -0
- nautobot/core/testing/schema.py +4 -8
- nautobot/core/testing/views.py +31 -14
- nautobot/core/tests/integration/test_general_functionality.py +1 -1
- nautobot/core/tests/integration/test_import_objects_ui.py +1 -0
- nautobot/core/tests/integration/test_swagger.py +1 -1
- nautobot/core/tests/nautobot_config.py +0 -1
- nautobot/core/tests/runner.py +2 -2
- nautobot/core/tests/test_api.py +1 -0
- nautobot/core/tests/test_authentication.py +7 -2
- nautobot/core/tests/test_filters.py +11 -9
- nautobot/core/tests/test_forms.py +9 -0
- nautobot/core/tests/test_graphql.py +27 -16
- nautobot/core/tests/test_jobs.py +204 -2
- nautobot/core/tests/test_tables.py +3 -1
- nautobot/core/tests/test_templatetags_helpers.py +12 -5
- nautobot/core/tests/test_templatetags_netutils.py +3 -3
- nautobot/core/tests/test_utils.py +31 -20
- nautobot/core/tests/test_views.py +6 -6
- nautobot/core/urls.py +8 -3
- nautobot/core/utils/deprecation.py +29 -0
- nautobot/core/utils/filtering.py +12 -9
- nautobot/core/utils/lookup.py +37 -2
- nautobot/core/utils/requests.py +4 -1
- nautobot/core/views/__init__.py +137 -24
- nautobot/core/views/generic.py +119 -67
- nautobot/core/views/mixins.py +105 -36
- nautobot/core/views/paginator.py +9 -3
- nautobot/core/views/renderers.py +121 -56
- nautobot/core/views/utils.py +81 -1
- nautobot/dcim/__init__.py +0 -1
- nautobot/dcim/api/serializers.py +180 -44
- nautobot/dcim/api/urls.py +7 -3
- nautobot/dcim/api/views.py +53 -7
- nautobot/dcim/apps.py +3 -0
- nautobot/dcim/choices.py +25 -0
- nautobot/dcim/constants.py +7 -0
- nautobot/dcim/factory.py +252 -18
- nautobot/dcim/filters/__init__.py +373 -193
- nautobot/dcim/filters/mixins.py +274 -1
- nautobot/dcim/forms.py +834 -121
- nautobot/dcim/graphql/types.py +2 -2
- nautobot/dcim/homepage.py +1 -1
- nautobot/dcim/migrations/0059_add_role_field_to_interface_models.py +27 -0
- nautobot/dcim/migrations/0060_alter_cable_status_alter_consoleport__path_and_more.py +303 -0
- nautobot/dcim/migrations/0061_module_models.py +862 -0
- nautobot/dcim/migrations/0062_module_data_migration.py +25 -0
- nautobot/dcim/models/__init__.py +8 -0
- nautobot/dcim/models/cables.py +15 -0
- nautobot/dcim/models/device_component_templates.py +207 -53
- nautobot/dcim/models/device_components.py +282 -99
- nautobot/dcim/models/devices.py +472 -13
- nautobot/dcim/models/racks.py +0 -1
- nautobot/dcim/navigation.py +47 -0
- nautobot/dcim/signals.py +3 -3
- nautobot/dcim/tables/__init__.py +35 -23
- nautobot/dcim/tables/devices.py +248 -47
- nautobot/dcim/tables/devicetypes.py +65 -9
- nautobot/dcim/tables/racks.py +5 -1
- nautobot/dcim/tables/template_code.py +46 -26
- nautobot/dcim/templates/dcim/cable_connect.html +76 -3
- nautobot/dcim/templates/dcim/console_port_connection_list.html +7 -5
- nautobot/dcim/templates/dcim/device/base.html +14 -6
- nautobot/dcim/templates/dcim/device/consoleports.html +2 -3
- nautobot/dcim/templates/dcim/device/consoleserverports.html +2 -3
- nautobot/dcim/templates/dcim/device/devicebays.html +6 -7
- nautobot/dcim/templates/dcim/device/frontports.html +2 -3
- nautobot/dcim/templates/dcim/device/interfaces.html +2 -3
- nautobot/dcim/templates/dcim/device/inventory.html +2 -3
- nautobot/dcim/templates/dcim/device/modulebays.html +49 -0
- nautobot/dcim/templates/dcim/device/poweroutlets.html +2 -3
- nautobot/dcim/templates/dcim/device/powerports.html +2 -3
- nautobot/dcim/templates/dcim/device/rearports.html +2 -3
- nautobot/dcim/templates/dcim/device.html +45 -1
- nautobot/dcim/templates/dcim/device_component.html +13 -5
- nautobot/dcim/templates/dcim/device_list.html +2 -1
- nautobot/dcim/templates/dcim/deviceredundancygroup_retrieve.html +6 -0
- nautobot/dcim/templates/dcim/devicetype.html +99 -98
- nautobot/dcim/templates/dcim/devicetype_list.html +8 -16
- nautobot/dcim/templates/dcim/inc/devicetype_component_table.html +1 -1
- nautobot/dcim/templates/dcim/inc/moduletype_component_table.html +39 -0
- nautobot/dcim/templates/dcim/interface.html +17 -2
- nautobot/dcim/templates/dcim/interface_connection_list.html +7 -5
- nautobot/dcim/templates/dcim/interface_edit.html +1 -0
- nautobot/dcim/templates/dcim/manufacturer.html +24 -0
- nautobot/dcim/templates/dcim/module/base.html +97 -0
- nautobot/dcim/templates/dcim/module_bulk_destroy.html +5 -0
- nautobot/dcim/templates/dcim/module_consoleports.html +53 -0
- nautobot/dcim/templates/dcim/module_consoleserverports.html +53 -0
- nautobot/dcim/templates/dcim/module_destroy.html +5 -0
- nautobot/dcim/templates/dcim/module_frontports.html +53 -0
- nautobot/dcim/templates/dcim/module_interfaces.html +57 -0
- nautobot/dcim/templates/dcim/module_list.html +20 -0
- nautobot/dcim/templates/dcim/module_modulebays.html +49 -0
- nautobot/dcim/templates/dcim/module_poweroutlets.html +53 -0
- nautobot/dcim/templates/dcim/module_powerports.html +53 -0
- nautobot/dcim/templates/dcim/module_rearports.html +53 -0
- nautobot/dcim/templates/dcim/module_retrieve.html +63 -0
- nautobot/dcim/templates/dcim/module_update.html +71 -0
- nautobot/dcim/templates/dcim/modulebay_bulk_destroy.html +5 -0
- nautobot/dcim/templates/dcim/modulebay_destroy.html +8 -0
- nautobot/dcim/templates/dcim/modulebay_retrieve.html +101 -0
- nautobot/dcim/templates/dcim/moduletype_list.html +11 -0
- nautobot/dcim/templates/dcim/moduletype_retrieve.html +159 -0
- nautobot/dcim/templates/dcim/power_port_connection_list.html +7 -5
- nautobot/dcim/templates/dcim/softwareimagefile_retrieve.html +65 -19
- nautobot/dcim/tests/integration/test_cable_connect_form.py +4 -4
- nautobot/dcim/tests/test_api.py +693 -208
- nautobot/dcim/tests/test_filters.py +843 -217
- nautobot/dcim/tests/test_models.py +1103 -8
- nautobot/dcim/tests/test_views.py +1525 -343
- nautobot/dcim/urls.py +17 -2
- nautobot/dcim/utils.py +2 -3
- nautobot/dcim/views.py +1109 -113
- nautobot/extras/__init__.py +0 -1
- nautobot/extras/api/serializers.py +115 -3
- nautobot/extras/api/urls.py +12 -0
- nautobot/extras/api/views.py +73 -59
- nautobot/extras/apps.py +2 -2
- nautobot/extras/choices.py +43 -0
- nautobot/extras/context_managers.py +13 -8
- nautobot/extras/datasources/git.py +2 -0
- nautobot/extras/factory.py +460 -9
- nautobot/extras/filters/__init__.py +174 -3
- nautobot/extras/filters/mixins.py +46 -43
- nautobot/extras/forms/base.py +24 -5
- nautobot/extras/forms/forms.py +227 -8
- nautobot/extras/forms/mixins.py +93 -0
- nautobot/extras/graphql/types.py +23 -10
- nautobot/extras/homepage.py +26 -3
- nautobot/extras/jobs.py +2 -2
- nautobot/extras/management/__init__.py +1 -0
- nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +1 -16
- nautobot/extras/migrations/0021_customfield_changelog_data.py +1 -0
- nautobot/extras/migrations/0109_dynamicgroup_group_type_dynamicgroup_tags_and_more.py +108 -0
- nautobot/extras/migrations/0110_alter_configcontext_cluster_groups_and_more.py +111 -0
- nautobot/extras/migrations/0111_metadata.py +162 -0
- nautobot/extras/migrations/0112_dynamic_group_group_type_data_migration.py +28 -0
- nautobot/extras/migrations/0113_saved_views.py +77 -0
- nautobot/extras/models/__init__.py +15 -1
- nautobot/extras/models/change_logging.py +3 -3
- nautobot/extras/models/contacts.py +4 -0
- nautobot/extras/models/customfields.py +18 -3
- nautobot/extras/models/groups.py +389 -225
- nautobot/extras/models/jobs.py +87 -3
- nautobot/extras/models/metadata.py +441 -0
- nautobot/extras/models/mixins.py +72 -62
- nautobot/extras/models/models.py +118 -9
- nautobot/extras/models/relationships.py +9 -2
- nautobot/extras/models/tags.py +13 -2
- nautobot/extras/navigation.py +57 -0
- nautobot/extras/plugins/__init__.py +3 -1
- nautobot/extras/querysets.py +30 -66
- nautobot/extras/signals.py +109 -101
- nautobot/extras/tables.py +201 -17
- nautobot/extras/templates/extras/dynamicgroup.html +44 -15
- nautobot/extras/templates/extras/dynamicgroup_edit.html +2 -0
- nautobot/extras/templates/extras/job.html +1 -1
- nautobot/extras/templates/extras/job_detail.html +11 -0
- nautobot/extras/templates/extras/jobresult.html +61 -74
- nautobot/extras/templates/extras/metadatatype_create.html +89 -0
- nautobot/extras/templates/extras/metadatatype_retrieve.html +67 -0
- nautobot/extras/templates/extras/object_dynamicgroups.html +7 -0
- nautobot/extras/templates/extras/objectchange_list.html +0 -12
- nautobot/extras/templates/extras/plugins_list.html +1 -3
- nautobot/extras/templates/extras/role_retrieve.html +48 -0
- nautobot/extras/templates/extras/staticgroupassociation_retrieve.html +20 -0
- nautobot/extras/tests/integration/test_customfields.py +1 -0
- nautobot/extras/tests/test_api.py +509 -23
- nautobot/extras/tests/test_changelog.py +20 -9
- nautobot/extras/tests/test_context_managers.py +22 -15
- nautobot/extras/tests/test_datasources.py +13 -1
- nautobot/extras/tests/test_dynamicgroups.py +201 -171
- nautobot/extras/tests/test_filters.py +211 -12
- nautobot/extras/tests/test_jobs.py +6 -6
- nautobot/extras/tests/test_models.py +501 -4
- nautobot/extras/tests/test_relationships.py +1 -0
- nautobot/extras/tests/test_views.py +586 -8
- nautobot/extras/tests/test_webhooks.py +1 -1
- nautobot/extras/urls.py +5 -0
- nautobot/extras/utils.py +85 -16
- nautobot/extras/views.py +562 -122
- nautobot/ipam/__init__.py +0 -1
- nautobot/ipam/apps.py +1 -0
- nautobot/ipam/factory.py +17 -19
- nautobot/ipam/filters.py +13 -0
- nautobot/ipam/forms.py +8 -4
- nautobot/ipam/graphql/types.py +2 -2
- nautobot/ipam/migrations/0047_alter_ipaddress_role_alter_ipaddress_status_and_more.py +59 -0
- nautobot/ipam/models.py +20 -20
- nautobot/ipam/querysets.py +1 -1
- nautobot/ipam/signals.py +4 -2
- nautobot/ipam/tables.py +5 -0
- nautobot/ipam/templates/ipam/ipaddress_interfaces.html +1 -1
- nautobot/ipam/templates/ipam/ipaddress_vm_interfaces.html +1 -1
- nautobot/ipam/templates/ipam/prefix.html +1 -0
- nautobot/ipam/tests/test_api.py +37 -18
- nautobot/ipam/tests/test_filters.py +26 -2
- nautobot/ipam/tests/test_models.py +9 -2
- nautobot/ipam/tests/test_querysets.py +1 -1
- nautobot/ipam/tests/test_views.py +3 -2
- nautobot/ipam/urls.py +2 -2
- nautobot/ipam/views.py +20 -34
- nautobot/project-static/css/base.css +21 -0
- nautobot/project-static/css/dark.css +11 -0
- nautobot/project-static/docs/404.html +894 -90
- nautobot/project-static/docs/apps/index.html +894 -90
- nautobot/project-static/docs/apps/nautobot-apps.html +894 -90
- nautobot/project-static/docs/assets/_mkdocstrings.css +5 -0
- nautobot/project-static/docs/assets/stylesheets/main.3cba04c6.min.css +1 -0
- nautobot/project-static/docs/assets/stylesheets/main.3cba04c6.min.css.map +1 -0
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +921 -122
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +906 -103
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +1620 -905
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +937 -146
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +979 -190
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +903 -101
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +899 -95
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +993 -195
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +976 -133
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +1080 -274
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +1244 -336
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +1729 -877
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +1166 -383
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +2090 -1376
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +2248 -1424
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +914 -113
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +965 -165
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +1012 -225
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +1915 -1279
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +1848 -1104
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +906 -103
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +2335 -1701
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +1804 -1026
- nautobot/project-static/docs/development/apps/api/configuration-view.html +894 -90
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +894 -90
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +894 -90
- nautobot/project-static/docs/development/apps/api/models/global-search.html +894 -90
- nautobot/project-static/docs/development/apps/api/models/graphql.html +894 -90
- nautobot/project-static/docs/development/apps/api/models/index.html +944 -92
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +894 -90
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +894 -90
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +894 -90
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +894 -90
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +894 -90
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +894 -90
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +894 -90
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +894 -90
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +894 -90
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +894 -90
- nautobot/project-static/docs/development/apps/api/prometheus.html +894 -90
- nautobot/project-static/docs/development/apps/api/setup.html +894 -90
- nautobot/project-static/docs/development/apps/api/testing.html +894 -90
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +894 -90
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +894 -90
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +894 -90
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +894 -90
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/base-template.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/index.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/notes.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +894 -90
- nautobot/project-static/docs/development/apps/api/views/urls.html +894 -90
- nautobot/project-static/docs/development/apps/index.html +894 -90
- nautobot/project-static/docs/development/apps/migration/code-updates.html +894 -90
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +894 -90
- nautobot/project-static/docs/development/apps/migration/from-v1.html +894 -90
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +894 -90
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +894 -90
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +894 -90
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +894 -90
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +894 -90
- nautobot/project-static/docs/development/core/application-registry.html +894 -90
- nautobot/project-static/docs/development/core/best-practices.html +895 -90
- nautobot/project-static/docs/development/core/bootstrap-ui.html +894 -90
- nautobot/project-static/docs/development/core/caching.html +894 -90
- nautobot/project-static/docs/development/core/controllers.html +894 -90
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +894 -90
- nautobot/project-static/docs/development/core/generic-views.html +894 -90
- nautobot/project-static/docs/development/core/getting-started.html +894 -90
- nautobot/project-static/docs/development/core/homepage.html +894 -90
- nautobot/project-static/docs/development/core/index.html +905 -90
- nautobot/project-static/docs/development/core/model-checklist.html +903 -91
- nautobot/project-static/docs/development/core/model-features.html +894 -90
- nautobot/project-static/docs/development/core/natural-keys.html +894 -90
- nautobot/project-static/docs/development/core/navigation-menu.html +894 -90
- nautobot/project-static/docs/development/core/release-checklist.html +897 -93
- nautobot/project-static/docs/development/core/role-internals.html +894 -90
- nautobot/project-static/docs/development/core/settings.html +894 -90
- nautobot/project-static/docs/development/core/style-guide.html +895 -91
- nautobot/project-static/docs/development/core/templates.html +906 -91
- nautobot/project-static/docs/development/core/testing.html +894 -90
- nautobot/project-static/docs/development/core/user-preferences.html +894 -90
- nautobot/project-static/docs/development/index.html +894 -90
- nautobot/project-static/docs/development/jobs/index.html +1271 -453
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +894 -90
- nautobot/project-static/docs/index.html +9032 -13
- nautobot/project-static/docs/media/models/cloud_aws_direct_connect_dark.png +0 -0
- nautobot/project-static/docs/media/models/cloud_aws_direct_connect_light.png +0 -0
- nautobot/project-static/docs/models/cloud/cloudaccount.html +15 -0
- nautobot/project-static/docs/models/cloud/cloudnetwork.html +15 -0
- nautobot/project-static/docs/models/cloud/cloudnetworkprefixassignment.html +15 -0
- nautobot/project-static/docs/models/cloud/cloudresourcetype.html +15 -0
- nautobot/project-static/docs/models/cloud/cloudservice.html +15 -0
- nautobot/project-static/docs/models/cloud/cloudservicenetworkassignment.html +15 -0
- nautobot/project-static/docs/models/dcim/module.html +15 -0
- nautobot/project-static/docs/models/dcim/modulebay.html +15 -0
- nautobot/project-static/docs/models/dcim/modulebaytemplate.html +15 -0
- nautobot/project-static/docs/models/dcim/moduletype.html +15 -0
- nautobot/project-static/docs/models/extras/metadatachoice.html +15 -0
- nautobot/project-static/docs/models/extras/metadatatype.html +15 -0
- nautobot/project-static/docs/models/extras/objectmetadata.html +15 -0
- nautobot/project-static/docs/models/extras/role.html +15 -0
- nautobot/project-static/docs/models/extras/savedview.html +15 -0
- nautobot/project-static/docs/models/extras/staticgroupassociation.html +15 -0
- nautobot/project-static/docs/models/extras/status.html +15 -0
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +902 -91
- nautobot/project-static/docs/overview/design_philosophy.html +896 -92
- nautobot/project-static/docs/overview/index.html +13 -8228
- nautobot/project-static/docs/release-notes/index.html +1131 -94
- nautobot/project-static/docs/release-notes/version-1.0.html +894 -90
- nautobot/project-static/docs/release-notes/version-1.1.html +894 -90
- nautobot/project-static/docs/release-notes/version-1.2.html +894 -90
- nautobot/project-static/docs/release-notes/version-1.3.html +894 -90
- nautobot/project-static/docs/release-notes/version-1.4.html +894 -90
- nautobot/project-static/docs/release-notes/version-1.5.html +895 -91
- nautobot/project-static/docs/release-notes/version-1.6.html +895 -91
- nautobot/project-static/docs/release-notes/version-2.0.html +894 -90
- nautobot/project-static/docs/release-notes/version-2.1.html +894 -90
- nautobot/project-static/docs/release-notes/version-2.2.html +1137 -196
- nautobot/project-static/docs/release-notes/version-2.3.html +9954 -0
- nautobot/project-static/docs/requirements.txt +5 -5
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +335 -260
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +894 -90
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +894 -90
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +894 -90
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +894 -90
- nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +1025 -175
- nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +894 -90
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +894 -90
- nautobot/project-static/docs/user-guide/administration/guides/caching.html +894 -90
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +902 -90
- nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +894 -90
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +894 -90
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +894 -90
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +894 -90
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +894 -90
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +894 -90
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +894 -90
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +894 -90
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +946 -155
- nautobot/project-static/docs/user-guide/administration/installation/index.html +903 -95
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +936 -124
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +956 -159
- nautobot/project-static/docs/user-guide/administration/installation/services.html +915 -114
- nautobot/project-static/docs/user-guide/administration/installation-extras/docker.html +910 -101
- nautobot/project-static/docs/user-guide/administration/installation-extras/health-checks.html +894 -90
- nautobot/project-static/docs/user-guide/administration/installation-extras/selinux-troubleshooting.html +894 -90
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +894 -90
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +894 -90
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +977 -121
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +894 -90
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +894 -90
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +894 -90
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +894 -90
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +894 -90
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +894 -90
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +894 -90
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +894 -90
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +894 -90
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +895 -91
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +898 -90
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +897 -93
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +8984 -0
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +8828 -0
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +8829 -0
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +8828 -0
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +8829 -0
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +8833 -0
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +8828 -0
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +925 -107
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +925 -107
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +920 -102
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +925 -107
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +915 -107
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +922 -118
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +923 -119
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +920 -116
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +916 -107
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +928 -110
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +938 -120
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +930 -108
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +939 -121
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +930 -112
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +920 -116
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +923 -119
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +925 -117
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +8828 -0
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +8846 -0
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +8843 -0
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +8823 -0
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +918 -114
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +942 -85
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +926 -108
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +945 -88
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +923 -105
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +931 -127
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +920 -116
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +924 -106
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +926 -108
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +908 -104
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +938 -90
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +899 -91
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +899 -91
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +903 -98
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +894 -90
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +899 -91
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/clear-view-button.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/cleared-view.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/config-table-columns-to-locations.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/configure-button.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/create-saved-view-success.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/current-saved-view-drop-down-menu.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/default-location-list-view.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/dropdown-button-after-new-saved-view.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/filter-application-to-locations.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/filter-button.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/global-default-location-list-view.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/location-list-view-with-saved-views.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/navigation-menu.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/save-as-new-view-drop-down.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/save-view-modal.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-admin-edit-buttons.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-admin-edit-success.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-admin-edit-view-unchecked.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-admin-edit-view.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-different-user.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/saved-view-modal-unchecked.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/set-as-my-default-button.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/set-as-my-default-success.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/unsaved-saved-view.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/saved-views/updated-saved-view.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +894 -90
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +894 -90
- nautobot/project-static/docs/user-guide/index.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +1260 -787
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +897 -93
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +898 -90
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +897 -93
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +9061 -0
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +897 -93
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +897 -93
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +9137 -0
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +897 -93
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +8933 -0
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +952 -123
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +894 -90
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +894 -90
- nautobot/project-static/js/forms.js +71 -0
- nautobot/project-static/js/table_sorting_indicator.js +46 -0
- nautobot/project-static/js/tableconfig.js +6 -1
- nautobot/project-static/materialdesignicons-7.4.47/css/materialdesignicons.min.css +3 -0
- nautobot/project-static/{materialdesignicons-6.5.95 → materialdesignicons-7.4.47}/fonts/materialdesignicons-webfont.eot +0 -0
- nautobot/project-static/{materialdesignicons-6.5.95 → materialdesignicons-7.4.47}/fonts/materialdesignicons-webfont.ttf +0 -0
- nautobot/project-static/materialdesignicons-7.4.47/fonts/materialdesignicons-webfont.woff +0 -0
- nautobot/project-static/materialdesignicons-7.4.47/fonts/materialdesignicons-webfont.woff2 +0 -0
- nautobot/tenancy/__init__.py +0 -1
- nautobot/tenancy/apps.py +1 -0
- nautobot/tenancy/factory.py +3 -2
- nautobot/tenancy/filters/__init__.py +1 -0
- nautobot/tenancy/forms.py +1 -1
- nautobot/tenancy/templates/tenancy/tenant.html +24 -20
- nautobot/tenancy/views.py +11 -10
- nautobot/users/__init__.py +0 -1
- nautobot/users/api/serializers.py +1 -1
- nautobot/users/api/views.py +4 -2
- nautobot/users/apps.py +3 -2
- nautobot/users/factory.py +3 -3
- nautobot/users/migrations/0010_user_default_saved_views.py +20 -0
- nautobot/users/models.py +12 -0
- nautobot/users/tests/test_filters.py +6 -3
- nautobot/users/urls.py +8 -0
- nautobot/virtualization/__init__.py +0 -1
- nautobot/virtualization/apps.py +1 -0
- nautobot/virtualization/filters.py +6 -1
- nautobot/virtualization/forms.py +11 -3
- nautobot/virtualization/graphql/types.py +2 -2
- nautobot/virtualization/migrations/0029_add_role_field_to_interface_models.py +27 -0
- nautobot/virtualization/migrations/0030_alter_virtualmachine_local_config_context_data_owner_content_type_and_more.py +67 -0
- nautobot/virtualization/models.py +0 -2
- nautobot/virtualization/tables.py +12 -8
- nautobot/virtualization/templates/virtualization/virtualmachine.html +1 -1
- nautobot/virtualization/templates/virtualization/vminterface.html +7 -1
- nautobot/virtualization/templates/virtualization/vminterface_edit.html +1 -0
- nautobot/virtualization/tests/test_api.py +9 -4
- nautobot/virtualization/tests/test_filters.py +22 -0
- nautobot/virtualization/tests/test_models.py +7 -3
- nautobot/virtualization/tests/test_views.py +19 -3
- nautobot/virtualization/urls.py +2 -2
- nautobot/virtualization/views.py +10 -32
- {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/METADATA +21 -19
- {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/RECORD +684 -564
- nautobot/project-static/docs/assets/stylesheets/main.76a95c52.min.css +0 -1
- nautobot/project-static/docs/assets/stylesheets/main.76a95c52.min.css.map +0 -1
- nautobot/project-static/materialdesignicons-6.5.95/.github/ISSUE_TEMPLATE.md +0 -3
- nautobot/project-static/materialdesignicons-6.5.95/README.md +0 -25
- nautobot/project-static/materialdesignicons-6.5.95/css/materialdesignicons.css +0 -26654
- nautobot/project-static/materialdesignicons-6.5.95/css/materialdesignicons.css.map +0 -16
- nautobot/project-static/materialdesignicons-6.5.95/css/materialdesignicons.min.css +0 -3
- nautobot/project-static/materialdesignicons-6.5.95/css/materialdesignicons.min.css.map +0 -16
- nautobot/project-static/materialdesignicons-6.5.95/fonts/materialdesignicons-webfont.woff +0 -0
- nautobot/project-static/materialdesignicons-6.5.95/fonts/materialdesignicons-webfont.woff2 +0 -0
- nautobot/project-static/materialdesignicons-6.5.95/package.json +0 -28
- nautobot/project-static/materialdesignicons-6.5.95/preview.html +0 -717
- nautobot/project-static/materialdesignicons-6.5.95/scss/_animated.scss +0 -27
- nautobot/project-static/materialdesignicons-6.5.95/scss/_core.scss +0 -10
- nautobot/project-static/materialdesignicons-6.5.95/scss/_extras.scss +0 -65
- nautobot/project-static/materialdesignicons-6.5.95/scss/_functions.scss +0 -20
- nautobot/project-static/materialdesignicons-6.5.95/scss/_icons.scss +0 -10
- nautobot/project-static/materialdesignicons-6.5.95/scss/_path.scss +0 -10
- nautobot/project-static/materialdesignicons-6.5.95/scss/_variables.scss +0 -6606
- nautobot/project-static/materialdesignicons-6.5.95/scss/materialdesignicons.scss +0 -8
- /nautobot/project-static/{materialdesignicons-6.5.95 → materialdesignicons-7.4.47}/LICENSE +0 -0
- {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/NOTICE +0 -0
- {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/WHEEL +0 -0
- {nautobot-2.2.8.dist-info → nautobot-2.3.0.dist-info}/entry_points.txt +0 -0
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
{% extends base_template %}
|
|
2
|
-
{% load helpers %}
|
|
3
2
|
|
|
4
3
|
{% block title %}{{ block.super }} - Change Log{% endblock %}
|
|
5
4
|
|
|
6
5
|
{% block content %}
|
|
7
6
|
{% include 'panel_table.html' %}
|
|
8
7
|
{% include 'inc/paginator.html' with paginator=table.paginator page=table.page %}
|
|
9
|
-
<div class="text-muted">
|
|
10
|
-
Change log retention:
|
|
11
|
-
{% if "CHANGELOG_RETENTION"|settings_or_config %}
|
|
12
|
-
{{ "CHANGELOG_RETENTION"|settings_or_config }} days
|
|
13
|
-
{% else %}
|
|
14
|
-
Indefinite
|
|
15
|
-
{% endif %}
|
|
16
|
-
</div>
|
|
17
8
|
{% endblock %}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{% extends 'base.html' %}
|
|
2
2
|
{% load buttons %}
|
|
3
3
|
{% load helpers %}
|
|
4
|
+
{% load perms %}
|
|
4
5
|
{% load plugins %}
|
|
5
6
|
{% load static %}
|
|
6
7
|
|
|
@@ -40,27 +41,123 @@
|
|
|
40
41
|
{% plugin_buttons content_type.model_class 'list' %}
|
|
41
42
|
{% if table and request.user.is_authenticated and table_config_form %}
|
|
42
43
|
{% block table_config_button %}
|
|
43
|
-
|
|
44
|
+
{% table_config_button table table_name="ObjectTable" %}
|
|
44
45
|
{% endblock table_config_button %}
|
|
45
46
|
{% endif %}
|
|
46
47
|
{% if filter_form or dynamic_filter_form %}
|
|
47
48
|
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#FilterForm_modal" title="Add filters" id="id__filterbtn"><i class="mdi mdi-filter"></i> Filter</button>
|
|
48
49
|
{% endif %}
|
|
49
|
-
{% if
|
|
50
|
-
|
|
50
|
+
{% if model.is_saved_view_model %}
|
|
51
|
+
<div class="btn-group">
|
|
52
|
+
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
|
53
|
+
<span class="mdi mdi-view-compact-outline" aria-hidden="true"></span> Saved Views <span class="caret"></span>
|
|
54
|
+
</button>
|
|
55
|
+
<ul class="dropdown-menu">
|
|
56
|
+
{% for saved_view in saved_views %}
|
|
57
|
+
<li>
|
|
58
|
+
{% if saved_view == current_saved_view %}
|
|
59
|
+
<a href="{% url list_url %}?clear_view=true">
|
|
60
|
+
<i class="mdi mdi-check-bold text-bold" aria-hidden="true"></i>
|
|
61
|
+
<strong>
|
|
62
|
+
{{saved_view.name}}
|
|
63
|
+
</strong>
|
|
64
|
+
</a>
|
|
65
|
+
{% else %}
|
|
66
|
+
<a href="{{ saved_view.get_absolute_url }}">
|
|
67
|
+
<i class="mdi mdi-view-compact-outline text-muted" aria-hidden="true"></i>
|
|
68
|
+
{{saved_view.name}}
|
|
69
|
+
</a>
|
|
70
|
+
{% endif %}
|
|
71
|
+
</li>
|
|
72
|
+
{% endfor %}
|
|
73
|
+
{% if saved_views %}
|
|
74
|
+
<li role="separator" class="divider"></li>
|
|
75
|
+
{% endif %}
|
|
76
|
+
{% if current_saved_view %}
|
|
77
|
+
<li>
|
|
78
|
+
<a href="{% url 'extras:savedview_update_config' pk=request.GET.saved_view %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}">
|
|
79
|
+
<i class="mdi mdi-content-save-outline text-muted" aria-hidden="true"></i>
|
|
80
|
+
<span>Update Current Saved View</span>
|
|
81
|
+
</a>
|
|
82
|
+
</li>
|
|
83
|
+
<li>
|
|
84
|
+
<a href="{% url 'extras:savedview_set_default' pk=request.GET.saved_view %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}">
|
|
85
|
+
<i class="mdi mdi-star text-muted" aria-hidden="true"></i>
|
|
86
|
+
<span>Set As My Default</span>
|
|
87
|
+
</a>
|
|
88
|
+
</li>
|
|
89
|
+
{% endif %}
|
|
90
|
+
<li>
|
|
91
|
+
<a href="" data-toggle="modal" data-target="#saved_view_modal" title="Save Current View As">
|
|
92
|
+
<i class="mdi mdi-content-save-plus-outline text-muted" aria-hidden="true"></i>
|
|
93
|
+
<span>Save As New View</span>
|
|
94
|
+
</a>
|
|
95
|
+
</li>
|
|
96
|
+
{% if current_saved_view %}
|
|
97
|
+
<li>
|
|
98
|
+
<a href="{% url 'extras:savedview_delete' pk=request.GET.saved_view %}">
|
|
99
|
+
<i class="mdi mdi-trash-can-outline text-danger" aria-hidden="true"></i>
|
|
100
|
+
<span class="text-danger">Delete Current Saved View</span>
|
|
101
|
+
</a>
|
|
102
|
+
</li>
|
|
103
|
+
{% endif %}
|
|
104
|
+
</ul>
|
|
105
|
+
</div>
|
|
51
106
|
{% endif %}
|
|
107
|
+
<div class="btn-group">
|
|
108
|
+
{% if permissions.add and 'add' in action_buttons %}
|
|
109
|
+
{% add_button content_type.model_class|validated_viewname:"add" verbose_name=model|meta:"verbose_name"|bettertitle %}
|
|
110
|
+
<button type="button" id="actions-dropdown" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
|
|
111
|
+
<span class="caret"></span>
|
|
112
|
+
<span class="sr-only">Toggle Dropdown</span>
|
|
113
|
+
</button>
|
|
114
|
+
{% elif permissions.add and 'import' in action_buttons %}
|
|
115
|
+
<button type="button" id="actions-dropdown" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
|
|
116
|
+
Actions <span class="caret"></span>
|
|
117
|
+
</button>
|
|
118
|
+
{% elif 'export' in action_buttons %}
|
|
119
|
+
<button type="button" id="actions-dropdown" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
|
|
120
|
+
Actions <span class="caret"></span>
|
|
121
|
+
</button>
|
|
122
|
+
{% endif %}
|
|
123
|
+
<ul class="dropdown-menu pull-right" role="menu">
|
|
124
|
+
{% if permissions.add and 'import' in action_buttons %}
|
|
125
|
+
{% block import_list_element %}
|
|
126
|
+
{% job_import_button content_type list_element=True%}
|
|
127
|
+
{% endblock import_list_element %}
|
|
128
|
+
{% endif %}
|
|
129
|
+
{% if permissions.add and 'import' in action_buttons and 'export' in action_buttons %}
|
|
130
|
+
<li class="divider"></li>
|
|
131
|
+
{% endif %}
|
|
132
|
+
{% if 'export' in action_buttons %}
|
|
133
|
+
{% block export_list_element %}
|
|
134
|
+
{% export_button content_type list_element=True %}
|
|
135
|
+
{% endblock export_list_element %}
|
|
136
|
+
{% endif %}
|
|
137
|
+
</ul>
|
|
138
|
+
</div>
|
|
139
|
+
{% comment %} TODO: 3.0 Remove legacy import_button and export button {% endcomment %}
|
|
52
140
|
{% if permissions.add and 'import' in action_buttons %}
|
|
53
141
|
{% block import_button %}
|
|
54
|
-
{% job_import_button content_type %}
|
|
55
142
|
{% endblock import_button %}
|
|
56
143
|
{% endif %}
|
|
57
144
|
{% if 'export' in action_buttons %}
|
|
58
145
|
{% block export_button %}
|
|
59
|
-
{% export_button content_type %}
|
|
60
146
|
{% endblock export_button %}
|
|
61
147
|
{% endif %}
|
|
62
148
|
</div>
|
|
63
|
-
<h1>{% block title %}
|
|
149
|
+
<h1>{% block title %}
|
|
150
|
+
{{ title }}
|
|
151
|
+
{% if current_saved_view %}
|
|
152
|
+
—
|
|
153
|
+
{% if new_changes_not_applied %}
|
|
154
|
+
<i title="Pending changes not saved">{{ current_saved_view.name }}</i>
|
|
155
|
+
{% else %}
|
|
156
|
+
{{ current_saved_view.name }}
|
|
157
|
+
{% endif %}
|
|
158
|
+
{% endif %}
|
|
159
|
+
{% endblock %}
|
|
160
|
+
</h1>
|
|
64
161
|
{% block header_extra %}{% endblock %}
|
|
65
162
|
{% if filter_params %}
|
|
66
163
|
<div class="filters-applied">
|
|
@@ -103,7 +200,7 @@
|
|
|
103
200
|
<div class="col-md-12">
|
|
104
201
|
{% with bulk_edit_url=content_type.model_class|validated_viewname:"bulk_edit" bulk_delete_url=content_type.model_class|validated_viewname:"bulk_delete" %}
|
|
105
202
|
{% if permissions.change or permissions.delete %}
|
|
106
|
-
<form method="post" class="form form-horizontal">
|
|
203
|
+
<form id="object_list_form" method="post" class="form form-horizontal">
|
|
107
204
|
{% csrf_token %}
|
|
108
205
|
<input type="hidden" name="return_url" value="{% if return_url %}{{ return_url }}{% else %}{{ request.path }}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}{% endif %}" />
|
|
109
206
|
{% if table.paginator.num_pages > 1 %}
|
|
@@ -117,6 +214,18 @@
|
|
|
117
214
|
</label>
|
|
118
215
|
</div>
|
|
119
216
|
<div class="pull-right">
|
|
217
|
+
{% if content_type.model_class.is_dynamic_group_associable_model and perms.extras.add_staticgroupassociation %}
|
|
218
|
+
<button type="button"
|
|
219
|
+
id="update_dynamic_groups_for_all"
|
|
220
|
+
data-toggle="modal"
|
|
221
|
+
data-target="#dynamic_group_assignment_modal"
|
|
222
|
+
data-objects="all"
|
|
223
|
+
class="btn btn-primary btn-sm"
|
|
224
|
+
disabled="disabled">
|
|
225
|
+
<span class="mdi mdi-group" aria-hidden="true"></span>
|
|
226
|
+
Update Group Assignment for All
|
|
227
|
+
</button>
|
|
228
|
+
{% endif %}
|
|
120
229
|
{% if bulk_edit_url and permissions.change %}
|
|
121
230
|
<button type="submit" name="_edit" formaction="{% url bulk_edit_url %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-warning btn-sm" disabled="disabled">
|
|
122
231
|
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit All
|
|
@@ -133,18 +242,11 @@
|
|
|
133
242
|
</div>
|
|
134
243
|
{% endif %}
|
|
135
244
|
{% include table_template|default:'panel_table.html' %}
|
|
245
|
+
|
|
136
246
|
<div class="pull-left noprint">
|
|
247
|
+
{% consolidate_bulk_action_buttons %}
|
|
137
248
|
{% block bulk_buttons %}{% endblock %}
|
|
138
|
-
|
|
139
|
-
<button type="submit" name="_edit" formaction="{% url bulk_edit_url %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-warning btn-sm">
|
|
140
|
-
<span class="mdi mdi-pencil" aria-hidden="true"></span> Edit Selected
|
|
141
|
-
</button>
|
|
142
|
-
{% endif %}
|
|
143
|
-
{% if bulk_delete_url and permissions.delete %}
|
|
144
|
-
<button type="submit" name="_delete" formaction="{% url bulk_delete_url %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-danger btn-sm">
|
|
145
|
-
<span class="mdi mdi-trash-can-outline" aria-hidden="true"></span> Delete Selected
|
|
146
|
-
</button>
|
|
147
|
-
{% endif %}
|
|
249
|
+
|
|
148
250
|
</div>
|
|
149
251
|
</form>
|
|
150
252
|
{% else %}
|
|
@@ -158,6 +260,10 @@
|
|
|
158
260
|
</div>
|
|
159
261
|
{% if table %}{% table_config_form table table_name="ObjectTable" %}{% endif %}
|
|
160
262
|
{% filter_form_modal filter_form dynamic_filter_form model_plural_name=title %}
|
|
263
|
+
{% if model.is_saved_view_model %}
|
|
264
|
+
{% saved_view_modal request.GET.urlencode list_url model request %}
|
|
265
|
+
{% endif %}
|
|
266
|
+
{% dynamic_group_assignment_modal request=request content_type=content_type %}
|
|
161
267
|
{% endblock %}
|
|
162
268
|
|
|
163
269
|
{% block javascript %}
|
|
@@ -180,5 +286,38 @@
|
|
|
180
286
|
added: jsify_form,
|
|
181
287
|
removed: (row) => { row.remove(); }
|
|
182
288
|
});
|
|
289
|
+
|
|
290
|
+
// TODO: move this to a JS file that is auto-included by dynamic_group_assignment_modal templatetag
|
|
291
|
+
$("#dynamic_group_assignment_modal").on("show.bs.modal", function (event) {
|
|
292
|
+
const button = $(event.relatedTarget);
|
|
293
|
+
const selected_or_all = button.data("objects");
|
|
294
|
+
const pks_target = document.getElementById("dynamic_group_assignment_pks");
|
|
295
|
+
pks_target.replaceChildren();
|
|
296
|
+
if (selected_or_all == "all") {
|
|
297
|
+
document.getElementById("dynamic_group_assignment_all").value = true;
|
|
298
|
+
} else {
|
|
299
|
+
document.getElementById("dynamic_group_assignment_all").value = "";
|
|
300
|
+
const formData = new FormData(document.getElementById("object_list_form"));
|
|
301
|
+
for (let pk of formData.getAll("pk")) {
|
|
302
|
+
let input = document.createElement("input");
|
|
303
|
+
input.setAttribute("type", "hidden");
|
|
304
|
+
input.setAttribute("name", "pk");
|
|
305
|
+
input.setAttribute("value", pk);
|
|
306
|
+
pks_target.append(input);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
document.getElementById("dynamic_group_assignment_cancel").addEventListener("click", (e) => {
|
|
312
|
+
// Clear form data on cancel, but not on "close" "x" button
|
|
313
|
+
$("#dynamic_group_assignment_modal").modal("hide");
|
|
314
|
+
document.getElementById("dynamic_group_assignment_all").value = "";
|
|
315
|
+
document.getElementById("dynamic_group_assignment_pks").replaceChildren();
|
|
316
|
+
document.getElementById("id_create_and_assign_to_new_group_name").value = "";
|
|
317
|
+
$("#id_add_to_groups").val(null).trigger("change");
|
|
318
|
+
$("#id_remove_from_groups").val(null).trigger("change");
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
|
|
183
322
|
</script>
|
|
184
323
|
{% endblock %}
|
|
@@ -46,15 +46,7 @@
|
|
|
46
46
|
{% block buttons %}
|
|
47
47
|
{% plugin_buttons object %}
|
|
48
48
|
{% block extra_buttons %}{% endblock extra_buttons %}
|
|
49
|
-
{%
|
|
50
|
-
{% clone_button object %}
|
|
51
|
-
{% endif %}
|
|
52
|
-
{% if user|can_change:object %}
|
|
53
|
-
{% edit_button object %}
|
|
54
|
-
{% endif %}
|
|
55
|
-
{% if user|can_delete:object %}
|
|
56
|
-
{% delete_button object %}
|
|
57
|
-
{% endif %}
|
|
49
|
+
{% consolidate_detail_view_action_buttons %}
|
|
58
50
|
{% endblock buttons %}
|
|
59
51
|
</div>
|
|
60
52
|
|
|
@@ -102,12 +94,27 @@
|
|
|
102
94
|
</li>
|
|
103
95
|
{% endif %}
|
|
104
96
|
{% endif %}
|
|
105
|
-
{% if perms.extras.view_dynamicgroup
|
|
106
|
-
{%
|
|
107
|
-
|
|
108
|
-
<
|
|
109
|
-
|
|
110
|
-
|
|
97
|
+
{% if object.is_dynamic_group_associable_model and perms.extras.view_dynamicgroup %}
|
|
98
|
+
{% with object.dynamic_groups.count as dg_count %}
|
|
99
|
+
{% if dg_count %}
|
|
100
|
+
<li role="presentation"{% if request.GET.tab == 'dynamic_groups' %} class="active"{% endif %}>
|
|
101
|
+
<a href="{{ object.get_absolute_url }}#dynamic_groups" onclick="switch_tab(this.href)" aria-controls="dynamic_groups" role="tab" data-toggle="tab">
|
|
102
|
+
Dynamic Groups {% badge dg_count %}
|
|
103
|
+
</a>
|
|
104
|
+
</li>
|
|
105
|
+
{% endif %}
|
|
106
|
+
{% endwith %}
|
|
107
|
+
{% endif %}
|
|
108
|
+
{% if object.is_metadata_associable_model and perms.extras.view_objectmetadata %}
|
|
109
|
+
{% with object.associated_object_metadata.count as om_count %}
|
|
110
|
+
{% if om_count %}
|
|
111
|
+
<li role="presentation"{% if request.GET.tab == 'object_metadata' %} class="active"{% endif %}>
|
|
112
|
+
<a href="{{ object.get_absolute_url }}#object_metadata" onclick="switch_tab(this.href)" aria-controls="object_metadata" role="tab" data-toggle="tab">
|
|
113
|
+
Object Metadata {% badge om_count %}
|
|
114
|
+
</a>
|
|
115
|
+
</li>
|
|
116
|
+
{% endif %}
|
|
117
|
+
{% endwith %}
|
|
111
118
|
{% endif %}
|
|
112
119
|
{% if perms.extras.view_objectchange %}
|
|
113
120
|
{% if active_tab != 'changelog' and object.get_changelog_url or active_tab == 'changelog' %}
|
|
@@ -148,6 +155,7 @@
|
|
|
148
155
|
<div class="row">
|
|
149
156
|
<div class="col-md-6">
|
|
150
157
|
{% include 'inc/object_details_advanced_panel.html' %}
|
|
158
|
+
{% block advanced_content_left_page %}{% endblock advanced_content_left_page %}
|
|
151
159
|
</div>
|
|
152
160
|
<div class="col-md-6">
|
|
153
161
|
{% block advanced_content_right_page %}{% endblock advanced_content_right_page %}
|
|
@@ -203,6 +211,62 @@
|
|
|
203
211
|
</div>
|
|
204
212
|
</div>
|
|
205
213
|
{% endif %}
|
|
214
|
+
{% if object.is_dynamic_group_associable_model and perms.extras.view_dynamicgroup %}
|
|
215
|
+
<div id="dynamic_groups" role="tabpanel" class="tab-pane {% if request.GET.tab == 'dynamic_groups' %}active{% else %}fade{% endif %}">
|
|
216
|
+
<div class="row">
|
|
217
|
+
<div class="col-md-12">
|
|
218
|
+
<div class="alert alert-warning">
|
|
219
|
+
Dynamic group membership is cached for performance reasons,
|
|
220
|
+
therefore this table may not always be up-to-date.
|
|
221
|
+
<br>You can refresh the membership of any specific group by navigating to it from the list below
|
|
222
|
+
or from the <a href="{% url 'extras:dynamicgroup_list' %}">Dynamic Groups list view</a>.
|
|
223
|
+
<br>You can also refresh the membership of all groups by running the
|
|
224
|
+
<a href="{% url 'extras:job_run_by_class_path' class_path='nautobot.core.jobs.groups.RefreshDynamicGroupCaches' %}">Refresh Dynamic Group Caches job</a>.
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
227
|
+
</div>
|
|
228
|
+
<div class="row">
|
|
229
|
+
<div class="col-md-12">
|
|
230
|
+
<form method="post">
|
|
231
|
+
{% csrf_token %}
|
|
232
|
+
<div class="panel panel-default">
|
|
233
|
+
<div class="panel-heading">
|
|
234
|
+
<strong>Dynamic Groups</strong>
|
|
235
|
+
<div class="pull-right noprint">
|
|
236
|
+
<!-- Insert table config button here -->
|
|
237
|
+
</div>
|
|
238
|
+
</div>
|
|
239
|
+
<div class="table-responsive">
|
|
240
|
+
{% render_table associated_dynamic_groups_table 'inc/table.html' %}
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
</form>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
{% endif %}
|
|
248
|
+
{% if object.is_metadata_associable_model and perms.extras.view_objectmetadata %}
|
|
249
|
+
<div id="object_metadata" role="tabpanel" class="tab-pane {% if request.GET.tab == 'object_metadata' %}active{% else %}fade{% endif %}">
|
|
250
|
+
<div class="row">
|
|
251
|
+
<div class="col-md-12">
|
|
252
|
+
<form method="post">
|
|
253
|
+
{% csrf_token %}
|
|
254
|
+
<div class="panel panel-default">
|
|
255
|
+
<div class="panel-heading">
|
|
256
|
+
<strong>Object Metadata</strong>
|
|
257
|
+
<div class="pull-right noprint">
|
|
258
|
+
<!-- Insert table config button here -->
|
|
259
|
+
</div>
|
|
260
|
+
</div>
|
|
261
|
+
<div class="table-responsive">
|
|
262
|
+
{% render_table associated_object_metadata_table 'inc/table.html' %}
|
|
263
|
+
</div>
|
|
264
|
+
</div>
|
|
265
|
+
</form>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
{% endif %}
|
|
206
270
|
{% block extra_tab_content %}{% endblock extra_tab_content %}
|
|
207
271
|
</div>
|
|
208
272
|
{% endblock content %}
|
|
@@ -216,7 +280,7 @@
|
|
|
216
280
|
|
|
217
281
|
clipboard.on('error', function (e) {});
|
|
218
282
|
|
|
219
|
-
|
|
283
|
+
|
|
220
284
|
// Set initial history state
|
|
221
285
|
if (location.pathname == "{{ object.get_absolute_url }}"){
|
|
222
286
|
var tab_id = "main";
|
|
@@ -24,6 +24,14 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
</div>
|
|
26
26
|
{% endif %}
|
|
27
|
+
{% if form.dynamic_groups and perms.extras.add_staticgroupassociation %}
|
|
28
|
+
<div class="panel panel-default">
|
|
29
|
+
<div class="panel-heading"><strong>Static Assignment to Dynamic Groups</strong></div>
|
|
30
|
+
<div class="panel-body">
|
|
31
|
+
{% render_field form.dynamic_groups %}
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
{% endif %}
|
|
27
35
|
{% if form.tags %}
|
|
28
36
|
<div class="panel panel-default">
|
|
29
37
|
<div class="panel-heading"><strong>Tags</strong></div>
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
onerror="window.location='{% url 'media_failure' %}?filename=js/forms.js'"></script>
|
|
21
21
|
<script src="{% versioned_static 'js/theme.js' %}"
|
|
22
22
|
onerror="window.location='{% url 'media_failure' %}?filename=js/theme.js'"></script>
|
|
23
|
+
<script src="{% versioned_static 'js/table_sorting_indicator.js' %}"
|
|
24
|
+
onerror="window.location='{% url 'media_failure' %}?filename=js/table_sorting_indicator.js'"></script>
|
|
23
25
|
<script type="text/javascript">
|
|
24
26
|
var nautobot_api_path = "{% url 'api-root' %}";
|
|
25
27
|
var nautobot_csrf_token = "{{ csrf_token }}";
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}"
|
|
9
9
|
onerror="window.location='{% url 'media_failure' %}?filename=bootstrap-3.4.1-dist/css/bootstrap.min.css'">
|
|
10
10
|
<link rel="stylesheet"
|
|
11
|
-
href="{% static 'materialdesignicons-
|
|
12
|
-
onerror="window.location='{% url 'media_failure' %}?filename=materialdesignicons-
|
|
11
|
+
href="{% static 'materialdesignicons-7.4.47/css/materialdesignicons.min.css' %}"
|
|
12
|
+
onerror="window.location='{% url 'media_failure' %}?filename=materialdesignicons-7.4.47/css/materialdesignicons.min.css'">
|
|
13
13
|
<link rel="stylesheet"
|
|
14
14
|
href="{% static 'jquery-ui-1.13.2/jquery-ui.min.css' %}"
|
|
15
15
|
onerror="window.location='{% url 'media_failure' %}?filename=jquery-ui-1.13.2/jquery-ui.min.css'">
|
|
@@ -95,6 +95,7 @@
|
|
|
95
95
|
<ul class="collapse nav-dropdown-menu" id="adminDropdown">
|
|
96
96
|
<li><a href="{% url 'user:profile' %}"><i class="mdi mdi-account-box"></i> Profile</a></li>
|
|
97
97
|
{% if request.user.is_staff %}
|
|
98
|
+
<li><a href="{% url 'worker_status' %}"><i class="mdi mdi-server-network"></i> Worker Status</a></li>
|
|
98
99
|
<li><a href="{% url 'admin:index' %}"><i class="mdi mdi-cogs"></i> Admin</a></li>
|
|
99
100
|
{% endif %}
|
|
100
101
|
<li class="divider"></li>
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
</ul>
|
|
21
21
|
</nav>
|
|
22
22
|
{% endif %}
|
|
23
|
-
<form method="get">
|
|
23
|
+
<form method="get" class="form-inline">
|
|
24
24
|
{% for k, v_list in request.GET.lists %}
|
|
25
25
|
{% if k != 'per_page' %}
|
|
26
26
|
{% for v in v_list %}
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
{% endfor %}
|
|
29
29
|
{% endif %}
|
|
30
30
|
{% endfor %}
|
|
31
|
-
<select name="per_page" id="per_page">
|
|
31
|
+
<select name="per_page" id="per_page" class="form-control">
|
|
32
32
|
{% for n in "PER_PAGE_DEFAULTS"|settings_or_config %}
|
|
33
33
|
<option value="{{ n }}"{% if page.paginator.per_page == n %} selected="selected"{% endif %}>{{ n }}</option>
|
|
34
34
|
{% endfor %}
|
|
35
35
|
</select> per page
|
|
36
|
+
{% if page %}
|
|
37
|
+
<div class="text-right text-muted">
|
|
38
|
+
Showing {{ page.start_index }}-{{ page.end_index }} of {{ page.paginator.count }}
|
|
39
|
+
</div>
|
|
40
|
+
{% endif %}
|
|
36
41
|
</form>
|
|
37
|
-
{% if page %}
|
|
38
|
-
<div class="text-right text-muted">
|
|
39
|
-
Showing {{ page.start_index }}-{{ page.end_index }} of {{ page.paginator.count }}
|
|
40
|
-
</div>
|
|
41
|
-
{% endif %}
|
|
42
42
|
</div>
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
<button type="submit" class="btn btn-primary">
|
|
21
21
|
<span class="mdi mdi-magnify" aria-hidden="true"></span> Apply
|
|
22
22
|
</button>
|
|
23
|
-
<
|
|
23
|
+
<button type="reset" class="btn btn-default">
|
|
24
24
|
<span class="mdi mdi-close-thick" aria-hidden="true"></span> Clear
|
|
25
|
-
</
|
|
25
|
+
</button>
|
|
26
26
|
</div>
|
|
27
27
|
</form>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<tr>
|
|
7
7
|
{% for column in table.columns %}
|
|
8
8
|
{% if column.orderable %}
|
|
9
|
-
<th {{ column.attrs.th.as_html }}><a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}">{{ column.header }}</a></th>
|
|
9
|
+
<th {{ column.attrs.th.as_html }}><a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}" data-column-name="{{ column.name }}">{{ column.header }}</a></th>
|
|
10
10
|
{% else %}
|
|
11
11
|
<th {{ column.attrs.th.as_html }}>{{ column.header }}</th>
|
|
12
12
|
{% endif %}
|
|
@@ -38,4 +38,4 @@
|
|
|
38
38
|
</tr>
|
|
39
39
|
</tfoot>
|
|
40
40
|
{% endif %}
|
|
41
|
-
</table>
|
|
41
|
+
</table>
|
|
@@ -159,6 +159,19 @@ SECRET_KEY = os.getenv("NAUTOBOT_SECRET_KEY", "{{ secret_key }}")
|
|
|
159
159
|
# },
|
|
160
160
|
# }
|
|
161
161
|
|
|
162
|
+
# Enable the following to setup structlog logging for Nautobot.
|
|
163
|
+
# Configures defined loggers to use structlog and overwrites all formatters and handlers.
|
|
164
|
+
#
|
|
165
|
+
# from nautobot.core.settings_funcs import setup_structlog_logging
|
|
166
|
+
# setup_structlog_logging(
|
|
167
|
+
# LOGGING,
|
|
168
|
+
# INSTALLED_APPS,
|
|
169
|
+
# MIDDLEWARE,
|
|
170
|
+
# log_level="DEBUG" if DEBUG else "INFO",
|
|
171
|
+
# debug_db=False, # Set to True to log all database queries
|
|
172
|
+
# plain_format=bool(DEBUG), # Set to True to use human-readable structlog format over JSON
|
|
173
|
+
# )
|
|
174
|
+
|
|
162
175
|
# The file path where uploaded media such as image attachments are stored. A trailing slash is not needed.
|
|
163
176
|
#
|
|
164
177
|
# MEDIA_ROOT = os.path.join(NAUTOBOT_ROOT, "media").rstrip("/")
|
|
@@ -282,6 +295,15 @@ SECRET_KEY = os.getenv("NAUTOBOT_SECRET_KEY", "{{ secret_key }}")
|
|
|
282
295
|
# CELERY_TASK_SOFT_TIME_LIMIT = int(os.getenv("NAUTOBOT_CELERY_TASK_SOFT_TIME_LIMIT", str(5 * 60)))
|
|
283
296
|
# CELERY_TASK_TIME_LIMIT = int(os.getenv("NAUTOBOT_CELERY_TASK_TIME_LIMIT", str(10 * 60)))
|
|
284
297
|
|
|
298
|
+
# How many tasks a worker is allowed to reserve for its own consumption and execution.
|
|
299
|
+
# If set to zero (not recommended) a single worker can reserve all tasks even if other workers are free.
|
|
300
|
+
# For short running tasks (such as webhooks) you may want to set this to a larger number to increase throughput.
|
|
301
|
+
# Conversely, for long running tasks (such as SSoT or Golden-Config Jobs at scale) you may want to set this to 1
|
|
302
|
+
# so that a worker executing a long-running task will not prefetch other tasks, which would block their execution
|
|
303
|
+
# until the long-running task completes.
|
|
304
|
+
# https://docs.celeryq.dev/en/stable/userguide/optimizing.html#prefetch-limits
|
|
305
|
+
# CELERY_WORKER_PREFETCH_MULTIPLIER = int(os.getenv("NAUTOBOT_CELERY_WORKER_PREFETCH_MULTIPLIER", "4"))
|
|
306
|
+
|
|
285
307
|
# Ports for prometheus metric HTTP server running on the celery worker.
|
|
286
308
|
# Normally this should be set to a single port, unless you have multiple workers running on a single machine, i.e.
|
|
287
309
|
# sharing the same available ports. In that case you need to specify a range of ports greater than or equal to the
|
|
@@ -294,6 +316,12 @@ SECRET_KEY = os.getenv("NAUTOBOT_SECRET_KEY", "{{ secret_key }}")
|
|
|
294
316
|
# int(value) for value in os.getenv("NAUTOBOT_CELERY_WORKER_PROMETHEUS_PORTS").split(",")
|
|
295
317
|
# ]
|
|
296
318
|
|
|
319
|
+
# If enabled stdout and stderr of running jobs will be redirected to the task logger.
|
|
320
|
+
# CELERY_WORKER_REDIRECT_STDOUTS = is_truthy(os.getenv("NAUTOBOT_CELERY_WORKER_REDIRECT_STDOUTS", "True"))
|
|
321
|
+
|
|
322
|
+
# The log level of log messages generated by redirected job stdout and stderr.
|
|
323
|
+
# Can be one of `DEBUG`, `INFO`, `WARNING`, `ERROR`, or `CRITICAL`.
|
|
324
|
+
# CELERY_WORKER_REDIRECT_STDOUTS_LEVEL = os.getenv("NAUTOBOT_CELERY_WORKER_REDIRECT_STDOUTS_LEVEL", "WARNING")
|
|
297
325
|
|
|
298
326
|
# Number of days to retain changelog entries. Set to 0 to retain changes indefinitely. Defaults to 90 if not set here.
|
|
299
327
|
#
|
|
@@ -332,14 +360,6 @@ SECRET_KEY = os.getenv("NAUTOBOT_SECRET_KEY", "{{ secret_key }}")
|
|
|
332
360
|
# if "NAUTOBOT_DEVICE_NAME_AS_NATURAL_KEY" in os.environ and os.environ["NAUTOBOT_DEVICE_NAME_AS_NATURAL_KEY"] != "":
|
|
333
361
|
# DEVICE_NAME_AS_NATURAL_KEY = is_truthy(os.environ["NAUTOBOT_DEVICE_NAME_AS_NATURAL_KEY"])
|
|
334
362
|
|
|
335
|
-
# The number of seconds to cache the member list of dynamic groups. Set this to `0` to disable caching.
|
|
336
|
-
#
|
|
337
|
-
# if (
|
|
338
|
-
# "NAUTOBOT_DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT" in os.environ
|
|
339
|
-
# and os.environ["NAUTOBOT_DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT"] != ""
|
|
340
|
-
# ):
|
|
341
|
-
# DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT = int(os.environ["NAUTOBOT_DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUT"])
|
|
342
|
-
|
|
343
363
|
# Exempt certain models from the enforcement of view permissions. Models listed here will be viewable by all users and
|
|
344
364
|
# by anonymous users. List models in the form `<app>.<model>`. Add '*' to this list to exempt all models.
|
|
345
365
|
# Defaults to [].
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{% load form_helpers %}
|
|
2
|
+
|
|
3
|
+
<div class="modal fade" tabindex="-1" role="dialog" id="dynamic_group_assignment_modal">
|
|
4
|
+
<div class="modal-dialog modal-lg" role="document">
|
|
5
|
+
<div class="modal-content">
|
|
6
|
+
<div class="modal-header">
|
|
7
|
+
<button type-"button" class="close" data-dismiss="modal" aria-label="Close">
|
|
8
|
+
<span aria-hidden="true">×</span>
|
|
9
|
+
</button>
|
|
10
|
+
<h4 class="modal-title">Static Assignment to Dynamic Groups</h4>
|
|
11
|
+
</div>
|
|
12
|
+
<form id="dynamic_group_assignment_form" action="{% url 'extras:dynamicgroup_bulk_assign' %}?"
|
|
13
|
+
method="post" class="form form-horizontal">
|
|
14
|
+
<div class="modal-body">
|
|
15
|
+
{% csrf_token %}
|
|
16
|
+
<input type="hidden" name="return_url" value="{{ request.path }}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}">
|
|
17
|
+
<input type="hidden" id="dynamic_group_assignment_all" name="_all">
|
|
18
|
+
<span id="dynamic_group_assignment_pks"></span>
|
|
19
|
+
{% for field in form.hidden_fields %}
|
|
20
|
+
{{ field }}
|
|
21
|
+
{% endfor %}
|
|
22
|
+
{% render_field form.add_to_groups %}
|
|
23
|
+
{% render_field form.create_and_assign_to_new_group_name %}
|
|
24
|
+
{% render_field form.remove_from_groups %}
|
|
25
|
+
</div>
|
|
26
|
+
<div class="modal-footer">
|
|
27
|
+
<button type="submit" class="btn btn-primary">
|
|
28
|
+
<span class="mdi mdi-group" aria-hidden="true"></span> Apply
|
|
29
|
+
</button>
|
|
30
|
+
<button type="button" class="btn btn-default" id="dynamic_group_assignment_cancel">
|
|
31
|
+
<span class="mdi mdi-close-thick" aria-hidden="true"></span> Cancel
|
|
32
|
+
</button>
|
|
33
|
+
</div>
|
|
34
|
+
</form>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
@@ -73,9 +73,9 @@
|
|
|
73
73
|
<button type="submit" class="btn btn-primary">
|
|
74
74
|
<span class="mdi mdi-magnify" aria-hidden="true"></span> Apply
|
|
75
75
|
</button>
|
|
76
|
-
<
|
|
76
|
+
<button type="reset" class="btn btn-default">
|
|
77
77
|
<span class="mdi mdi-close-thick" aria-hidden="true"></span> Clear
|
|
78
|
-
</
|
|
78
|
+
</button>
|
|
79
79
|
</div>
|
|
80
80
|
</form>
|
|
81
81
|
</div>
|