nautobot 2.4.16__py3-none-any.whl → 2.4.17__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/utils.py +2 -0
- nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +3 -3
- nautobot/cloud/views.py +7 -0
- nautobot/core/apps/__init__.py +1 -0
- nautobot/core/celery/__init__.py +2 -1
- nautobot/core/templates/components/panel/panel.html +1 -1
- nautobot/core/templates/inc/paginator.html +3 -3
- nautobot/core/templates/inc/table.html +2 -2
- nautobot/core/templatetags/helpers.py +80 -6
- nautobot/core/testing/mixins.py +1 -1
- nautobot/core/testing/views.py +2 -4
- nautobot/core/ui/bulk_buttons.py +53 -53
- nautobot/core/ui/object_detail.py +9 -4
- nautobot/core/utils/data.py +13 -0
- nautobot/core/utils/deprecation.py +2 -0
- nautobot/dcim/migrations/0073_alter_powerport_power_factor_and_more.py +41 -0
- nautobot/dcim/models/device_component_templates.py +4 -2
- nautobot/dcim/models/device_components.py +3 -2
- nautobot/dcim/templates/dcim/rack_elevation_list.html +4 -4
- nautobot/dcim/views.py +9 -0
- nautobot/extras/models/customfields.py +45 -9
- nautobot/extras/templates/extras/configcontext_retrieve.html +1 -1
- nautobot/extras/templates/extras/configcontext_update.html +49 -49
- nautobot/extras/templates/extras/configcontextschema_retrieve.html +47 -47
- nautobot/extras/templates/extras/configcontextschema_update.html +18 -18
- nautobot/extras/templates/extras/inc/job_table.html +1 -1
- nautobot/extras/templates/extras/inc/object_contact_header.html +2 -2
- nautobot/extras/templates/extras/note_retrieve.html +53 -53
- nautobot/extras/templates/extras/tag_retrieve.html +1 -1
- nautobot/extras/templates/extras/tag_update.html +14 -14
- nautobot/extras/templates/extras/team_retrieve.html +1 -1
- nautobot/extras/tests/test_models.py +216 -0
- nautobot/extras/tests/test_views.py +2 -2
- nautobot/extras/views.py +1 -0
- nautobot/ipam/apps.py +1 -0
- nautobot/ipam/jobs/__init__.py +10 -0
- nautobot/ipam/jobs/cleanup.py +296 -0
- nautobot/ipam/models.py +301 -178
- nautobot/ipam/templates/ipam/inc/ipadress_edit_header.html +3 -3
- nautobot/ipam/templates/ipam/inc/toggle_available.html +2 -2
- nautobot/ipam/templates/ipam/ipaddress_assign.html +1 -1
- nautobot/ipam/templates/ipam/prefix_list.html +1 -1
- nautobot/ipam/templates/ipam/vlan_retrieve.html +1 -77
- nautobot/ipam/tests/test_jobs.py +454 -0
- nautobot/ipam/tests/test_models.py +290 -122
- nautobot/ipam/tests/test_views.py +40 -164
- nautobot/ipam/urls.py +0 -11
- nautobot/ipam/utils/testing.py +9 -4
- nautobot/ipam/views.py +166 -235
- nautobot/project-static/docs/404.html +9 -6
- nautobot/project-static/docs/apps/index.html +9 -6
- nautobot/project-static/docs/apps/nautobot-apps.html +9 -6
- nautobot/project-static/docs/assets/javascripts/bundle.92b07e13.min.js +16 -0
- nautobot/project-static/docs/assets/javascripts/{bundle.50899def.min.js.map → bundle.92b07e13.min.js.map} +2 -2
- nautobot/project-static/docs/assets/javascripts/workers/{search.d50fe291.min.js → search.973d3a69.min.js} +4 -4
- nautobot/project-static/docs/assets/javascripts/workers/{search.d50fe291.min.js.map → search.973d3a69.min.js.map} +1 -1
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +10 -7
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +11 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +11 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +28 -9
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +9 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +69 -7
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +9 -6
- nautobot/project-static/docs/development/apps/api/configuration-view.html +13 -10
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +11 -8
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +13 -10
- nautobot/project-static/docs/development/apps/api/models/global-search.html +10 -7
- nautobot/project-static/docs/development/apps/api/models/graphql.html +18 -15
- nautobot/project-static/docs/development/apps/api/models/index.html +14 -11
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +11 -8
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +15 -12
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +9 -6
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +15 -12
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +9 -6
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +11 -8
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +16 -13
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +12 -10305
- nautobot/project-static/docs/development/apps/api/platform-features/prepopulating-data.html +10722 -0
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +15 -12
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +14 -11
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +9 -6
- nautobot/project-static/docs/development/apps/api/prometheus.html +15 -12
- nautobot/project-static/docs/development/apps/api/setup.html +9 -6
- nautobot/project-static/docs/development/apps/api/testing.html +9 -6
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +12 -9
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +9 -6
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +9 -6
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +9 -6
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +20 -17
- nautobot/project-static/docs/development/apps/api/views/base-template.html +9 -6
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +15 -12
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +14 -11
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +9 -6
- nautobot/project-static/docs/development/apps/api/views/index.html +9 -6
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +10 -7
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +24 -21
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +12 -9
- nautobot/project-static/docs/development/apps/api/views/notes.html +10 -7
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +19 -16
- nautobot/project-static/docs/development/apps/api/views/urls.html +11 -8
- nautobot/project-static/docs/development/apps/index.html +9 -6
- nautobot/project-static/docs/development/apps/migration/code-updates.html +19 -16
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +9 -6
- nautobot/project-static/docs/development/apps/migration/from-v1.html +9 -6
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +22 -19
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +9 -6
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +9 -6
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +9 -6
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +9 -6
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/breadcrumbs-titles.html +14 -11
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +27 -24
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +20 -17
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +20 -17
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +9 -6
- nautobot/project-static/docs/development/core/application-registry.html +23 -20
- nautobot/project-static/docs/development/core/best-practices.html +23 -20
- nautobot/project-static/docs/development/core/bootstrap-ui.html +9 -6
- nautobot/project-static/docs/development/core/caching.html +9 -6
- nautobot/project-static/docs/development/core/controllers.html +9 -6
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +10 -7
- nautobot/project-static/docs/development/core/generic-views.html +9 -6
- nautobot/project-static/docs/development/core/getting-started.html +9 -6
- nautobot/project-static/docs/development/core/homepage.html +12 -9
- nautobot/project-static/docs/development/core/index.html +9 -6
- nautobot/project-static/docs/development/core/minikube-dev-environment-for-k8s-jobs.html +9 -6
- nautobot/project-static/docs/development/core/model-checklist.html +9 -6
- nautobot/project-static/docs/development/core/model-features.html +11 -8
- nautobot/project-static/docs/development/core/natural-keys.html +21 -18
- nautobot/project-static/docs/development/core/navigation-menu.html +10 -7
- nautobot/project-static/docs/development/core/release-checklist.html +9 -6
- nautobot/project-static/docs/development/core/role-internals.html +9 -6
- nautobot/project-static/docs/development/core/settings.html +9 -6
- nautobot/project-static/docs/development/core/style-guide.html +32 -29
- nautobot/project-static/docs/development/core/templates.html +9 -6
- nautobot/project-static/docs/development/core/testing.html +10 -7
- nautobot/project-static/docs/development/core/ui-component-framework.html +36 -33
- nautobot/project-static/docs/development/core/user-preferences.html +9 -6
- nautobot/project-static/docs/development/index.html +9 -6
- nautobot/project-static/docs/development/jobs/getting-started.html +13 -10
- nautobot/project-static/docs/development/jobs/index.html +9 -6
- nautobot/project-static/docs/development/jobs/installation.html +23 -20
- nautobot/project-static/docs/development/jobs/job-extensions.html +25 -22
- nautobot/project-static/docs/development/jobs/job-logging.html +12 -9
- nautobot/project-static/docs/development/jobs/job-patterns.html +45 -42
- nautobot/project-static/docs/development/jobs/job-structure.html +53 -50
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +23 -20
- nautobot/project-static/docs/development/jobs/testing.html +14 -11
- nautobot/project-static/docs/index.html +9 -6
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +9 -6
- nautobot/project-static/docs/overview/design_philosophy.html +9 -6
- nautobot/project-static/docs/release-notes/index.html +9 -6
- nautobot/project-static/docs/release-notes/version-1.0.html +9 -6
- nautobot/project-static/docs/release-notes/version-1.1.html +9 -6
- nautobot/project-static/docs/release-notes/version-1.2.html +10 -7
- nautobot/project-static/docs/release-notes/version-1.3.html +9 -6
- nautobot/project-static/docs/release-notes/version-1.4.html +9 -6
- nautobot/project-static/docs/release-notes/version-1.5.html +13 -10
- nautobot/project-static/docs/release-notes/version-1.6.html +9 -6
- nautobot/project-static/docs/release-notes/version-2.0.html +9 -6
- nautobot/project-static/docs/release-notes/version-2.1.html +9 -6
- nautobot/project-static/docs/release-notes/version-2.2.html +9 -6
- nautobot/project-static/docs/release-notes/version-2.3.html +9 -6
- nautobot/project-static/docs/release-notes/version-2.4.html +267 -6
- nautobot/project-static/docs/requirements.txt +2 -2
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +301 -301
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +15 -12
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +9 -6
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +16 -13
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +9 -6
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +9 -6
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +11 -8
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +9 -6
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +16 -13
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/index.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +9 -6
- nautobot/project-static/docs/user-guide/administration/installation/services.html +12 -9
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +13 -10
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +10 -7
- nautobot/project-static/docs/user-guide/administration/security/index.html +9 -6
- nautobot/project-static/docs/user-guide/administration/security/notices.html +9 -6
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +9 -6
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +10 -7
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +9 -6
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +15 -12
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +13 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulefamily.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +11 -8
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +11 -8
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +41 -41
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +197 -54
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +9 -6
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +13 -10
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +9 -6
- nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +9 -6
- nautobot/project-static/docs/user-guide/index.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +10 -7
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +11 -8
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/managing-jobs.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +12 -9
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +11 -8
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +9 -6
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +9 -6
- nautobot/project-static/fonts/UFL.txt +96 -96
- nautobot/project-static/js/forms.js +35 -2
- nautobot/virtualization/filters.py +7 -0
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/METADATA +6 -6
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/RECORD +369 -364
- nautobot/project-static/docs/assets/javascripts/bundle.50899def.min.js +0 -16
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/NOTICE +0 -0
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/WHEEL +0 -0
- {nautobot-2.4.16.dist-info → nautobot-2.4.17.dist-info}/entry_points.txt +0 -0
|
@@ -203,6 +203,10 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase, ViewTestCases.List
|
|
|
203
203
|
"tags": [t.pk for t in Tag.objects.get_for_model(Prefix)],
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
+
cls.update_data = cls.form_data.copy()
|
|
207
|
+
# Can't update `prefix` and `namespace` in the same edit request
|
|
208
|
+
cls.update_data["namespace"] = Prefix.objects.first().namespace.pk
|
|
209
|
+
|
|
206
210
|
cls.bulk_edit_data = {
|
|
207
211
|
"tenant": None,
|
|
208
212
|
"status": cls.statuses[1].pk,
|
|
@@ -217,6 +221,22 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase, ViewTestCases.List
|
|
|
217
221
|
"remove_vrfs": [vrfs[1].pk],
|
|
218
222
|
}
|
|
219
223
|
|
|
224
|
+
@override_settings(EXEMPT_VIEW_PERMISSIONS=[])
|
|
225
|
+
def test_get_object_with_permission(self):
|
|
226
|
+
response = super().test_get_object_with_permission()
|
|
227
|
+
|
|
228
|
+
content = extract_page_body(response.content.decode(response.charset))
|
|
229
|
+
self.assertNotIn("The parent field on this record appears to be set incorrectly", strip_tags(content))
|
|
230
|
+
|
|
231
|
+
instance = self._get_queryset().first()
|
|
232
|
+
instance.parent = self._get_queryset().last()
|
|
233
|
+
self._get_queryset().bulk_update([instance], ["parent"], batch_size=1)
|
|
234
|
+
|
|
235
|
+
response = super().test_get_object_with_permission()
|
|
236
|
+
|
|
237
|
+
content = extract_page_body(response.content.decode(response.charset))
|
|
238
|
+
self.assertIn("The parent field on this record appears to be set incorrectly", strip_tags(content))
|
|
239
|
+
|
|
220
240
|
@override_settings(EXEMPT_VIEW_PERMISSIONS=[])
|
|
221
241
|
def test_list_objects_with_permission(self):
|
|
222
242
|
"""Test rendering of LinkedCountColumn for related fields with display_field override."""
|
|
@@ -258,133 +278,6 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase, ViewTestCases.List
|
|
|
258
278
|
for prefix in prefixes:
|
|
259
279
|
self.assertNotIn(prefix.get_absolute_url(), content, msg=content)
|
|
260
280
|
|
|
261
|
-
@override_settings(EXEMPT_VIEW_PERMISSIONS=["*"])
|
|
262
|
-
def test_create_object_warnings(self):
|
|
263
|
-
"""Test various object creation scenarios that should result in a warning to the user."""
|
|
264
|
-
Prefix.objects.create(
|
|
265
|
-
prefix="10.0.0.0/8",
|
|
266
|
-
namespace=self.namespace,
|
|
267
|
-
type=PrefixTypeChoices.TYPE_CONTAINER,
|
|
268
|
-
status=self.statuses[1],
|
|
269
|
-
)
|
|
270
|
-
Prefix.objects.create(
|
|
271
|
-
prefix="10.0.0.0/16",
|
|
272
|
-
namespace=self.namespace,
|
|
273
|
-
type=PrefixTypeChoices.TYPE_NETWORK,
|
|
274
|
-
status=self.statuses[1],
|
|
275
|
-
)
|
|
276
|
-
Prefix.objects.create(
|
|
277
|
-
prefix="10.0.0.0/24",
|
|
278
|
-
namespace=self.namespace,
|
|
279
|
-
type=PrefixTypeChoices.TYPE_POOL,
|
|
280
|
-
status=self.statuses[1],
|
|
281
|
-
)
|
|
282
|
-
IPAddress.objects.create(
|
|
283
|
-
address="10.0.0.1/32",
|
|
284
|
-
status=Status.objects.get_for_model(IPAddress).first(),
|
|
285
|
-
namespace=self.namespace,
|
|
286
|
-
)
|
|
287
|
-
self.add_permissions("ipam.add_prefix")
|
|
288
|
-
|
|
289
|
-
common_data = {"namespace": self.namespace.pk, "status": self.statuses[0].pk}
|
|
290
|
-
|
|
291
|
-
with self.subTest("Creating a Pool as child of a Container raises a warning"):
|
|
292
|
-
data = {
|
|
293
|
-
"prefix": "10.1.0.0/16",
|
|
294
|
-
"type": PrefixTypeChoices.TYPE_POOL,
|
|
295
|
-
}
|
|
296
|
-
response = self.client.post(self._get_url("add"), data={**common_data, **data}, follow=True)
|
|
297
|
-
self.assertHttpStatus(response, 200)
|
|
298
|
-
content = extract_page_body(response.content.decode(response.charset))
|
|
299
|
-
self.assertIn(
|
|
300
|
-
"10.1.0.0/16 is a Pool prefix but its parent 10.0.0.0/8 is a Container. "
|
|
301
|
-
"This will be considered invalid data in a future release. "
|
|
302
|
-
"Consider changing the type of 10.1.0.0/16 and/or 10.0.0.0/8 to resolve this issue.",
|
|
303
|
-
strip_tags(content),
|
|
304
|
-
)
|
|
305
|
-
|
|
306
|
-
# We could test for Pool-in-Pool, Container-in-Network, Network-in-Network, Container-in-Pool, and
|
|
307
|
-
# Network-in-Pool, but they all use the same code path and similar message
|
|
308
|
-
|
|
309
|
-
with self.subTest("Creating a Container that will have a Pool as its child raises a warning"):
|
|
310
|
-
data = {
|
|
311
|
-
"prefix": "10.0.0.0/20",
|
|
312
|
-
"type": PrefixTypeChoices.TYPE_CONTAINER,
|
|
313
|
-
}
|
|
314
|
-
response = self.client.post(self._get_url("add"), data={**common_data, **data}, follow=True)
|
|
315
|
-
self.assertHttpStatus(response, 200)
|
|
316
|
-
content = extract_page_body(response.content.decode(response.charset))
|
|
317
|
-
self.assertIn(
|
|
318
|
-
"10.0.0.0/20 is a Container prefix and should not contain child prefixes of type Pool. "
|
|
319
|
-
"This will be considered invalid data in a future release. "
|
|
320
|
-
"Consider creating an intermediary Network prefix, or changing the type of its children to Network, "
|
|
321
|
-
"to resolve this issue.",
|
|
322
|
-
strip_tags(content),
|
|
323
|
-
)
|
|
324
|
-
|
|
325
|
-
with self.subTest("Creating a Network that will have another Network as its child raises a warning"):
|
|
326
|
-
data = {
|
|
327
|
-
"prefix": "10.0.0.0/12",
|
|
328
|
-
"type": PrefixTypeChoices.TYPE_NETWORK,
|
|
329
|
-
}
|
|
330
|
-
response = self.client.post(self._get_url("add"), data={**common_data, **data}, follow=True)
|
|
331
|
-
self.assertHttpStatus(response, 200)
|
|
332
|
-
content = extract_page_body(response.content.decode(response.charset))
|
|
333
|
-
self.assertIn(
|
|
334
|
-
"10.0.0.0/12 is a Network prefix and should not contain child prefixes of types Container or Network. "
|
|
335
|
-
"This will be considered invalid data in a future release. "
|
|
336
|
-
"Consider changing the type of 10.0.0.0/12 to Container, or changing the type of its children to Pool, "
|
|
337
|
-
"to resolve this issue.",
|
|
338
|
-
strip_tags(content),
|
|
339
|
-
)
|
|
340
|
-
|
|
341
|
-
with self.subTest("Creating a Pool that will have any other Prefix as its child raises a warning"):
|
|
342
|
-
data = {
|
|
343
|
-
"prefix": "0.0.0.0/0",
|
|
344
|
-
"type": PrefixTypeChoices.TYPE_POOL,
|
|
345
|
-
}
|
|
346
|
-
response = self.client.post(self._get_url("add"), data={**common_data, **data}, follow=True)
|
|
347
|
-
self.assertHttpStatus(response, 200)
|
|
348
|
-
content = extract_page_body(response.content.decode(response.charset))
|
|
349
|
-
self.assertIn(
|
|
350
|
-
"0.0.0.0/0 is a Pool prefix and should not contain other prefixes. "
|
|
351
|
-
"This will be considered invalid data in a future release. "
|
|
352
|
-
"Consider either changing the type of 0.0.0.0/0 to Container or Network, or deleting its children, "
|
|
353
|
-
"to resolve this issue.",
|
|
354
|
-
strip_tags(content),
|
|
355
|
-
)
|
|
356
|
-
|
|
357
|
-
with self.subTest("Creating a large Container that will contain IPs raises a warning"):
|
|
358
|
-
data = {
|
|
359
|
-
"prefix": "10.0.0.0/28",
|
|
360
|
-
"type": PrefixTypeChoices.TYPE_CONTAINER,
|
|
361
|
-
}
|
|
362
|
-
response = self.client.post(self._get_url("add"), data={**common_data, **data}, follow=True)
|
|
363
|
-
self.assertHttpStatus(response, 200)
|
|
364
|
-
content = extract_page_body(response.content.decode(response.charset))
|
|
365
|
-
self.assertIn(
|
|
366
|
-
"10.0.0.0/28 is a Container prefix and should not directly contain IP addresses. "
|
|
367
|
-
"This will be considered invalid data in a future release. "
|
|
368
|
-
"Consider either changing the type of 10.0.0.0/28 to Network, or creating one or more child "
|
|
369
|
-
"prefix(es) of type Network to contain these IP addresses, to resolve this issue.",
|
|
370
|
-
strip_tags(content),
|
|
371
|
-
)
|
|
372
|
-
|
|
373
|
-
with self.subTest("Creating a small Container that will contain IPs raises a different warning"):
|
|
374
|
-
data = {
|
|
375
|
-
"prefix": "10.0.0.1/32",
|
|
376
|
-
"type": PrefixTypeChoices.TYPE_CONTAINER,
|
|
377
|
-
}
|
|
378
|
-
response = self.client.post(self._get_url("add"), data={**common_data, **data}, follow=True)
|
|
379
|
-
self.assertHttpStatus(response, 200)
|
|
380
|
-
content = extract_page_body(response.content.decode(response.charset))
|
|
381
|
-
self.assertIn(
|
|
382
|
-
"10.0.0.1/32 is a Container prefix and should not directly contain IP addresses. "
|
|
383
|
-
"This will be considered invalid data in a future release. "
|
|
384
|
-
"Consider changing the type of 10.0.0.1/32 to Network to resolve this issue.",
|
|
385
|
-
strip_tags(content),
|
|
386
|
-
)
|
|
387
|
-
|
|
388
281
|
@override_settings(EXEMPT_VIEW_PERMISSIONS=["*"])
|
|
389
282
|
def test_prefix_ipaddresses_table_list_includes_child_ips(self):
|
|
390
283
|
ip_status = Status.objects.get_for_model(IPAddress).first()
|
|
@@ -432,7 +325,7 @@ class IPAddressTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
|
432
325
|
cls.statuses = Status.objects.get_for_model(IPAddress)
|
|
433
326
|
cls.prefix_status = Status.objects.get_for_model(Prefix).first()
|
|
434
327
|
roles = Role.objects.get_for_model(IPAddress)
|
|
435
|
-
Prefix.objects.get_or_create(
|
|
328
|
+
cls.prefix, _ = Prefix.objects.get_or_create(
|
|
436
329
|
prefix="192.0.2.0/24",
|
|
437
330
|
defaults={"namespace": cls.namespace, "status": cls.prefix_status, "type": "network"},
|
|
438
331
|
)
|
|
@@ -459,6 +352,22 @@ class IPAddressTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
|
459
352
|
"description": "New description",
|
|
460
353
|
}
|
|
461
354
|
|
|
355
|
+
@override_settings(EXEMPT_VIEW_PERMISSIONS=[])
|
|
356
|
+
def test_get_object_with_permission(self):
|
|
357
|
+
response = super().test_get_object_with_permission()
|
|
358
|
+
|
|
359
|
+
content = extract_page_body(response.content.decode(response.charset))
|
|
360
|
+
self.assertNotIn("The parent field on this record appears to be set incorrectly", strip_tags(content))
|
|
361
|
+
|
|
362
|
+
instance = self._get_queryset().first()
|
|
363
|
+
instance.parent = self.prefix
|
|
364
|
+
self._get_queryset().bulk_update([instance], ["parent"], batch_size=1)
|
|
365
|
+
|
|
366
|
+
response = super().test_get_object_with_permission()
|
|
367
|
+
|
|
368
|
+
content = extract_page_body(response.content.decode(response.charset))
|
|
369
|
+
self.assertIn("The parent field on this record appears to be set incorrectly", strip_tags(content))
|
|
370
|
+
|
|
462
371
|
def test_edit_object_with_permission(self):
|
|
463
372
|
instance = self._get_queryset().first()
|
|
464
373
|
form_data = self.form_data.copy()
|
|
@@ -516,7 +425,9 @@ class IPAddressTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
|
516
425
|
"data": post_data(form_data),
|
|
517
426
|
}
|
|
518
427
|
response = self.client.post(**request)
|
|
519
|
-
self.assertBodyContains(
|
|
428
|
+
self.assertBodyContains(
|
|
429
|
+
response, f"No suitable parent Prefix for {instance.host} exists in Namespace {new_namespace}"
|
|
430
|
+
)
|
|
520
431
|
# Create an exact copy of the parent prefix but in a different namespace. See if the re-parenting is successful
|
|
521
432
|
new_parent = Prefix.objects.create(
|
|
522
433
|
prefix=instance.parent.prefix,
|
|
@@ -529,41 +440,6 @@ class IPAddressTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
|
529
440
|
created_ip = IPAddress.objects.get(parent__namespace=new_namespace, address=instance.address)
|
|
530
441
|
self.assertEqual(created_ip.parent, new_parent)
|
|
531
442
|
|
|
532
|
-
@override_settings(EXEMPT_VIEW_PERMISSIONS=["*"])
|
|
533
|
-
def test_create_object_warnings(self):
|
|
534
|
-
self.add_permissions("ipam.add_ipaddress")
|
|
535
|
-
|
|
536
|
-
Prefix.objects.create(
|
|
537
|
-
prefix="192.0.2.0/25",
|
|
538
|
-
namespace=self.namespace,
|
|
539
|
-
type=PrefixTypeChoices.TYPE_CONTAINER,
|
|
540
|
-
status=self.prefix_status,
|
|
541
|
-
)
|
|
542
|
-
|
|
543
|
-
with self.subTest("Creating an IPAddress as a child of a larger Container prefix raises a warning"):
|
|
544
|
-
self.form_data["address"] = "192.0.2.98/28"
|
|
545
|
-
response = self.client.post(self._get_url("add"), data=post_data(self.form_data), follow=True)
|
|
546
|
-
self.assertHttpStatus(response, 200)
|
|
547
|
-
content = extract_page_body(response.content.decode(response.charset))
|
|
548
|
-
self.assertIn(
|
|
549
|
-
"IP address 192.0.2.98/28 currently has prefix 192.0.2.0/25 as its parent, which is a Container. "
|
|
550
|
-
"This will be considered invalid data in a future release. "
|
|
551
|
-
"Consider creating an intermediate /28 prefix of type Network to resolve this issue.",
|
|
552
|
-
strip_tags(content),
|
|
553
|
-
)
|
|
554
|
-
|
|
555
|
-
with self.subTest("Creating an IP as a child of a same-size Container prefix raises a different warning"):
|
|
556
|
-
self.form_data["address"] = "192.0.2.2/25"
|
|
557
|
-
response = self.client.post(self._get_url("add"), data=post_data(self.form_data), follow=True)
|
|
558
|
-
self.assertHttpStatus(response, 200)
|
|
559
|
-
content = extract_page_body(response.content.decode(response.charset))
|
|
560
|
-
self.assertIn(
|
|
561
|
-
"IP address 192.0.2.2/25 currently has prefix 192.0.2.0/25 as its parent, which is a Container. "
|
|
562
|
-
"This will be considered invalid data in a future release. "
|
|
563
|
-
"Consider changing the prefix to type Network or Pool to resolve this issue.",
|
|
564
|
-
strip_tags(content),
|
|
565
|
-
)
|
|
566
|
-
|
|
567
443
|
@override_settings(EXEMPT_VIEW_PERMISSIONS=["*"])
|
|
568
444
|
def test_bulk_create_ips(self):
|
|
569
445
|
""""""
|
nautobot/ipam/urls.py
CHANGED
|
@@ -139,17 +139,6 @@ urlpatterns = [
|
|
|
139
139
|
views.IPAddressDeleteView.as_view(),
|
|
140
140
|
name="ipaddress_delete",
|
|
141
141
|
),
|
|
142
|
-
# VLANs
|
|
143
|
-
path(
|
|
144
|
-
"vlans/<uuid:pk>/interfaces/",
|
|
145
|
-
views.VLANInterfacesView.as_view(),
|
|
146
|
-
name="vlan_interfaces",
|
|
147
|
-
),
|
|
148
|
-
path(
|
|
149
|
-
"vlans/<uuid:pk>/vm-interfaces/",
|
|
150
|
-
views.VLANVMInterfacesView.as_view(),
|
|
151
|
-
name="vlan_vminterfaces",
|
|
152
|
-
),
|
|
153
142
|
]
|
|
154
143
|
|
|
155
144
|
urlpatterns += router.urls
|
nautobot/ipam/utils/testing.py
CHANGED
|
@@ -5,7 +5,7 @@ import random
|
|
|
5
5
|
from django.apps import apps
|
|
6
6
|
from netaddr import IPNetwork
|
|
7
7
|
|
|
8
|
-
from nautobot.ipam.models import
|
|
8
|
+
from nautobot.ipam.models import get_default_namespace_pk
|
|
9
9
|
|
|
10
10
|
# Calculate the probabilities to use for the maybe_subdivide() function defined below.
|
|
11
11
|
|
|
@@ -112,7 +112,10 @@ def create_prefixes_and_ips(initial_subnet: str, apps=apps, seed="Nautobot"): #
|
|
|
112
112
|
print(f"Seeding the PRNG with seed {seed}")
|
|
113
113
|
random.seed(seed) # suspicious-non-cryptographic-random-usage
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
if hasattr(Status, "slug"):
|
|
116
|
+
status_active, _ = Status.objects.get_or_create(name="Active", defaults={"slug": "active"})
|
|
117
|
+
else:
|
|
118
|
+
status_active, _ = Status.objects.get_or_create(name="Active")
|
|
116
119
|
|
|
117
120
|
for i in range(1, 11):
|
|
118
121
|
Tenant.objects.get_or_create(name=f"{initial_subnet} Tenant {i}")
|
|
@@ -126,7 +129,7 @@ def create_prefixes_and_ips(initial_subnet: str, apps=apps, seed="Nautobot"): #
|
|
|
126
129
|
|
|
127
130
|
all_tenants = list(Tenant.objects.all())
|
|
128
131
|
if hasattr(VRF, "namespace"):
|
|
129
|
-
all_vrfs = list(VRF.objects.filter(
|
|
132
|
+
all_vrfs = list(VRF.objects.filter(namespace_id=get_default_namespace_pk()))
|
|
130
133
|
else:
|
|
131
134
|
all_vrfs = list(VRF.objects.all())
|
|
132
135
|
|
|
@@ -156,11 +159,12 @@ def create_prefixes(initial_subnet, all_tenants, all_vrfs, status_active, Prefix
|
|
|
156
159
|
network=str(subnet.network),
|
|
157
160
|
broadcast=str(subnet.broadcast if subnet.broadcast else subnet[-1]),
|
|
158
161
|
prefix_length=subnet.prefixlen,
|
|
162
|
+
ip_version=subnet.version,
|
|
159
163
|
status=status_active,
|
|
160
164
|
tenant=maybe_random_instance(all_tenants),
|
|
161
165
|
)
|
|
162
166
|
if vrf is not None:
|
|
163
|
-
vrf.
|
|
167
|
+
vrf.prefixes.add(prefix)
|
|
164
168
|
|
|
165
169
|
unique_prefix_count += 1
|
|
166
170
|
if hasattr(Prefix, "vrf"):
|
|
@@ -202,6 +206,7 @@ def create_ips(initial_subnet, all_tenants, all_vrfs, status_active, IPAddress):
|
|
|
202
206
|
IPAddress.objects.create(
|
|
203
207
|
host=str(network.ip),
|
|
204
208
|
mask_length=network.prefixlen,
|
|
209
|
+
ip_version=network.version,
|
|
205
210
|
status=status_active,
|
|
206
211
|
tenant=maybe_random_instance(all_tenants),
|
|
207
212
|
)
|