nautobot 2.2.0__py3-none-any.whl → 2.2.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/apps/api.py +2 -1
- nautobot/apps/utils.py +0 -4
- nautobot/apps/views.py +0 -2
- nautobot/circuits/api/urls.py +2 -1
- nautobot/circuits/api/views.py +12 -0
- nautobot/circuits/tests/test_filters.py +1 -1
- nautobot/core/api/routers.py +3 -25
- nautobot/core/api/utils.py +0 -4
- nautobot/core/api/views.py +15 -21
- nautobot/core/filters.py +1 -7
- nautobot/core/management/commands/generate_test_data.py +4 -4
- nautobot/core/settings.py +0 -1
- nautobot/core/tables.py +1 -2
- nautobot/core/templates/admin/base.html +94 -23
- nautobot/core/templates/graphene/graphiql.html +47 -18
- nautobot/core/templates/inc/footer.html +5 -5
- nautobot/core/templates/inc/nav_menu.html +7 -0
- nautobot/core/templates/rest_framework/api.html +5 -12
- nautobot/core/templatetags/helpers.py +2 -2
- nautobot/core/testing/views.py +0 -30
- nautobot/core/tests/test_api.py +6 -13
- nautobot/core/tests/test_csv.py +4 -5
- nautobot/core/tests/test_filters.py +1 -2
- nautobot/core/tests/test_graphql.py +14 -4
- nautobot/core/tests/test_navigations.py +0 -3
- nautobot/core/tests/test_views.py +16 -22
- nautobot/core/utils/lookup.py +0 -124
- nautobot/core/views/__init__.py +7 -3
- nautobot/core/views/generic.py +3 -19
- nautobot/core/views/mixins.py +0 -7
- nautobot/core/views/renderers.py +1 -4
- nautobot/dcim/api/serializers.py +4 -4
- nautobot/dcim/api/urls.py +3 -2
- nautobot/dcim/api/views.py +18 -7
- nautobot/dcim/factory.py +7 -7
- nautobot/dcim/filters/__init__.py +17 -16
- nautobot/dcim/forms.py +45 -61
- nautobot/dcim/homepage.py +3 -11
- nautobot/dcim/migrations/0057_controller_models.py +70 -11
- nautobot/dcim/models/__init__.py +2 -2
- nautobot/dcim/models/devices.py +16 -14
- nautobot/dcim/models/racks.py +3 -1
- nautobot/dcim/navigation.py +31 -23
- nautobot/dcim/signals.py +6 -6
- nautobot/dcim/tables/__init__.py +2 -2
- nautobot/dcim/tables/devices.py +15 -12
- nautobot/dcim/tables/template_code.py +1 -1
- nautobot/dcim/templates/dcim/controller_retrieve.html +18 -35
- nautobot/dcim/templates/dcim/controllerdevicegroup_create.html +43 -0
- nautobot/dcim/templates/dcim/device/lldp_neighbors.html +43 -67
- nautobot/dcim/templates/dcim/device.html +2 -10
- nautobot/dcim/templates/dcim/device_edit.html +1 -1
- nautobot/dcim/tests/test_api.py +6 -11
- nautobot/dcim/tests/test_filters.py +81 -92
- nautobot/dcim/tests/test_graphql.py +1 -11
- nautobot/dcim/tests/test_models.py +15 -15
- nautobot/dcim/tests/test_signals.py +0 -2
- nautobot/dcim/tests/test_views.py +12 -24
- nautobot/dcim/urls.py +1 -1
- nautobot/dcim/views.py +15 -19
- nautobot/extras/api/urls.py +2 -1
- nautobot/extras/api/views.py +10 -0
- nautobot/extras/filters/__init__.py +2 -53
- nautobot/extras/forms/contacts.py +0 -7
- nautobot/extras/managers.py +0 -14
- nautobot/extras/navigation.py +65 -71
- nautobot/extras/plugins/views.py +11 -7
- nautobot/extras/tests/test_api.py +0 -2
- nautobot/extras/tests/test_dynamicgroups.py +0 -2
- nautobot/extras/tests/test_filters.py +4 -89
- nautobot/extras/tests/test_models.py +0 -9
- nautobot/extras/tests/test_relationships.py +1 -10
- nautobot/extras/tests/test_views.py +1 -112
- nautobot/extras/views.py +10 -10
- nautobot/ipam/api/urls.py +2 -1
- nautobot/ipam/api/views.py +11 -0
- nautobot/ipam/tables.py +22 -2
- nautobot/ipam/tests/test_graphql.py +3 -2
- nautobot/ipam/tests/test_views.py +0 -1
- nautobot/ipam/views.py +9 -9
- nautobot/project-static/css/base.css +0 -1
- nautobot/project-static/docs/404.html +3 -24
- nautobot/project-static/docs/apps/index.html +3 -24
- nautobot/project-static/docs/apps/nautobot-apps.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +5 -26
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +3 -24
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +3 -242
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +5 -69
- nautobot/project-static/docs/development/apps/api/configuration-view.html +3 -24
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +3 -24
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +3 -24
- nautobot/project-static/docs/development/apps/api/models/global-search.html +3 -24
- nautobot/project-static/docs/development/apps/api/models/graphql.html +3 -24
- nautobot/project-static/docs/development/apps/api/models/index.html +3 -24
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +3 -24
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +3 -24
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +3 -24
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +3 -24
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +3 -24
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +3 -24
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +3 -24
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +3 -24
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +3 -24
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +3 -24
- nautobot/project-static/docs/development/apps/api/prometheus.html +3 -24
- nautobot/project-static/docs/development/apps/api/setup.html +3 -24
- nautobot/project-static/docs/development/apps/api/testing.html +3 -24
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +3 -24
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +3 -24
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +3 -24
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +3 -24
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +3 -24
- nautobot/project-static/docs/development/apps/api/views/base-template.html +3 -24
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +12 -38
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +15 -41
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +3 -24
- nautobot/project-static/docs/development/apps/api/views/index.html +3 -24
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +3 -24
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +3 -24
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +3 -24
- nautobot/project-static/docs/development/apps/api/views/notes.html +3 -24
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +3 -24
- nautobot/project-static/docs/development/apps/api/views/urls.html +3 -24
- nautobot/project-static/docs/development/apps/index.html +3 -24
- nautobot/project-static/docs/development/apps/migration/code-updates.html +3 -24
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +3 -24
- nautobot/project-static/docs/development/apps/migration/from-v1.html +3 -24
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +3 -24
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +3 -24
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +3 -24
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +3 -24
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +3 -24
- nautobot/project-static/docs/development/core/application-registry.html +3 -24
- nautobot/project-static/docs/development/core/best-practices.html +3 -24
- nautobot/project-static/docs/development/core/bootstrap-ui.html +3 -24
- nautobot/project-static/docs/development/core/caching.html +3 -24
- nautobot/project-static/docs/development/core/controllers.html +204 -35
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +3 -24
- nautobot/project-static/docs/development/core/extending-models.html +3 -24
- nautobot/project-static/docs/development/core/generic-views.html +3 -24
- nautobot/project-static/docs/development/core/getting-started.html +13 -43
- nautobot/project-static/docs/development/core/homepage.html +3 -24
- nautobot/project-static/docs/development/core/index.html +3 -24
- nautobot/project-static/docs/development/core/model-features.html +3 -24
- nautobot/project-static/docs/development/core/natural-keys.html +3 -24
- nautobot/project-static/docs/development/core/navigation-menu.html +3 -24
- nautobot/project-static/docs/development/core/release-checklist.html +3 -24
- nautobot/project-static/docs/development/core/role-internals.html +3 -24
- nautobot/project-static/docs/development/core/settings.html +3 -24
- nautobot/project-static/docs/development/core/style-guide.html +3 -24
- nautobot/project-static/docs/development/core/templates.html +3 -24
- nautobot/project-static/docs/development/core/testing.html +3 -24
- nautobot/project-static/docs/development/core/user-preferences.html +3 -24
- nautobot/project-static/docs/development/index.html +3 -24
- nautobot/project-static/docs/development/jobs/index.html +3 -24
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +3 -24
- nautobot/project-static/docs/index.html +3 -24
- nautobot/project-static/docs/models/dcim/{controllermanageddevicegroup.html → controllerdevicegroup.html} +3 -3
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/release-notes/index.html +3 -24
- nautobot/project-static/docs/release-notes/version-1.0.html +3 -24
- nautobot/project-static/docs/release-notes/version-1.1.html +3 -24
- nautobot/project-static/docs/release-notes/version-1.2.html +3 -24
- nautobot/project-static/docs/release-notes/version-1.3.html +3 -24
- nautobot/project-static/docs/release-notes/version-1.4.html +3 -24
- nautobot/project-static/docs/release-notes/version-1.5.html +3 -24
- nautobot/project-static/docs/release-notes/version-1.6.html +3 -24
- nautobot/project-static/docs/release-notes/version-2.0.html +3 -24
- nautobot/project-static/docs/release-notes/version-2.1.html +162 -411
- nautobot/project-static/docs/release-notes/version-2.2.html +30 -212
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +255 -260
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +3 -24
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +3 -24
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +3 -24
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +3 -24
- nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +3 -24
- nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +3 -24
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +3 -24
- nautobot/project-static/docs/user-guide/administration/guides/caching.html +3 -24
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +3 -24
- nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +3 -24
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +3 -24
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +3 -24
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +3 -24
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +3 -24
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +3 -24
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +3 -24
- nautobot/project-static/docs/user-guide/administration/installation/docker.html +6 -31
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +3 -24
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +3 -24
- nautobot/project-static/docs/user-guide/administration/installation/index.html +3 -24
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +3 -24
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +3 -24
- nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +6 -27
- nautobot/project-static/docs/user-guide/administration/installation/services.html +3 -24
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +3 -24
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +3 -24
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +3 -24
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +3 -24
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +3 -24
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +3 -24
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +3 -24
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +3 -24
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +3 -24
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +3 -24
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +3 -24
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +3 -24
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +11 -259
- nautobot/project-static/docs/user-guide/core-data-model/dcim/{controllermanageddevicegroup.html → controllerdevicegroup.html} +17 -107
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +6 -27
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +3 -24
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/{contacts-and-teams.html → contact-and-team.html} +4 -25
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +5 -26
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +5 -26
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +3 -24
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +3 -24
- nautobot/project-static/docs/user-guide/index.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +3 -24
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +3 -24
- nautobot/tenancy/api/urls.py +2 -1
- nautobot/tenancy/api/views.py +12 -0
- nautobot/tenancy/tables.py +1 -1
- nautobot/tenancy/tests/test_views.py +0 -1
- nautobot/users/api/urls.py +2 -1
- nautobot/users/api/views.py +65 -2
- nautobot/users/views.py +8 -8
- nautobot/virtualization/api/urls.py +2 -1
- nautobot/virtualization/api/views.py +12 -0
- {nautobot-2.2.0.dist-info → nautobot-2.2.0b1.dist-info}/METADATA +3 -3
- {nautobot-2.2.0.dist-info → nautobot-2.2.0b1.dist-info}/RECORD +356 -361
- nautobot/core/tests/integration/test_view_authentication.py +0 -67
- nautobot/dcim/management/commands/migrate_location_contacts.py +0 -218
- nautobot/dcim/templates/dcim/controller_create.html +0 -70
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +0 -88
- nautobot/ipam/tests/test_tables.py +0 -42
- nautobot/project-static/docs/user-guide/administration/installation/health-checks.html +0 -8581
- /nautobot/dcim/templates/dcim/{controllermanageddevicegroup_retrieve.html → controllerdevicegroup_retrieve.html} +0 -0
- {nautobot-2.2.0.dist-info → nautobot-2.2.0b1.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.2.0.dist-info → nautobot-2.2.0b1.dist-info}/NOTICE +0 -0
- {nautobot-2.2.0.dist-info → nautobot-2.2.0b1.dist-info}/WHEEL +0 -0
- {nautobot-2.2.0.dist-info → nautobot-2.2.0b1.dist-info}/entry_points.txt +0 -0
nautobot/dcim/api/views.py
CHANGED
|
@@ -13,6 +13,7 @@ from rest_framework.decorators import action
|
|
|
13
13
|
from rest_framework.mixins import ListModelMixin
|
|
14
14
|
from rest_framework.permissions import IsAuthenticated
|
|
15
15
|
from rest_framework.response import Response
|
|
16
|
+
from rest_framework.routers import APIRootView
|
|
16
17
|
from rest_framework.viewsets import GenericViewSet, ViewSet
|
|
17
18
|
|
|
18
19
|
from nautobot.circuits.models import Circuit
|
|
@@ -29,7 +30,7 @@ from nautobot.dcim.models import (
|
|
|
29
30
|
ConsoleServerPort,
|
|
30
31
|
ConsoleServerPortTemplate,
|
|
31
32
|
Controller,
|
|
32
|
-
|
|
33
|
+
ControllerDeviceGroup,
|
|
33
34
|
Device,
|
|
34
35
|
DeviceBay,
|
|
35
36
|
DeviceBayTemplate,
|
|
@@ -75,6 +76,16 @@ from nautobot.virtualization.models import VirtualMachine
|
|
|
75
76
|
from . import serializers
|
|
76
77
|
from .exceptions import MissingFilterException
|
|
77
78
|
|
|
79
|
+
|
|
80
|
+
class DCIMRootView(APIRootView):
|
|
81
|
+
"""
|
|
82
|
+
DCIM API root view
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
def get_view_name(self):
|
|
86
|
+
return "DCIM"
|
|
87
|
+
|
|
88
|
+
|
|
78
89
|
# Mixins
|
|
79
90
|
|
|
80
91
|
|
|
@@ -380,7 +391,7 @@ class DeviceViewSet(ConfigContextQuerySetMixin, NautobotModelViewSet):
|
|
|
380
391
|
"software_version",
|
|
381
392
|
"virtual_chassis__master",
|
|
382
393
|
"device_redundancy_group",
|
|
383
|
-
"
|
|
394
|
+
"controller_device_group",
|
|
384
395
|
"secrets_group",
|
|
385
396
|
"status",
|
|
386
397
|
).prefetch_related("tags", "primary_ip4__nat_outside_list", "primary_ip6__nat_outside_list", "software_image_files")
|
|
@@ -775,7 +786,7 @@ class ConnectedDeviceViewSet(ViewSet):
|
|
|
775
786
|
|
|
776
787
|
# Determine local interface from peer interface's connection
|
|
777
788
|
peer_interface = get_object_or_404(
|
|
778
|
-
Interface.objects.
|
|
789
|
+
Interface.objects.all(),
|
|
779
790
|
device__name=peer_device_name,
|
|
780
791
|
name=peer_interface_name,
|
|
781
792
|
)
|
|
@@ -829,11 +840,11 @@ class ControllerViewSet(NautobotModelViewSet):
|
|
|
829
840
|
filterset_class = filters.ControllerFilterSet
|
|
830
841
|
|
|
831
842
|
|
|
832
|
-
class
|
|
833
|
-
queryset =
|
|
843
|
+
class ControllerDeviceGroupViewSet(NautobotModelViewSet):
|
|
844
|
+
queryset = ControllerDeviceGroup.objects.select_related(
|
|
834
845
|
"controller",
|
|
835
846
|
"parent",
|
|
836
847
|
).prefetch_related("tags")
|
|
837
848
|
|
|
838
|
-
serializer_class = serializers.
|
|
839
|
-
filterset_class = filters.
|
|
849
|
+
serializer_class = serializers.ControllerDeviceGroupSerializer
|
|
850
|
+
filterset_class = filters.ControllerDeviceGroupFilterSet
|
nautobot/dcim/factory.py
CHANGED
|
@@ -26,7 +26,7 @@ from nautobot.dcim.choices import (
|
|
|
26
26
|
)
|
|
27
27
|
from nautobot.dcim.models import (
|
|
28
28
|
Controller,
|
|
29
|
-
|
|
29
|
+
ControllerDeviceGroup,
|
|
30
30
|
Device,
|
|
31
31
|
DeviceFamily,
|
|
32
32
|
DeviceRedundancyGroup,
|
|
@@ -167,7 +167,7 @@ class DeviceFactory(PrimaryModelFactory):
|
|
|
167
167
|
factory.Faker("pyint", min_value=1, max_value=500),
|
|
168
168
|
)
|
|
169
169
|
|
|
170
|
-
|
|
170
|
+
controller_device_group = random_instance(ControllerDeviceGroup)
|
|
171
171
|
|
|
172
172
|
has_comments = NautobotBoolIterator()
|
|
173
173
|
comments = factory.Maybe("has_comments", factory.Faker("bs"))
|
|
@@ -694,19 +694,19 @@ class ControllerFactory(PrimaryModelFactory):
|
|
|
694
694
|
location = random_instance(lambda: Location.objects.get_for_model(Controller), allow_null=False)
|
|
695
695
|
tenant = random_instance(Tenant)
|
|
696
696
|
external_integration = random_instance(ExternalIntegration)
|
|
697
|
-
|
|
698
|
-
|
|
697
|
+
deployed_controller_device = factory.Maybe("has_device", random_instance(Device), None)
|
|
698
|
+
deployed_controller_group = factory.Maybe("has_device", None, random_instance(DeviceRedundancyGroup))
|
|
699
699
|
|
|
700
700
|
|
|
701
|
-
class
|
|
701
|
+
class ControllerDeviceGroupFactory(PrimaryModelFactory):
|
|
702
702
|
class Meta:
|
|
703
|
-
model =
|
|
703
|
+
model = ControllerDeviceGroup
|
|
704
704
|
|
|
705
705
|
class Params:
|
|
706
706
|
has_parent = NautobotBoolIterator()
|
|
707
707
|
|
|
708
708
|
name = UniqueFaker("word")
|
|
709
|
-
parent = factory.Maybe("has_parent", random_instance(
|
|
709
|
+
parent = factory.Maybe("has_parent", random_instance(ControllerDeviceGroup), None)
|
|
710
710
|
controller = factory.LazyAttribute(
|
|
711
711
|
lambda o: o.parent.controller if o.parent else Controller.objects.order_by("?").first()
|
|
712
712
|
)
|
|
@@ -42,7 +42,7 @@ from nautobot.dcim.models import (
|
|
|
42
42
|
ConsoleServerPort,
|
|
43
43
|
ConsoleServerPortTemplate,
|
|
44
44
|
Controller,
|
|
45
|
-
|
|
45
|
+
ControllerDeviceGroup,
|
|
46
46
|
Device,
|
|
47
47
|
DeviceBay,
|
|
48
48
|
DeviceBayTemplate,
|
|
@@ -99,7 +99,7 @@ __all__ = (
|
|
|
99
99
|
"ConsoleServerPortFilterSet",
|
|
100
100
|
"ConsoleServerPortTemplateFilterSet",
|
|
101
101
|
"ControllerFilterSet",
|
|
102
|
-
"
|
|
102
|
+
"ControllerDeviceGroupFilterSet",
|
|
103
103
|
"DeviceBayFilterSet",
|
|
104
104
|
"DeviceBayTemplateFilterSet",
|
|
105
105
|
"DeviceFilterSet",
|
|
@@ -918,11 +918,11 @@ class DeviceFilterSet(
|
|
|
918
918
|
to_field_name="name",
|
|
919
919
|
label="Device Redundancy Groups (name or ID)",
|
|
920
920
|
)
|
|
921
|
-
|
|
922
|
-
field_name="
|
|
923
|
-
queryset=
|
|
921
|
+
controller_device_group = NaturalKeyOrPKMultipleChoiceFilter(
|
|
922
|
+
field_name="controller_device_group",
|
|
923
|
+
queryset=ControllerDeviceGroup.objects.all(),
|
|
924
924
|
to_field_name="name",
|
|
925
|
-
label="Controller
|
|
925
|
+
label="Controller Device Groups (name or ID)",
|
|
926
926
|
)
|
|
927
927
|
virtual_chassis_member = is_virtual_chassis_member
|
|
928
928
|
has_console_ports = RelatedMembershipBooleanFilter(
|
|
@@ -1842,6 +1842,7 @@ class ControllerFilterSet(
|
|
|
1842
1842
|
NautobotFilterSet,
|
|
1843
1843
|
LocatableModelFilterSetMixin,
|
|
1844
1844
|
TenancyModelFilterSetMixin,
|
|
1845
|
+
LocalContextModelFilterSetMixin,
|
|
1845
1846
|
StatusModelFilterSetMixin,
|
|
1846
1847
|
RoleModelFilterSetMixin,
|
|
1847
1848
|
):
|
|
@@ -1863,15 +1864,15 @@ class ControllerFilterSet(
|
|
|
1863
1864
|
to_field_name="name",
|
|
1864
1865
|
label="External integration (name or ID)",
|
|
1865
1866
|
)
|
|
1866
|
-
|
|
1867
|
+
deployed_controller_device = NaturalKeyOrPKMultipleChoiceFilter(
|
|
1867
1868
|
queryset=Device.objects.all(),
|
|
1868
1869
|
to_field_name="name",
|
|
1869
|
-
label="
|
|
1870
|
+
label="Deployed controller device (name or ID)",
|
|
1870
1871
|
)
|
|
1871
|
-
|
|
1872
|
+
deployed_controller_group = NaturalKeyOrPKMultipleChoiceFilter(
|
|
1872
1873
|
queryset=DeviceRedundancyGroup.objects.all(),
|
|
1873
1874
|
to_field_name="name",
|
|
1874
|
-
label="
|
|
1875
|
+
label="Deployed controller group (name or ID)",
|
|
1875
1876
|
)
|
|
1876
1877
|
|
|
1877
1878
|
class Meta:
|
|
@@ -1879,8 +1880,8 @@ class ControllerFilterSet(
|
|
|
1879
1880
|
fields = "__all__"
|
|
1880
1881
|
|
|
1881
1882
|
|
|
1882
|
-
class
|
|
1883
|
-
"""Filters for
|
|
1883
|
+
class ControllerDeviceGroupFilterSet(NautobotFilterSet):
|
|
1884
|
+
"""Filters for ControllerDeviceGroup model."""
|
|
1884
1885
|
|
|
1885
1886
|
q = SearchFilter(
|
|
1886
1887
|
filter_predicates={
|
|
@@ -1893,7 +1894,7 @@ class ControllerManagedDeviceGroupFilterSet(NautobotFilterSet):
|
|
|
1893
1894
|
label="Controller (name or ID)",
|
|
1894
1895
|
)
|
|
1895
1896
|
parent = NaturalKeyOrPKMultipleChoiceFilter(
|
|
1896
|
-
queryset=
|
|
1897
|
+
queryset=ControllerDeviceGroup.objects.all(),
|
|
1897
1898
|
to_field_name="name",
|
|
1898
1899
|
label="Parent group (name or ID)",
|
|
1899
1900
|
)
|
|
@@ -1905,7 +1906,7 @@ class ControllerManagedDeviceGroupFilterSet(NautobotFilterSet):
|
|
|
1905
1906
|
)
|
|
1906
1907
|
|
|
1907
1908
|
class Meta:
|
|
1908
|
-
model =
|
|
1909
|
+
model = ControllerDeviceGroup
|
|
1909
1910
|
fields = "__all__"
|
|
1910
1911
|
|
|
1911
1912
|
def generate_query__subtree(self, value):
|
|
@@ -1913,7 +1914,7 @@ class ControllerManagedDeviceGroupFilterSet(NautobotFilterSet):
|
|
|
1913
1914
|
if value:
|
|
1914
1915
|
params = Q(pk__in=[v.pk for v in value])
|
|
1915
1916
|
filter_name = "in"
|
|
1916
|
-
for _ in range(
|
|
1917
|
+
for _ in range(ControllerDeviceGroup.objects.max_depth + 1):
|
|
1917
1918
|
filter_name = f"parent__{filter_name}"
|
|
1918
1919
|
params |= Q(**{filter_name: value})
|
|
1919
1920
|
return params
|
|
@@ -1921,6 +1922,6 @@ class ControllerManagedDeviceGroupFilterSet(NautobotFilterSet):
|
|
|
1921
1922
|
|
|
1922
1923
|
@extend_schema_field({"type": "string"})
|
|
1923
1924
|
def _subtree(self, queryset, name, value):
|
|
1924
|
-
"""FilterSet method for getting Groups that are or are descended from a given
|
|
1925
|
+
"""FilterSet method for getting Groups that are or are descended from a given ControllerDeviceGroup(s)."""
|
|
1925
1926
|
params = self.generate_query__subtree(value)
|
|
1926
1927
|
return queryset.filter(params)
|
nautobot/dcim/forms.py
CHANGED
|
@@ -95,7 +95,7 @@ from .models import (
|
|
|
95
95
|
ConsoleServerPort,
|
|
96
96
|
ConsoleServerPortTemplate,
|
|
97
97
|
Controller,
|
|
98
|
-
|
|
98
|
+
ControllerDeviceGroup,
|
|
99
99
|
Device,
|
|
100
100
|
DeviceBay,
|
|
101
101
|
DeviceBayTemplate,
|
|
@@ -1548,9 +1548,7 @@ class DeviceForm(LocatableModelFormMixin, NautobotModelForm, TenancyForm, LocalC
|
|
|
1548
1548
|
},
|
|
1549
1549
|
)
|
|
1550
1550
|
device_redundancy_group = DynamicModelChoiceField(queryset=DeviceRedundancyGroup.objects.all(), required=False)
|
|
1551
|
-
|
|
1552
|
-
queryset=ControllerManagedDeviceGroup.objects.all(), required=False
|
|
1553
|
-
)
|
|
1551
|
+
controller_device_group = DynamicModelChoiceField(queryset=ControllerDeviceGroup.objects.all(), required=False)
|
|
1554
1552
|
position = forms.IntegerField(
|
|
1555
1553
|
required=False,
|
|
1556
1554
|
help_text="The lowest-numbered unit occupied by the device",
|
|
@@ -1620,7 +1618,7 @@ class DeviceForm(LocatableModelFormMixin, NautobotModelForm, TenancyForm, LocalC
|
|
|
1620
1618
|
"rack",
|
|
1621
1619
|
"device_redundancy_group",
|
|
1622
1620
|
"device_redundancy_group_priority",
|
|
1623
|
-
"
|
|
1621
|
+
"controller_device_group",
|
|
1624
1622
|
"position",
|
|
1625
1623
|
"face",
|
|
1626
1624
|
"status",
|
|
@@ -1762,9 +1760,7 @@ class DeviceBulkEditForm(
|
|
|
1762
1760
|
secrets_group = DynamicModelChoiceField(queryset=SecretsGroup.objects.all(), required=False)
|
|
1763
1761
|
device_redundancy_group = DynamicModelChoiceField(queryset=DeviceRedundancyGroup.objects.all(), required=False)
|
|
1764
1762
|
device_redundancy_group_priority = forms.IntegerField(required=False, min_value=1)
|
|
1765
|
-
|
|
1766
|
-
queryset=ControllerManagedDeviceGroup.objects.all(), required=False
|
|
1767
|
-
)
|
|
1763
|
+
controller_device_group = DynamicModelChoiceField(queryset=ControllerDeviceGroup.objects.all(), required=False)
|
|
1768
1764
|
software_version = DynamicModelChoiceField(queryset=SoftwareVersion.objects.all(), required=False)
|
|
1769
1765
|
software_image_files = DynamicModelMultipleChoiceField(queryset=SoftwareImageFile.objects.all(), required=False)
|
|
1770
1766
|
|
|
@@ -1782,7 +1778,7 @@ class DeviceBulkEditForm(
|
|
|
1782
1778
|
"secrets_group",
|
|
1783
1779
|
"device_redundancy_group",
|
|
1784
1780
|
"device_redundancy_group_priority",
|
|
1785
|
-
"
|
|
1781
|
+
"controller_device_group",
|
|
1786
1782
|
"software_image_files",
|
|
1787
1783
|
"software_version",
|
|
1788
1784
|
]
|
|
@@ -1862,8 +1858,8 @@ class DeviceFilterForm(
|
|
|
1862
1858
|
null_option="None",
|
|
1863
1859
|
)
|
|
1864
1860
|
device_redundancy_group_priority = NumericArrayField(base_field=forms.IntegerField(min_value=1), required=False)
|
|
1865
|
-
|
|
1866
|
-
queryset=
|
|
1861
|
+
controller_device_group = DynamicModelMultipleChoiceField(
|
|
1862
|
+
queryset=ControllerDeviceGroup.objects.all(),
|
|
1867
1863
|
to_field_name="name",
|
|
1868
1864
|
required=False,
|
|
1869
1865
|
null_option="None",
|
|
@@ -4127,30 +4123,9 @@ class SoftwareVersionForm(NautobotModelForm):
|
|
|
4127
4123
|
fields = "__all__"
|
|
4128
4124
|
|
|
4129
4125
|
|
|
4130
|
-
class ControllerForm(LocatableModelFormMixin, NautobotModelForm, TenancyForm):
|
|
4126
|
+
class ControllerForm(LocatableModelFormMixin, NautobotModelForm, TenancyForm, LocalContextModelForm):
|
|
4131
4127
|
"""Controller create/edit form."""
|
|
4132
4128
|
|
|
4133
|
-
platform = DynamicModelChoiceField(
|
|
4134
|
-
queryset=Platform.objects.all(),
|
|
4135
|
-
required=False,
|
|
4136
|
-
)
|
|
4137
|
-
tenant = DynamicModelChoiceField(
|
|
4138
|
-
queryset=Tenant.objects.all(),
|
|
4139
|
-
required=False,
|
|
4140
|
-
)
|
|
4141
|
-
external_integration = DynamicModelChoiceField(
|
|
4142
|
-
queryset=ExternalIntegration.objects.all(),
|
|
4143
|
-
required=False,
|
|
4144
|
-
)
|
|
4145
|
-
controller_device = DynamicModelChoiceField(
|
|
4146
|
-
queryset=Device.objects.all(),
|
|
4147
|
-
required=False,
|
|
4148
|
-
)
|
|
4149
|
-
controller_device_redundancy_group = DynamicModelChoiceField(
|
|
4150
|
-
queryset=DeviceRedundancyGroup.objects.all(),
|
|
4151
|
-
required=False,
|
|
4152
|
-
)
|
|
4153
|
-
|
|
4154
4129
|
class Meta:
|
|
4155
4130
|
model = Controller
|
|
4156
4131
|
fields = (
|
|
@@ -4162,14 +4137,15 @@ class ControllerForm(LocatableModelFormMixin, NautobotModelForm, TenancyForm):
|
|
|
4162
4137
|
"tenant",
|
|
4163
4138
|
"location",
|
|
4164
4139
|
"external_integration",
|
|
4165
|
-
"
|
|
4166
|
-
"
|
|
4140
|
+
"deployed_controller_device",
|
|
4141
|
+
"deployed_controller_group",
|
|
4167
4142
|
"tags",
|
|
4168
4143
|
)
|
|
4169
4144
|
|
|
4170
4145
|
|
|
4171
4146
|
class ControllerFilterForm(
|
|
4172
4147
|
NautobotFilterForm,
|
|
4148
|
+
LocalContextFilterForm,
|
|
4173
4149
|
LocatableModelFilterFormMixin,
|
|
4174
4150
|
TenancyFilterForm,
|
|
4175
4151
|
StatusModelFilterFormMixin,
|
|
@@ -4191,15 +4167,15 @@ class ControllerFilterForm(
|
|
|
4191
4167
|
required=False,
|
|
4192
4168
|
label="External integration",
|
|
4193
4169
|
)
|
|
4194
|
-
|
|
4170
|
+
deployed_controller_device = DynamicModelMultipleChoiceField(
|
|
4195
4171
|
queryset=Device.objects.all(),
|
|
4196
4172
|
required=False,
|
|
4197
|
-
label="
|
|
4173
|
+
label="Deployed controller device",
|
|
4198
4174
|
)
|
|
4199
|
-
|
|
4175
|
+
deployed_controller_group = DynamicModelMultipleChoiceField(
|
|
4200
4176
|
queryset=DeviceRedundancyGroup.objects.all(),
|
|
4201
4177
|
required=False,
|
|
4202
|
-
label="
|
|
4178
|
+
label="Deployed controller group",
|
|
4203
4179
|
)
|
|
4204
4180
|
tags = TagFilterField(model)
|
|
4205
4181
|
field_order = (
|
|
@@ -4212,8 +4188,8 @@ class ControllerFilterForm(
|
|
|
4212
4188
|
"platform",
|
|
4213
4189
|
"tenant",
|
|
4214
4190
|
"external_integration",
|
|
4215
|
-
"
|
|
4216
|
-
"
|
|
4191
|
+
"deployed_controller_device",
|
|
4192
|
+
"deployed_controller_group",
|
|
4217
4193
|
"tags",
|
|
4218
4194
|
)
|
|
4219
4195
|
|
|
@@ -4224,6 +4200,7 @@ class ControllerBulkEditForm(
|
|
|
4224
4200
|
StatusModelBulkEditFormMixin,
|
|
4225
4201
|
RoleModelBulkEditFormMixin,
|
|
4226
4202
|
NautobotBulkEditForm,
|
|
4203
|
+
LocalContextModelBulkEditForm,
|
|
4227
4204
|
):
|
|
4228
4205
|
"""Controller bulk edit form."""
|
|
4229
4206
|
|
|
@@ -4243,11 +4220,11 @@ class ControllerBulkEditForm(
|
|
|
4243
4220
|
queryset=ExternalIntegration.objects.all(),
|
|
4244
4221
|
required=False,
|
|
4245
4222
|
)
|
|
4246
|
-
|
|
4223
|
+
deployed_controller_device = DynamicModelChoiceField(
|
|
4247
4224
|
queryset=Device.objects.all(),
|
|
4248
4225
|
required=False,
|
|
4249
4226
|
)
|
|
4250
|
-
|
|
4227
|
+
deployed_controller_group = DynamicModelChoiceField(
|
|
4251
4228
|
queryset=DeviceRedundancyGroup.objects.all(),
|
|
4252
4229
|
required=False,
|
|
4253
4230
|
)
|
|
@@ -4262,24 +4239,24 @@ class ControllerBulkEditForm(
|
|
|
4262
4239
|
"platform",
|
|
4263
4240
|
"tenant",
|
|
4264
4241
|
"external_integration",
|
|
4265
|
-
"
|
|
4266
|
-
"
|
|
4242
|
+
"deployed_controller_device",
|
|
4243
|
+
"deployed_controller_group",
|
|
4267
4244
|
"tags",
|
|
4268
4245
|
)
|
|
4269
4246
|
|
|
4270
4247
|
|
|
4271
|
-
class
|
|
4272
|
-
"""
|
|
4248
|
+
class ControllerDeviceGroupForm(NautobotModelForm):
|
|
4249
|
+
"""ControllerDeviceGroup create/edit form."""
|
|
4273
4250
|
|
|
4274
|
-
controller = DynamicModelChoiceField(queryset=Controller.objects.all(), required=
|
|
4251
|
+
controller = DynamicModelChoiceField(queryset=Controller.objects.all(), required=False)
|
|
4275
4252
|
devices = DynamicModelMultipleChoiceField(queryset=Device.objects.all(), required=False)
|
|
4276
|
-
parent = DynamicModelChoiceField(queryset=
|
|
4253
|
+
parent = DynamicModelChoiceField(queryset=ControllerDeviceGroup.objects.all(), required=False)
|
|
4277
4254
|
|
|
4278
4255
|
class Meta:
|
|
4279
|
-
model =
|
|
4256
|
+
model = ControllerDeviceGroup
|
|
4280
4257
|
fields = (
|
|
4281
|
-
"controller",
|
|
4282
4258
|
"name",
|
|
4259
|
+
"controller",
|
|
4283
4260
|
"devices",
|
|
4284
4261
|
"parent",
|
|
4285
4262
|
"weight",
|
|
@@ -4298,10 +4275,13 @@ class ControllerManagedDeviceGroupForm(NautobotModelForm):
|
|
|
4298
4275
|
return instance
|
|
4299
4276
|
|
|
4300
4277
|
|
|
4301
|
-
class
|
|
4302
|
-
|
|
4278
|
+
class ControllerDeviceGroupFilterForm(
|
|
4279
|
+
LocalContextFilterForm,
|
|
4280
|
+
NautobotFilterForm,
|
|
4281
|
+
):
|
|
4282
|
+
"""ControllerDeviceGroup basic filter form."""
|
|
4303
4283
|
|
|
4304
|
-
model =
|
|
4284
|
+
model = ControllerDeviceGroup
|
|
4305
4285
|
q = forms.CharField(required=False, label="Search")
|
|
4306
4286
|
name = forms.CharField(required=False, label="Name")
|
|
4307
4287
|
controller = DynamicModelChoiceField(
|
|
@@ -4310,13 +4290,13 @@ class ControllerManagedDeviceGroupFilterForm(NautobotFilterForm):
|
|
|
4310
4290
|
label="Controller",
|
|
4311
4291
|
)
|
|
4312
4292
|
parent = DynamicModelChoiceField(
|
|
4313
|
-
queryset=
|
|
4293
|
+
queryset=ControllerDeviceGroup.objects.all(),
|
|
4314
4294
|
required=False,
|
|
4315
4295
|
label="Parent",
|
|
4316
4296
|
)
|
|
4317
4297
|
weight = forms.IntegerField(required=False, label="Weight")
|
|
4318
4298
|
subtree = DynamicModelMultipleChoiceField(
|
|
4319
|
-
queryset=
|
|
4299
|
+
queryset=ControllerDeviceGroup.objects.all(),
|
|
4320
4300
|
to_field_name="name",
|
|
4321
4301
|
required=False,
|
|
4322
4302
|
)
|
|
@@ -4332,19 +4312,23 @@ class ControllerManagedDeviceGroupFilterForm(NautobotFilterForm):
|
|
|
4332
4312
|
)
|
|
4333
4313
|
|
|
4334
4314
|
|
|
4335
|
-
class
|
|
4336
|
-
|
|
4315
|
+
class ControllerDeviceGroupBulkEditForm(
|
|
4316
|
+
TagsBulkEditFormMixin,
|
|
4317
|
+
NautobotBulkEditForm,
|
|
4318
|
+
LocalContextModelBulkEditForm,
|
|
4319
|
+
):
|
|
4320
|
+
"""ControllerDeviceGroup bulk edit form."""
|
|
4337
4321
|
|
|
4338
4322
|
pk = forms.ModelMultipleChoiceField(
|
|
4339
|
-
queryset=
|
|
4323
|
+
queryset=ControllerDeviceGroup.objects.all(),
|
|
4340
4324
|
widget=forms.MultipleHiddenInput,
|
|
4341
4325
|
)
|
|
4342
4326
|
controller = DynamicModelChoiceField(queryset=Controller.objects.all(), required=False)
|
|
4343
|
-
parent = DynamicModelChoiceField(queryset=
|
|
4327
|
+
parent = DynamicModelChoiceField(queryset=ControllerDeviceGroup.objects.all(), required=False)
|
|
4344
4328
|
weight = forms.IntegerField(required=False)
|
|
4345
4329
|
|
|
4346
4330
|
class Meta:
|
|
4347
|
-
model =
|
|
4331
|
+
model = ControllerDeviceGroup
|
|
4348
4332
|
fields = (
|
|
4349
4333
|
"controller",
|
|
4350
4334
|
"parent",
|
nautobot/dcim/homepage.py
CHANGED
|
@@ -79,21 +79,13 @@ layout = (
|
|
|
79
79
|
description="Represents a set of devices which share a common control plane",
|
|
80
80
|
weight=400,
|
|
81
81
|
),
|
|
82
|
-
HomePageItem(
|
|
83
|
-
name="Controllers",
|
|
84
|
-
link="dcim:controller_list",
|
|
85
|
-
model=models.Controller,
|
|
86
|
-
permissions=["dcim.view_controller"],
|
|
87
|
-
description="Represents a network or SDN (Software-Defined Networking) controllers",
|
|
88
|
-
weight=500,
|
|
89
|
-
),
|
|
90
82
|
HomePageItem(
|
|
91
83
|
name="Device Redundancy Groups",
|
|
92
84
|
link="dcim:deviceredundancygroup_list",
|
|
93
85
|
model=models.DeviceRedundancyGroup,
|
|
94
86
|
permissions=["dcim.view_deviceredundancygroup"],
|
|
95
87
|
description="Represents a set of devices which operate in a failover/HA group",
|
|
96
|
-
weight=
|
|
88
|
+
weight=500,
|
|
97
89
|
),
|
|
98
90
|
HomePageItem(
|
|
99
91
|
name="Interface Redundancy Groups",
|
|
@@ -101,11 +93,11 @@ layout = (
|
|
|
101
93
|
model=models.InterfaceRedundancyGroup,
|
|
102
94
|
permissions=["dcim.view_interfaceredundancygroup"],
|
|
103
95
|
description="Represents a set of interfaces which operate in a failover/HA group",
|
|
104
|
-
weight=
|
|
96
|
+
weight=550,
|
|
105
97
|
),
|
|
106
98
|
HomePageGroup(
|
|
107
99
|
name="Connections",
|
|
108
|
-
weight=
|
|
100
|
+
weight=600,
|
|
109
101
|
items=(
|
|
110
102
|
HomePageItem(
|
|
111
103
|
name="Cables",
|