nautobot 2.0.5__py3-none-any.whl → 2.1.0b1__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/circuits/navigation.py +0 -25
- nautobot/circuits/templates/circuits/circuit_retrieve.html +0 -9
- nautobot/circuits/templates/circuits/providernetwork_retrieve.html +0 -2
- nautobot/circuits/tests/test_filters.py +1 -0
- nautobot/core/api/serializers.py +15 -5
- nautobot/core/api/views.py +18 -19
- nautobot/core/choices.py +1 -1
- nautobot/core/filters.py +12 -4
- nautobot/core/jobs/__init__.py +125 -3
- nautobot/core/management/commands/generate_test_data.py +4 -1
- nautobot/core/models/fields.py +12 -2
- nautobot/core/settings.py +8 -7
- nautobot/core/templates/base_django.html +2 -2
- nautobot/core/templates/buttons/export.html +57 -30
- nautobot/core/templates/generic/object_list.html +2 -2
- nautobot/core/templates/generic/object_retrieve.html +8 -1
- nautobot/core/templates/home.html +5 -5
- nautobot/core/templates/inc/created_updated.html +2 -2
- nautobot/core/templates/inc/footer.html +2 -2
- nautobot/core/templates/inc/javascript.html +0 -10
- nautobot/core/templates/inc/media.html +2 -0
- nautobot/core/templates/inc/nav_menu.html +66 -68
- nautobot/core/templates/inc/object_details_advanced_panel.html +19 -0
- nautobot/core/templates/nautobot_config.py.j2 +10 -4
- nautobot/core/templates/panel_table.html +1 -1
- nautobot/core/templates/template.css +89 -0
- nautobot/core/templates/utilities/templatetags/table_config_form.html +1 -0
- nautobot/core/templatetags/buttons.py +7 -2
- nautobot/core/testing/views.py +34 -4
- nautobot/core/tests/integration/test_home.py +1 -43
- nautobot/core/tests/integration/test_navbar.py +10 -64
- nautobot/core/tests/integration/test_plugin_home.py +4 -5
- nautobot/core/tests/integration/test_plugin_navbar.py +20 -16
- nautobot/core/tests/integration/test_theme.py +4 -0
- nautobot/core/tests/test_api.py +14 -66
- nautobot/core/tests/test_filters.py +127 -0
- nautobot/core/tests/test_forms.py +1 -1
- nautobot/core/tests/test_graphql.py +165 -2
- nautobot/core/tests/test_jobs.py +112 -0
- nautobot/core/tests/test_openapi.py +6 -0
- nautobot/core/tests/test_views.py +11 -85
- nautobot/core/urls.py +6 -1
- nautobot/core/utils/lookup.py +28 -0
- nautobot/core/utils/requests.py +2 -3
- nautobot/core/views/__init__.py +3 -4
- nautobot/core/views/generic.py +9 -4
- nautobot/core/views/mixins.py +4 -2
- nautobot/core/views/renderers.py +5 -0
- nautobot/dcim/models/device_components.py +1 -0
- nautobot/dcim/navigation.py +10 -165
- nautobot/dcim/templates/dcim/location.html +1 -1
- nautobot/dcim/tests/features/locations.feature +143 -0
- nautobot/dcim/tests/test_api.py +1 -1
- nautobot/dcim/tests/test_filters.py +11 -3
- nautobot/extras/admin.py +1 -1
- nautobot/extras/api/serializers.py +33 -0
- nautobot/extras/api/urls.py +6 -0
- nautobot/extras/api/views.py +45 -6
- nautobot/extras/factory.py +28 -2
- nautobot/extras/filters/__init__.py +52 -0
- nautobot/extras/filters/mixins.py +4 -29
- nautobot/extras/forms/forms.py +43 -0
- nautobot/extras/jobs.py +31 -9
- nautobot/extras/migrations/0100_fileproxy_job_result.py +32 -0
- nautobot/extras/migrations/0101_externalintegration.py +61 -0
- nautobot/extras/migrations/0102_set_null_objectchange_contenttype.py +32 -0
- nautobot/extras/models/__init__.py +2 -0
- nautobot/extras/models/change_logging.py +2 -2
- nautobot/extras/models/models.py +96 -16
- nautobot/extras/navigation.py +17 -29
- nautobot/extras/signals.py +15 -0
- nautobot/extras/tables.py +27 -0
- nautobot/extras/templates/extras/externalintegration_retrieve.html +37 -0
- nautobot/extras/templates/extras/inc/jobresult.html +24 -0
- nautobot/extras/templates/extras/jobresult.html +24 -0
- nautobot/extras/test_jobs/file_output.py +16 -0
- nautobot/extras/tests/test_api.py +92 -0
- nautobot/extras/tests/test_filters.py +64 -2
- nautobot/extras/tests/test_jobs.py +39 -0
- nautobot/extras/tests/test_models.py +34 -0
- nautobot/extras/tests/test_views.py +22 -2
- nautobot/extras/urls.py +1 -0
- nautobot/extras/views.py +15 -0
- nautobot/ipam/forms.py +16 -0
- nautobot/ipam/models.py +3 -0
- nautobot/ipam/navigation.py +2 -59
- nautobot/ipam/templates/ipam/ipaddress.html +0 -9
- nautobot/ipam/templates/ipam/prefix.html +0 -9
- nautobot/ipam/tests/features/prefixes.feature +134 -0
- nautobot/ipam/tests/test_filters.py +5 -10
- nautobot/ipam/tests/test_views.py +8 -1
- nautobot/ipam/views.py +3 -0
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css +191 -191
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +874 -881
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
- nautobot/project-static/css/base.css +135 -99
- nautobot/project-static/css/dark.css +65 -6
- nautobot/project-static/docs/404.html +44 -16
- nautobot/project-static/docs/apps/index.html +44 -16
- nautobot/project-static/docs/apps/nautobot-apps.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +1597 -1457
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +45 -17
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +353 -432
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +66 -38
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +2154 -2307
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +807 -691
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +58 -30
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +3600 -3456
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +44 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +101 -75
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +3083 -3019
- nautobot/project-static/docs/development/apps/api/configuration-view.html +44 -16
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +44 -16
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +44 -16
- nautobot/project-static/docs/development/apps/api/models/global-search.html +44 -16
- nautobot/project-static/docs/development/apps/api/models/graphql.html +44 -16
- nautobot/project-static/docs/development/apps/api/models/index.html +44 -16
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +44 -16
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +44 -16
- nautobot/project-static/docs/development/apps/api/prometheus.html +44 -16
- nautobot/project-static/docs/development/apps/api/setup.html +44 -16
- nautobot/project-static/docs/development/apps/api/testing.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-detail-views.html +44 -16
- nautobot/project-static/docs/development/apps/api/ui-extensions/tabs.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/base-template.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/index.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/notes.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/urls.html +44 -16
- nautobot/project-static/docs/development/apps/api/views/view-overrides.html +44 -16
- nautobot/project-static/docs/development/apps/index.html +44 -16
- nautobot/project-static/docs/development/apps/migration/code-updates.html +44 -16
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +44 -16
- nautobot/project-static/docs/development/apps/migration/from-v1.html +44 -16
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +44 -16
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +44 -16
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +44 -16
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +44 -16
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +44 -16
- nautobot/project-static/docs/development/core/application-registry.html +44 -16
- nautobot/project-static/docs/development/core/best-practices.html +44 -16
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +44 -16
- nautobot/project-static/docs/development/core/extending-models.html +44 -16
- nautobot/project-static/docs/development/core/generic-views.html +44 -16
- nautobot/project-static/docs/development/core/getting-started.html +44 -16
- nautobot/project-static/docs/development/core/homepage.html +44 -16
- nautobot/project-static/docs/development/core/index.html +44 -16
- nautobot/project-static/docs/development/core/model-features.html +44 -16
- nautobot/project-static/docs/development/core/natural-keys.html +44 -16
- nautobot/project-static/docs/development/core/navigation-menu.html +44 -21
- nautobot/project-static/docs/development/core/react-ui.html +44 -16
- nautobot/project-static/docs/development/core/release-checklist.html +44 -16
- nautobot/project-static/docs/development/core/role-internals.html +44 -16
- nautobot/project-static/docs/development/core/style-guide.html +44 -16
- nautobot/project-static/docs/development/core/templates.html +44 -16
- nautobot/project-static/docs/development/core/testing.html +44 -16
- nautobot/project-static/docs/development/core/user-preferences.html +44 -16
- nautobot/project-static/docs/development/index.html +44 -16
- nautobot/project-static/docs/development/jobs/index.html +280 -234
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +44 -16
- nautobot/project-static/docs/index.html +44 -16
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/release-notes/index.html +47 -19
- nautobot/project-static/docs/release-notes/version-1.0.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.1.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.2.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.3.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.4.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.5.html +44 -16
- nautobot/project-static/docs/release-notes/version-1.6.html +44 -16
- nautobot/project-static/docs/release-notes/version-2.0.html +47 -19
- nautobot/project-static/docs/release-notes/version-2.1.html +5724 -0
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +247 -237
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +44 -16
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +44 -16
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +44 -16
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +44 -16
- nautobot/project-static/docs/user-guide/administration/configuration/node-configuration.html +44 -16
- nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +109 -43
- nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/caching.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +44 -16
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +48 -19
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/docker.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/index.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +44 -16
- nautobot/project-static/docs/user-guide/administration/installation/services.html +44 -16
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +44 -16
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +44 -16
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +44 -16
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +44 -16
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +44 -16
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +44 -16
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +44 -16
- nautobot/project-static/docs/user-guide/index.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +110 -16
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +47 -19
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +5359 -0
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +47 -19
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +113 -44
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +44 -16
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +44 -16
- nautobot/project-static/fonts/UFL.txt +96 -0
- nautobot/project-static/fonts/Ubuntu-Bold.woff2 +0 -0
- nautobot/project-static/fonts/Ubuntu-BoldItalic.woff2 +0 -0
- nautobot/project-static/fonts/Ubuntu-Italic.woff2 +0 -0
- nautobot/project-static/fonts/Ubuntu-Medium.woff2 +0 -0
- nautobot/project-static/fonts/Ubuntu-MediumItalic.woff2 +0 -0
- nautobot/project-static/fonts/Ubuntu-Regular.woff2 +0 -0
- nautobot/project-static/fonts/UbuntuMono-Bold.woff2 +0 -0
- nautobot/project-static/fonts/UbuntuMono-BoldItalic.woff2 +0 -0
- nautobot/project-static/fonts/UbuntuMono-Italic.woff2 +0 -0
- nautobot/project-static/fonts/UbuntuMono-Regular.woff2 +0 -0
- nautobot/project-static/img/dark-theme.png +0 -0
- nautobot/project-static/img/light-theme.png +0 -0
- nautobot/project-static/img/nautobot_chevron.svg +5 -0
- nautobot/project-static/img/nautobot_chevron_header.svg +5 -0
- nautobot/project-static/img/system-theme.png +0 -0
- nautobot/tenancy/navigation.py +0 -13
- nautobot/ui/package-lock.json +2 -2
- nautobot/ui/package.json +1 -1
- nautobot/users/admin.py +44 -0
- nautobot/users/migrations/0007_alter_objectpermission_object_types.py +33 -0
- nautobot/users/models.py +3 -2
- nautobot/virtualization/navigation.py +1 -33
- nautobot/virtualization/tests/test_api.py +1 -1
- nautobot/virtualization/tests/test_filters.py +1 -1
- {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/METADATA +1 -1
- {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/RECORD +376 -351
- {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/WHEEL +0 -0
- {nautobot-2.0.5.dist-info → nautobot-2.1.0b1.dist-info}/entry_points.txt +0 -0
nautobot/core/views/mixins.py
CHANGED
|
@@ -604,7 +604,7 @@ class ObjectListViewMixin(NautobotViewSetMixin, mixins.ListModelMixin):
|
|
|
604
604
|
filterset_class = None
|
|
605
605
|
filterset_form_class = None
|
|
606
606
|
non_filter_params = (
|
|
607
|
-
"export", # trigger for CSV/export-template/YAML export
|
|
607
|
+
"export", # trigger for CSV/export-template/YAML export # 3.0 TODO: remove, irrelevant after #4746
|
|
608
608
|
"page", # used by django-tables2.RequestConfig
|
|
609
609
|
"per_page", # used by get_paginate_count
|
|
610
610
|
"sort", # table sorting
|
|
@@ -626,6 +626,7 @@ class ObjectListViewMixin(NautobotViewSetMixin, mixins.ListModelMixin):
|
|
|
626
626
|
queryset = queryset.none()
|
|
627
627
|
return queryset
|
|
628
628
|
|
|
629
|
+
# 3.0 TODO: remove, irrelevant after #4746
|
|
629
630
|
def check_for_export(self, request, model, content_type):
|
|
630
631
|
# Check for export template rendering
|
|
631
632
|
queryset = self.filter_queryset(self.get_queryset())
|
|
@@ -652,6 +653,7 @@ class ObjectListViewMixin(NautobotViewSetMixin, mixins.ListModelMixin):
|
|
|
652
653
|
|
|
653
654
|
return None
|
|
654
655
|
|
|
656
|
+
# 3.0 TODO: remove, irrelevant after #4746
|
|
655
657
|
def queryset_to_yaml(self):
|
|
656
658
|
"""
|
|
657
659
|
Export the queryset of objects as concatenated YAML documents.
|
|
@@ -666,7 +668,7 @@ class ObjectListViewMixin(NautobotViewSetMixin, mixins.ListModelMixin):
|
|
|
666
668
|
List the model instances.
|
|
667
669
|
"""
|
|
668
670
|
context = {"use_new_ui": True}
|
|
669
|
-
if "export" in request.GET:
|
|
671
|
+
if "export" in request.GET: # 3.0 TODO: remove, irrelevant after #4746
|
|
670
672
|
queryset = self.get_queryset()
|
|
671
673
|
model = queryset.model
|
|
672
674
|
content_type = ContentType.objects.get_for_model(model)
|
nautobot/core/views/renderers.py
CHANGED
|
@@ -14,6 +14,7 @@ from nautobot.core.forms import (
|
|
|
14
14
|
from nautobot.core.forms.forms import DynamicFilterFormSet
|
|
15
15
|
from nautobot.core.templatetags.helpers import bettertitle, validated_viewname
|
|
16
16
|
from nautobot.core.utils.config import get_settings_or_config
|
|
17
|
+
from nautobot.core.utils.lookup import get_created_and_last_updated_usernames_for_model
|
|
17
18
|
from nautobot.core.utils.permissions import get_permission_for_model
|
|
18
19
|
from nautobot.core.utils.requests import (
|
|
19
20
|
convert_querydict_to_factory_formset_acceptable_querydict,
|
|
@@ -229,6 +230,10 @@ class NautobotHTMLRenderer(renderers.BrowsableAPIRenderer):
|
|
|
229
230
|
"verbose_name_plural": queryset.model._meta.verbose_name_plural,
|
|
230
231
|
}
|
|
231
232
|
if view.action == "retrieve":
|
|
233
|
+
created_by, last_updated_by = get_created_and_last_updated_usernames_for_model(instance)
|
|
234
|
+
|
|
235
|
+
context["created_by"] = created_by
|
|
236
|
+
context["last_updated_by"] = last_updated_by
|
|
232
237
|
context.update(view.get_extra_context(request, instance))
|
|
233
238
|
else:
|
|
234
239
|
if view.action == "list":
|
|
@@ -850,6 +850,7 @@ class InterfaceRedundancyGroup(PrimaryModel): # pylint: disable=too-many-ancest
|
|
|
850
850
|
return instance.delete()
|
|
851
851
|
|
|
852
852
|
|
|
853
|
+
@extras_features("graphql")
|
|
853
854
|
class InterfaceRedundancyGroupAssociation(BaseModel, ChangeLoggedModel):
|
|
854
855
|
"""Intermediary model for associating Interface(s) to InterfaceRedundancyGroup(s)."""
|
|
855
856
|
|
nautobot/dcim/navigation.py
CHANGED
|
@@ -5,7 +5,6 @@ from nautobot.core.apps import (
|
|
|
5
5
|
NavMenuAddButton,
|
|
6
6
|
NavMenuGroup,
|
|
7
7
|
NavMenuItem,
|
|
8
|
-
NavMenuImportButton,
|
|
9
8
|
NavMenuTab,
|
|
10
9
|
)
|
|
11
10
|
|
|
@@ -33,12 +32,6 @@ menu_items = (
|
|
|
33
32
|
"dcim.add_locationtype",
|
|
34
33
|
],
|
|
35
34
|
),
|
|
36
|
-
NavMenuImportButton(
|
|
37
|
-
link="dcim:locationtype_import",
|
|
38
|
-
permissions=[
|
|
39
|
-
"dcim.add_locationtype",
|
|
40
|
-
],
|
|
41
|
-
),
|
|
42
35
|
),
|
|
43
36
|
),
|
|
44
37
|
NavMenuItem(
|
|
@@ -55,12 +48,6 @@ menu_items = (
|
|
|
55
48
|
"dcim.add_location",
|
|
56
49
|
],
|
|
57
50
|
),
|
|
58
|
-
NavMenuImportButton(
|
|
59
|
-
link="dcim:location_import",
|
|
60
|
-
permissions=[
|
|
61
|
-
"dcim.add_location",
|
|
62
|
-
],
|
|
63
|
-
),
|
|
64
51
|
),
|
|
65
52
|
),
|
|
66
53
|
),
|
|
@@ -83,12 +70,6 @@ menu_items = (
|
|
|
83
70
|
"dcim.add_rack",
|
|
84
71
|
],
|
|
85
72
|
),
|
|
86
|
-
NavMenuImportButton(
|
|
87
|
-
link="dcim:rack_import",
|
|
88
|
-
permissions=[
|
|
89
|
-
"dcim.add_rack",
|
|
90
|
-
],
|
|
91
|
-
),
|
|
92
73
|
),
|
|
93
74
|
),
|
|
94
75
|
NavMenuItem(
|
|
@@ -105,12 +86,6 @@ menu_items = (
|
|
|
105
86
|
"dcim.add_rackgroup",
|
|
106
87
|
],
|
|
107
88
|
),
|
|
108
|
-
NavMenuImportButton(
|
|
109
|
-
link="dcim:rackgroup_import",
|
|
110
|
-
permissions=[
|
|
111
|
-
"dcim.add_rackgroup",
|
|
112
|
-
],
|
|
113
|
-
),
|
|
114
89
|
),
|
|
115
90
|
),
|
|
116
91
|
NavMenuItem(
|
|
@@ -127,12 +102,6 @@ menu_items = (
|
|
|
127
102
|
"dcim.add_rackreservation",
|
|
128
103
|
],
|
|
129
104
|
),
|
|
130
|
-
NavMenuImportButton(
|
|
131
|
-
link="dcim:rackreservation_import",
|
|
132
|
-
permissions=[
|
|
133
|
-
"dcim.add_rackreservation",
|
|
134
|
-
],
|
|
135
|
-
),
|
|
136
105
|
),
|
|
137
106
|
),
|
|
138
107
|
NavMenuItem(
|
|
@@ -170,12 +139,6 @@ menu_items = (
|
|
|
170
139
|
"dcim.add_device",
|
|
171
140
|
],
|
|
172
141
|
),
|
|
173
|
-
NavMenuImportButton(
|
|
174
|
-
link="dcim:device_import",
|
|
175
|
-
permissions=[
|
|
176
|
-
"dcim.add_device",
|
|
177
|
-
],
|
|
178
|
-
),
|
|
179
142
|
),
|
|
180
143
|
),
|
|
181
144
|
NavMenuItem(
|
|
@@ -192,12 +155,6 @@ menu_items = (
|
|
|
192
155
|
"dcim.add_platform",
|
|
193
156
|
],
|
|
194
157
|
),
|
|
195
|
-
NavMenuImportButton(
|
|
196
|
-
link="dcim:platform_import",
|
|
197
|
-
permissions=[
|
|
198
|
-
"dcim.add_platform",
|
|
199
|
-
],
|
|
200
|
-
),
|
|
201
158
|
),
|
|
202
159
|
),
|
|
203
160
|
NavMenuItem(
|
|
@@ -214,12 +171,6 @@ menu_items = (
|
|
|
214
171
|
"dcim.add_virtualchassis",
|
|
215
172
|
],
|
|
216
173
|
),
|
|
217
|
-
NavMenuImportButton(
|
|
218
|
-
link="dcim:virtualchassis_import",
|
|
219
|
-
permissions=[
|
|
220
|
-
"dcim.add_virtualchassis",
|
|
221
|
-
],
|
|
222
|
-
),
|
|
223
174
|
),
|
|
224
175
|
),
|
|
225
176
|
NavMenuItem(
|
|
@@ -236,12 +187,6 @@ menu_items = (
|
|
|
236
187
|
"dcim.add_deviceredundancygroup",
|
|
237
188
|
],
|
|
238
189
|
),
|
|
239
|
-
NavMenuImportButton(
|
|
240
|
-
link="dcim:deviceredundancygroup_import",
|
|
241
|
-
permissions=[
|
|
242
|
-
"dcim.add_deviceredundancygroup",
|
|
243
|
-
],
|
|
244
|
-
),
|
|
245
190
|
),
|
|
246
191
|
),
|
|
247
192
|
NavMenuItem(
|
|
@@ -258,12 +203,6 @@ menu_items = (
|
|
|
258
203
|
"dcim.add_interfaceredundancygroup",
|
|
259
204
|
],
|
|
260
205
|
),
|
|
261
|
-
NavMenuImportButton(
|
|
262
|
-
link="dcim:interfaceredundancygroup_import",
|
|
263
|
-
permissions=[
|
|
264
|
-
"dcim.add_interfaceredundancygroup",
|
|
265
|
-
],
|
|
266
|
-
),
|
|
267
206
|
),
|
|
268
207
|
),
|
|
269
208
|
),
|
|
@@ -286,12 +225,6 @@ menu_items = (
|
|
|
286
225
|
"dcim.add_devicetype",
|
|
287
226
|
],
|
|
288
227
|
),
|
|
289
|
-
NavMenuImportButton(
|
|
290
|
-
link="dcim:devicetype_import",
|
|
291
|
-
permissions=[
|
|
292
|
-
"dcim.add_devicetype",
|
|
293
|
-
],
|
|
294
|
-
),
|
|
295
228
|
),
|
|
296
229
|
),
|
|
297
230
|
NavMenuItem(
|
|
@@ -308,12 +241,6 @@ menu_items = (
|
|
|
308
241
|
"dcim.add_manufacturer",
|
|
309
242
|
],
|
|
310
243
|
),
|
|
311
|
-
NavMenuImportButton(
|
|
312
|
-
link="dcim:manufacturer_import",
|
|
313
|
-
permissions=[
|
|
314
|
-
"dcim.add_manufacturer",
|
|
315
|
-
],
|
|
316
|
-
),
|
|
317
244
|
),
|
|
318
245
|
),
|
|
319
246
|
),
|
|
@@ -329,14 +256,7 @@ menu_items = (
|
|
|
329
256
|
permissions=[
|
|
330
257
|
"dcim.view_cable",
|
|
331
258
|
],
|
|
332
|
-
buttons=(
|
|
333
|
-
NavMenuImportButton(
|
|
334
|
-
link="dcim:cable_import",
|
|
335
|
-
permissions=[
|
|
336
|
-
"dcim.add_cable",
|
|
337
|
-
],
|
|
338
|
-
),
|
|
339
|
-
),
|
|
259
|
+
buttons=(),
|
|
340
260
|
),
|
|
341
261
|
NavMenuItem(
|
|
342
262
|
link="dcim:console_connections_list",
|
|
@@ -380,14 +300,7 @@ menu_items = (
|
|
|
380
300
|
permissions=[
|
|
381
301
|
"dcim.view_interface",
|
|
382
302
|
],
|
|
383
|
-
buttons=(
|
|
384
|
-
NavMenuImportButton(
|
|
385
|
-
link="dcim:interface_import",
|
|
386
|
-
permissions=[
|
|
387
|
-
"dcim.add_interface",
|
|
388
|
-
],
|
|
389
|
-
),
|
|
390
|
-
),
|
|
303
|
+
buttons=(),
|
|
391
304
|
),
|
|
392
305
|
NavMenuItem(
|
|
393
306
|
link="dcim:frontport_list",
|
|
@@ -396,14 +309,7 @@ menu_items = (
|
|
|
396
309
|
permissions=[
|
|
397
310
|
"dcim.view_frontport",
|
|
398
311
|
],
|
|
399
|
-
buttons=(
|
|
400
|
-
NavMenuImportButton(
|
|
401
|
-
link="dcim:frontport_import",
|
|
402
|
-
permissions=[
|
|
403
|
-
"dcim.add_frontport",
|
|
404
|
-
],
|
|
405
|
-
),
|
|
406
|
-
),
|
|
312
|
+
buttons=(),
|
|
407
313
|
),
|
|
408
314
|
NavMenuItem(
|
|
409
315
|
link="dcim:rearport_list",
|
|
@@ -412,14 +318,7 @@ menu_items = (
|
|
|
412
318
|
permissions=[
|
|
413
319
|
"dcim.view_rearport",
|
|
414
320
|
],
|
|
415
|
-
buttons=(
|
|
416
|
-
NavMenuImportButton(
|
|
417
|
-
link="dcim:rearport_import",
|
|
418
|
-
permissions=[
|
|
419
|
-
"dcim.add_rearport",
|
|
420
|
-
],
|
|
421
|
-
),
|
|
422
|
-
),
|
|
321
|
+
buttons=(),
|
|
423
322
|
),
|
|
424
323
|
NavMenuItem(
|
|
425
324
|
link="dcim:consoleport_list",
|
|
@@ -428,14 +327,7 @@ menu_items = (
|
|
|
428
327
|
permissions=[
|
|
429
328
|
"dcim.view_consoleport",
|
|
430
329
|
],
|
|
431
|
-
buttons=(
|
|
432
|
-
NavMenuImportButton(
|
|
433
|
-
link="dcim:consoleport_import",
|
|
434
|
-
permissions=[
|
|
435
|
-
"dcim.add_consoleport",
|
|
436
|
-
],
|
|
437
|
-
),
|
|
438
|
-
),
|
|
330
|
+
buttons=(),
|
|
439
331
|
),
|
|
440
332
|
NavMenuItem(
|
|
441
333
|
link="dcim:consoleserverport_list",
|
|
@@ -444,14 +336,7 @@ menu_items = (
|
|
|
444
336
|
permissions=[
|
|
445
337
|
"dcim.view_consoleserverport",
|
|
446
338
|
],
|
|
447
|
-
buttons=(
|
|
448
|
-
NavMenuImportButton(
|
|
449
|
-
link="dcim:consoleserverport_import",
|
|
450
|
-
permissions=[
|
|
451
|
-
"dcim.add_consoleserverport",
|
|
452
|
-
],
|
|
453
|
-
),
|
|
454
|
-
),
|
|
339
|
+
buttons=(),
|
|
455
340
|
),
|
|
456
341
|
NavMenuItem(
|
|
457
342
|
link="dcim:powerport_list",
|
|
@@ -460,14 +345,7 @@ menu_items = (
|
|
|
460
345
|
permissions=[
|
|
461
346
|
"dcim.view_powerport",
|
|
462
347
|
],
|
|
463
|
-
buttons=(
|
|
464
|
-
NavMenuImportButton(
|
|
465
|
-
link="dcim:powerport_import",
|
|
466
|
-
permissions=[
|
|
467
|
-
"dcim.add_powerport",
|
|
468
|
-
],
|
|
469
|
-
),
|
|
470
|
-
),
|
|
348
|
+
buttons=(),
|
|
471
349
|
),
|
|
472
350
|
NavMenuItem(
|
|
473
351
|
link="dcim:poweroutlet_list",
|
|
@@ -476,14 +354,7 @@ menu_items = (
|
|
|
476
354
|
permissions=[
|
|
477
355
|
"dcim.view_poweroutlet",
|
|
478
356
|
],
|
|
479
|
-
buttons=(
|
|
480
|
-
NavMenuImportButton(
|
|
481
|
-
link="dcim:poweroutlet_import",
|
|
482
|
-
permissions=[
|
|
483
|
-
"dcim.add_poweroutlet",
|
|
484
|
-
],
|
|
485
|
-
),
|
|
486
|
-
),
|
|
357
|
+
buttons=(),
|
|
487
358
|
),
|
|
488
359
|
NavMenuItem(
|
|
489
360
|
link="dcim:devicebay_list",
|
|
@@ -492,14 +363,7 @@ menu_items = (
|
|
|
492
363
|
permissions=[
|
|
493
364
|
"dcim.view_devicebay",
|
|
494
365
|
],
|
|
495
|
-
buttons=(
|
|
496
|
-
NavMenuImportButton(
|
|
497
|
-
link="dcim:devicebay_import",
|
|
498
|
-
permissions=[
|
|
499
|
-
"dcim.add_devicebay",
|
|
500
|
-
],
|
|
501
|
-
),
|
|
502
|
-
),
|
|
366
|
+
buttons=(),
|
|
503
367
|
),
|
|
504
368
|
NavMenuItem(
|
|
505
369
|
link="dcim:inventoryitem_list",
|
|
@@ -508,14 +372,7 @@ menu_items = (
|
|
|
508
372
|
permissions=[
|
|
509
373
|
"dcim.view_inventoryitem",
|
|
510
374
|
],
|
|
511
|
-
buttons=(
|
|
512
|
-
NavMenuImportButton(
|
|
513
|
-
link="dcim:inventoryitem_import",
|
|
514
|
-
permissions=[
|
|
515
|
-
"dcim.add_inventoryitem",
|
|
516
|
-
],
|
|
517
|
-
),
|
|
518
|
-
),
|
|
375
|
+
buttons=(),
|
|
519
376
|
),
|
|
520
377
|
),
|
|
521
378
|
),
|
|
@@ -542,12 +399,6 @@ menu_items = (
|
|
|
542
399
|
"dcim.add_powerfeed",
|
|
543
400
|
],
|
|
544
401
|
),
|
|
545
|
-
NavMenuImportButton(
|
|
546
|
-
link="dcim:powerfeed_import",
|
|
547
|
-
permissions=[
|
|
548
|
-
"dcim.add_powerfeed",
|
|
549
|
-
],
|
|
550
|
-
),
|
|
551
402
|
),
|
|
552
403
|
),
|
|
553
404
|
NavMenuItem(
|
|
@@ -563,12 +414,6 @@ menu_items = (
|
|
|
563
414
|
"dcim.add_powerpanel",
|
|
564
415
|
],
|
|
565
416
|
),
|
|
566
|
-
NavMenuImportButton(
|
|
567
|
-
link="dcim:powerpanel_import",
|
|
568
|
-
permissions=[
|
|
569
|
-
"dcim.add_powerpanel",
|
|
570
|
-
],
|
|
571
|
-
),
|
|
572
417
|
),
|
|
573
418
|
),
|
|
574
419
|
),
|
|
@@ -173,7 +173,7 @@
|
|
|
173
173
|
<div class="panel-heading">
|
|
174
174
|
<strong>Stats</strong>
|
|
175
175
|
</div>
|
|
176
|
-
<div class="
|
|
176
|
+
<div class="panel-body">
|
|
177
177
|
<div class="col-md-4 text-center">
|
|
178
178
|
<h2><a href="{% url 'dcim:rack_list' %}?location={{ object.pk }}" class="btn {% if stats.rack_count %}btn-primary{% else %}btn-default{% endif %} btn-lg">{{ stats.rack_count }}</a></h2>
|
|
179
179
|
<p>Racks</p>
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
Feature: Locations
|
|
2
|
+
In order to represent the geographical structure of my organization's infrastructure,
|
|
3
|
+
As a Network Engineer
|
|
4
|
+
I want to record in Nautobot an appropriate set of LocationType and Location records.
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I have appropriate Nautobot permissions:
|
|
8
|
+
| model | permissions |
|
|
9
|
+
| dcim.locationtype | add,change,delete,view |
|
|
10
|
+
| dcim.location | add,change,delete,view |
|
|
11
|
+
And I am logged in to Nautobot
|
|
12
|
+
|
|
13
|
+
Scenario: Creating a hierarchy of LocationTypes
|
|
14
|
+
When I navigate to the "Add LocationType" view
|
|
15
|
+
And I make the following form entries:
|
|
16
|
+
| name | nestable |
|
|
17
|
+
| Geographic Region | True |
|
|
18
|
+
And I submit the form
|
|
19
|
+
Then a LocationType exists in Nautobot with the following properties:
|
|
20
|
+
| name | parent | nestable |
|
|
21
|
+
| Geographic Region | None | True |
|
|
22
|
+
And Nautobot shows the "LocationType Detail" view for the LocationType with name "Geographic Region"
|
|
23
|
+
|
|
24
|
+
When I click the "Add child" button
|
|
25
|
+
Then Nautobot shows the "Add LocationType" view with the following presets:
|
|
26
|
+
| parent |
|
|
27
|
+
| Geographic Region |
|
|
28
|
+
When I make the following form entries:
|
|
29
|
+
| name |
|
|
30
|
+
| City |
|
|
31
|
+
And I submit the form
|
|
32
|
+
Then a LocationType exists in Nautobot with the following properties:
|
|
33
|
+
| name | parent | nestable |
|
|
34
|
+
| City | Geographic Region | False |
|
|
35
|
+
And Nautobot shows the "LocationType Detail" view for the LocationType with name "City"
|
|
36
|
+
|
|
37
|
+
When I click the "Add child" button
|
|
38
|
+
Then Nautobot shows the "Add LocationType" view with the following presets:
|
|
39
|
+
| parent |
|
|
40
|
+
| City |
|
|
41
|
+
When I make the following form entries:
|
|
42
|
+
| name | content_types |
|
|
43
|
+
| Building | [dcim.device] |
|
|
44
|
+
And I submit the form
|
|
45
|
+
Then a LocationType exists in Nautobot with the following properties:
|
|
46
|
+
| name | parent | nestable | content_types |
|
|
47
|
+
| Building | City | False | [dcim.device] |
|
|
48
|
+
And Nautobot shows the "LocationType Detail" view for the LocationType with name "Building"
|
|
49
|
+
|
|
50
|
+
Scenario: Creating a hierarchy of Locations
|
|
51
|
+
Given that LocationType records exist with the following properties:
|
|
52
|
+
| name | parent | nestable |
|
|
53
|
+
| Geographic Region | None | True |
|
|
54
|
+
| City | Geographic Region | False |
|
|
55
|
+
| Building | City | False |
|
|
56
|
+
When I navigate to the "Add Location" view
|
|
57
|
+
And I make the following form entries:
|
|
58
|
+
| name | location_type | status |
|
|
59
|
+
| United States | Geographic Region | Active |
|
|
60
|
+
And I submit the form
|
|
61
|
+
Then a Location exists in Nautobot with the following properties:
|
|
62
|
+
| name | location_type | parent | status |
|
|
63
|
+
| United States | Geographic Region | None | Active |
|
|
64
|
+
And Nautobot shows the "Location Detail" view for the Location with name "United States"
|
|
65
|
+
|
|
66
|
+
When I click the "Add child" button
|
|
67
|
+
Then Nautobot shows the "Add Location" view with the following presets:
|
|
68
|
+
| parent |
|
|
69
|
+
| United States |
|
|
70
|
+
When I make the following form entries:
|
|
71
|
+
| name | location_type | status | time_zone |
|
|
72
|
+
| North Carolina | Geographic Region | Active | America/New York |
|
|
73
|
+
And I submit the form
|
|
74
|
+
Then a Location exists in Nautobot with the following properties:
|
|
75
|
+
| name | location_type | parent | status | time_zone |
|
|
76
|
+
| North Carolina | Geographic Region | United States | Active | America/New York |
|
|
77
|
+
And Nautobot shows the "Location Detail" view for the Location with name "North Carolina"
|
|
78
|
+
|
|
79
|
+
When I click the "Add child" button
|
|
80
|
+
Then Nautobot shows the "Add Location" view with the following presets:
|
|
81
|
+
| parent |
|
|
82
|
+
| North Carolina |
|
|
83
|
+
When I make the following form entries:
|
|
84
|
+
| name | location_type | status |
|
|
85
|
+
| Durham | City | Planned |
|
|
86
|
+
And I submit the form
|
|
87
|
+
Then a Location exists in Nautobot with the following properties:
|
|
88
|
+
| name | location_type | parent | status |
|
|
89
|
+
| Durham | City | North Carolina | Planned |
|
|
90
|
+
And Nautobot shows the "Location Detail" view for the Location with name "Durham"
|
|
91
|
+
|
|
92
|
+
When I click the "Add child" button
|
|
93
|
+
Then Nautobot shows the "Add Location" view with the following presets:
|
|
94
|
+
| parent |
|
|
95
|
+
| Durham |
|
|
96
|
+
When I make the following form entries:
|
|
97
|
+
| name | location_type | status | physical_address |
|
|
98
|
+
| Durham Bulls Athletic Park | Building | Planned | 409 Blackwell Street |
|
|
99
|
+
And I submit the form via the "Create and Add Another" button
|
|
100
|
+
Then a Location exists in Nautobot with the following properties:
|
|
101
|
+
| name | location_type | parent | status | physical_address |
|
|
102
|
+
| Durham Bulls Athletic Park | Building | Durham | Planned | 409 Blackwell Street |
|
|
103
|
+
And Nautobot shows the "Add Location" view with the following presets:
|
|
104
|
+
| parent | location_type | status |
|
|
105
|
+
| Durham | Building | Planned |
|
|
106
|
+
When I make the following form entries:
|
|
107
|
+
| name |
|
|
108
|
+
| Durham Performing Arts Center |
|
|
109
|
+
And I submit the form
|
|
110
|
+
Then a Location exists in Nautobot with the following properties:
|
|
111
|
+
| name | location_type | parent | status |
|
|
112
|
+
| Durham Performing Arts Center | Building | Durham | Planned |
|
|
113
|
+
And Nautobot shows the "Location Detail" view for the Location with name "Durham Performing Arts Center"
|
|
114
|
+
|
|
115
|
+
When I click on the "Durham" link
|
|
116
|
+
Then Nautobot shows the "Location Detail" view for the Location with name "Durham"
|
|
117
|
+
And the table "Children" includes rows with the following properties:
|
|
118
|
+
| name | status |
|
|
119
|
+
| Durham Bulls Athletic Park | Planned |
|
|
120
|
+
| Durham Performing Arts Center | Planned |
|
|
121
|
+
|
|
122
|
+
Scenario Outline: Missing required fields for Location
|
|
123
|
+
Given that LocationType records exist with the following properties:
|
|
124
|
+
| name | parent | nestable |
|
|
125
|
+
| Geographic Region | None | True |
|
|
126
|
+
| City | Geographic Region | False |
|
|
127
|
+
| Building | Building | False |
|
|
128
|
+
When I navigate to the "Add Location" view
|
|
129
|
+
And I make the following form entries:
|
|
130
|
+
| name | location_type | parent | status |
|
|
131
|
+
| <name> | <location_type> | <parent> | <status> |
|
|
132
|
+
And I submit the form
|
|
133
|
+
Then Nautobot shows the "Add Location" view with the following presets:
|
|
134
|
+
| name | location_type | parent | status |
|
|
135
|
+
| <name> | <location_type> | <parent> | <status> |
|
|
136
|
+
And the field "<required_field>" shows error message "<error_message>"
|
|
137
|
+
|
|
138
|
+
Scenarios:
|
|
139
|
+
| name | location_type | parent | status | required_field | error_message |
|
|
140
|
+
| | Geographic Region | None | Active | name | Please fill out this field. |
|
|
141
|
+
| United States | None | None | Active | location_type | Please select an item in the list. |
|
|
142
|
+
| United States | Geographic Region | None | None | status | Please select an item in the list. |
|
|
143
|
+
| Durham | City | None | Active | parent | A Location of type City must have a parent Location. |
|
nautobot/dcim/tests/test_api.py
CHANGED
|
@@ -1546,7 +1546,7 @@ class InterfaceTest(Mixins.BasePortTestMixin):
|
|
|
1546
1546
|
),
|
|
1547
1547
|
)
|
|
1548
1548
|
|
|
1549
|
-
vlan_group = VLANGroup.objects.
|
|
1549
|
+
vlan_group = VLANGroup.objects.create(name="Test VLANGroup 1")
|
|
1550
1550
|
vlan_status = Status.objects.get_for_model(VLAN).first()
|
|
1551
1551
|
cls.vlans = (
|
|
1552
1552
|
VLAN.objects.create(name="VLAN 1", vid=1, status=vlan_status, vlan_group=vlan_group),
|
|
@@ -137,12 +137,13 @@ def common_test_data(cls):
|
|
|
137
137
|
CircuitTermination.objects.create(circuit=circuit, location=loc0, term_side="A")
|
|
138
138
|
CircuitTermination.objects.create(circuit=circuit, location=loc1, term_side="Z")
|
|
139
139
|
|
|
140
|
-
manufacturers = list(
|
|
140
|
+
manufacturers = list(
|
|
141
|
+
Manufacturer.objects.filter(device_types__isnull=False, platforms__isnull=False).distinct()[:3]
|
|
142
|
+
)
|
|
141
143
|
cls.manufacturers = manufacturers
|
|
142
144
|
|
|
143
|
-
platforms = Platform.objects.
|
|
145
|
+
platforms = Platform.objects.filter(manufacturer__in=manufacturers)[:3]
|
|
144
146
|
for num, platform in enumerate(platforms):
|
|
145
|
-
platform.manufacturer = manufacturers[num]
|
|
146
147
|
platform.napalm_driver = f"driver-{num}"
|
|
147
148
|
platform.napalm_args = ["--test", f"--arg{num}"]
|
|
148
149
|
platform.network_driver = f"driver_{num}"
|
|
@@ -651,6 +652,7 @@ class LocationFilterSetTestCase(FilterTestCases.NameOnlyFilterTestCase, FilterTe
|
|
|
651
652
|
("racks", "racks__id"),
|
|
652
653
|
("racks", "racks__name"),
|
|
653
654
|
("shipping_address",),
|
|
655
|
+
("status", "status__id"),
|
|
654
656
|
("status", "status__name"),
|
|
655
657
|
("time_zone",),
|
|
656
658
|
("vlan_groups", "vlan_groups__id"),
|
|
@@ -765,7 +767,9 @@ class RackTestCase(FilterTestCases.FilterTestCase, FilterTestCases.TenancyFilter
|
|
|
765
767
|
("rack_group", "rack_group__name"),
|
|
766
768
|
("rack_reservations", "rack_reservations__id"),
|
|
767
769
|
("role", "role__name"),
|
|
770
|
+
("role", "role__id"),
|
|
768
771
|
("serial",),
|
|
772
|
+
("status", "status__id"),
|
|
769
773
|
("status", "status__name"),
|
|
770
774
|
("type",),
|
|
771
775
|
("u_height",),
|
|
@@ -1331,6 +1335,7 @@ class DeviceTestCase(FilterTestCases.FilterTestCase, FilterTestCases.TenancyFilt
|
|
|
1331
1335
|
("role", "role__name"),
|
|
1332
1336
|
("secrets_group", "secrets_group__id"),
|
|
1333
1337
|
("secrets_group", "secrets_group__name"),
|
|
1338
|
+
("status", "status__id"),
|
|
1334
1339
|
("status", "status__name"),
|
|
1335
1340
|
("vc_position",),
|
|
1336
1341
|
("vc_priority",),
|
|
@@ -1824,6 +1829,7 @@ class InterfaceTestCase(FilterTestCases.FilterTestCase):
|
|
|
1824
1829
|
("name",),
|
|
1825
1830
|
("parent_interface", "parent_interface__id"),
|
|
1826
1831
|
("parent_interface", "parent_interface__name"),
|
|
1832
|
+
("status", "status__id"),
|
|
1827
1833
|
("status", "status__name"),
|
|
1828
1834
|
("type",),
|
|
1829
1835
|
("tagged_vlans", "tagged_vlans__id"),
|
|
@@ -2579,6 +2585,7 @@ class CableTestCase(FilterTestCases.FilterTestCase):
|
|
|
2579
2585
|
("color",),
|
|
2580
2586
|
("label",),
|
|
2581
2587
|
("length",),
|
|
2588
|
+
("status", "status__id"),
|
|
2582
2589
|
("status", "status__name"),
|
|
2583
2590
|
("termination_a_id",),
|
|
2584
2591
|
("termination_b_id",),
|
|
@@ -2869,6 +2876,7 @@ class PowerFeedTestCase(FilterTestCases.FilterTestCase):
|
|
|
2869
2876
|
("power_panel", "power_panel__name"),
|
|
2870
2877
|
("rack", "rack__id"),
|
|
2871
2878
|
("rack", "rack__name"),
|
|
2879
|
+
("status", "status__id"),
|
|
2872
2880
|
("status", "status__name"),
|
|
2873
2881
|
("voltage",),
|
|
2874
2882
|
]
|
nautobot/extras/admin.py
CHANGED
|
@@ -31,7 +31,7 @@ class FileProxyForm(forms.ModelForm):
|
|
|
31
31
|
@admin.register(FileProxy)
|
|
32
32
|
class FileProxyAdmin(NautobotModelAdmin):
|
|
33
33
|
form = FileProxyForm
|
|
34
|
-
list_display = ["name", "uploaded_at"]
|
|
34
|
+
list_display = ["name", "file", "uploaded_at"]
|
|
35
35
|
list_filter = ["uploaded_at"]
|
|
36
36
|
|
|
37
37
|
|