nautobot 2.3.10__py3-none-any.whl → 2.3.12__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/tables.py +1 -0
- nautobot/core/forms/forms.py +5 -1
- nautobot/core/settings.py +26 -0
- nautobot/core/settings.yaml +31 -0
- nautobot/core/tables.py +88 -22
- nautobot/core/templates/generic/object_bulk_destroy.html +12 -3
- nautobot/core/templates/generic/object_bulk_update.html +4 -2
- nautobot/core/templates/generic/object_create.html +1 -1
- nautobot/core/templates/generic/object_notes.html +1 -1
- nautobot/core/templates/generic/object_retrieve.html +1 -1
- nautobot/core/templates/rest_framework/api.html +3 -0
- nautobot/core/testing/api.py +3 -1
- nautobot/core/testing/integration.py +64 -0
- nautobot/core/testing/views.py +48 -31
- nautobot/core/tests/integration/test_app_navbar.py +3 -3
- nautobot/core/tests/integration/test_navbar.py +1 -1
- nautobot/core/tests/test_csv.py +3 -0
- nautobot/core/tests/test_utils.py +25 -5
- nautobot/core/utils/lookup.py +35 -0
- nautobot/core/views/generic.py +50 -39
- nautobot/core/views/mixins.py +97 -43
- nautobot/core/views/renderers.py +8 -5
- nautobot/dcim/choices.py +6 -0
- nautobot/dcim/tables/devices.py +5 -6
- nautobot/dcim/templates/dcim/controller_retrieve.html +1 -1
- nautobot/dcim/templates/dcim/device/base.html +1 -1
- nautobot/dcim/templates/dcim/device_component_add.html +8 -8
- nautobot/dcim/templates/dcim/virtualchassis_add_member.html +2 -2
- nautobot/dcim/templates/dcim/virtualchassis_edit.html +2 -2
- nautobot/dcim/tests/integration/test_create_device.py +86 -0
- nautobot/extras/group_sync.py +42 -0
- nautobot/extras/models/metadata.py +1 -0
- nautobot/extras/models/models.py +1 -1
- nautobot/extras/plugins/__init__.py +2 -1
- nautobot/extras/tables.py +1 -0
- nautobot/extras/templates/extras/inc/job_table.html +1 -1
- nautobot/extras/tests/test_relationships.py +1 -0
- nautobot/extras/tests/test_views.py +0 -2
- nautobot/extras/views.py +1 -2
- nautobot/ipam/factory.py +3 -0
- nautobot/ipam/filters.py +5 -0
- nautobot/ipam/forms.py +17 -0
- nautobot/ipam/models.py +2 -1
- nautobot/ipam/signals.py +2 -2
- nautobot/ipam/tables.py +6 -13
- nautobot/ipam/templates/ipam/ipaddress_assign.html +2 -2
- nautobot/ipam/templates/ipam/ipaddresstointerface_retrieve.html +1 -1
- nautobot/ipam/tests/test_models.py +113 -1
- nautobot/ipam/tests/test_views.py +39 -5
- nautobot/project-static/docs/404.html +10 -10
- nautobot/project-static/docs/additional-features/caching.html +1 -2
- nautobot/project-static/docs/additional-features/change-logging.html +1 -2
- nautobot/project-static/docs/additional-features/config-contexts.html +1 -2
- nautobot/project-static/docs/additional-features/healthcheck.html +1 -2
- nautobot/project-static/docs/additional-features/jobs.html +1 -2
- nautobot/project-static/docs/additional-features/prometheus-metrics.html +1 -2
- nautobot/project-static/docs/administration/celery-queues.html +1 -2
- nautobot/project-static/docs/administration/nautobot-server.html +1 -2
- nautobot/project-static/docs/administration/nautobot-shell.html +1 -2
- nautobot/project-static/docs/administration/permissions.html +1 -2
- nautobot/project-static/docs/administration/replicating-nautobot.html +1 -2
- nautobot/project-static/docs/apps/index.html +10 -10
- nautobot/project-static/docs/apps/migrating-jobs-from-nautobot-v1.html +1 -2
- nautobot/project-static/docs/apps/nautobot-apps.html +10 -10
- nautobot/project-static/docs/assets/stylesheets/main.6f8fc17f.min.css +1 -0
- nautobot/project-static/docs/assets/stylesheets/main.6f8fc17f.min.css.map +1 -0
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +141 -16
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +185 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +10 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +104 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +14 -14
- nautobot/project-static/docs/configuration/authentication/ldap.html +1 -2
- nautobot/project-static/docs/configuration/authentication/remote.html +1 -2
- nautobot/project-static/docs/configuration/authentication/sso.html +1 -2
- nautobot/project-static/docs/configuration/index.html +1 -2
- nautobot/project-static/docs/configuration/optional-settings.html +1 -2
- nautobot/project-static/docs/configuration/required-settings.html +1 -2
- nautobot/project-static/docs/core-functionality/circuits.html +1 -2
- nautobot/project-static/docs/core-functionality/device-types.html +1 -2
- nautobot/project-static/docs/core-functionality/devices.html +1 -2
- nautobot/project-static/docs/core-functionality/ipam.html +1 -2
- nautobot/project-static/docs/core-functionality/power.html +1 -2
- nautobot/project-static/docs/core-functionality/secrets.html +1 -2
- nautobot/project-static/docs/core-functionality/services.html +1 -2
- nautobot/project-static/docs/core-functionality/sites-and-racks.html +1 -2
- nautobot/project-static/docs/core-functionality/tenancy.html +1 -2
- nautobot/project-static/docs/core-functionality/virtualization.html +1 -2
- nautobot/project-static/docs/core-functionality/vlans.html +1 -2
- nautobot/project-static/docs/development/application-registry.html +1 -2
- nautobot/project-static/docs/development/apps/api/configuration-view.html +10 -10
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +10 -10
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +10 -10
- nautobot/project-static/docs/development/apps/api/models/global-search.html +10 -10
- nautobot/project-static/docs/development/apps/api/models/graphql.html +10 -10
- nautobot/project-static/docs/development/apps/api/models/index.html +10 -10
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +10 -10
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +10 -10
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +10 -10
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +10 -10
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +10 -10
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +10 -10
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +10 -10
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +10 -10
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +10 -10
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +10 -10
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +10 -10
- nautobot/project-static/docs/development/apps/api/prometheus.html +10 -10
- nautobot/project-static/docs/development/apps/api/setup.html +10 -10
- nautobot/project-static/docs/development/apps/api/testing.html +10 -10
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +10 -10
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +10 -10
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +10 -10
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +10 -10
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-detail-views.html +1 -2
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +10 -10
- nautobot/project-static/docs/development/apps/api/ui-extensions/tabs.html +1 -2
- nautobot/project-static/docs/development/apps/api/views/base-template.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/index.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/notes.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/urls.html +10 -10
- nautobot/project-static/docs/development/apps/api/views/view-overrides.html +1 -2
- nautobot/project-static/docs/development/apps/index.html +10 -10
- nautobot/project-static/docs/development/apps/migration/code-updates.html +10 -10
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +10 -10
- nautobot/project-static/docs/development/apps/migration/from-v1.html +10 -10
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +10 -10
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +10 -10
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +10 -10
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +10 -10
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +10 -10
- nautobot/project-static/docs/development/best-practices.html +1 -2
- nautobot/project-static/docs/development/core/application-registry.html +10 -10
- nautobot/project-static/docs/development/core/best-practices.html +10 -10
- nautobot/project-static/docs/development/core/bootstrap-ui.html +10 -10
- nautobot/project-static/docs/development/core/caching.html +10 -10
- nautobot/project-static/docs/development/core/controllers.html +10 -10
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +10 -10
- nautobot/project-static/docs/development/core/extending-models.html +1 -2
- nautobot/project-static/docs/development/core/generic-views.html +10 -10
- nautobot/project-static/docs/development/core/getting-started.html +10 -10
- nautobot/project-static/docs/development/core/homepage.html +10 -10
- nautobot/project-static/docs/development/core/index.html +10 -10
- nautobot/project-static/docs/development/core/model-checklist.html +10 -10
- nautobot/project-static/docs/development/core/model-features.html +10 -10
- nautobot/project-static/docs/development/core/natural-keys.html +10 -10
- nautobot/project-static/docs/development/core/navigation-menu.html +10 -10
- nautobot/project-static/docs/development/core/react-ui.html +1 -2
- nautobot/project-static/docs/development/core/release-checklist.html +10 -10
- nautobot/project-static/docs/development/core/role-internals.html +10 -10
- nautobot/project-static/docs/development/core/settings.html +10 -10
- nautobot/project-static/docs/development/core/style-guide.html +10 -10
- nautobot/project-static/docs/development/core/templates.html +10 -10
- nautobot/project-static/docs/development/core/testing.html +12 -12
- nautobot/project-static/docs/development/core/user-preferences.html +10 -10
- nautobot/project-static/docs/development/docker-compose-advanced-use-cases.html +1 -2
- nautobot/project-static/docs/development/extending-models.html +1 -2
- nautobot/project-static/docs/development/generic-views.html +1 -2
- nautobot/project-static/docs/development/getting-started.html +1 -2
- nautobot/project-static/docs/development/homepage.html +1 -2
- nautobot/project-static/docs/development/index.html +10 -10
- nautobot/project-static/docs/development/jobs/index.html +10 -10
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +10 -10
- nautobot/project-static/docs/development/model-features.html +1 -2
- nautobot/project-static/docs/development/natural-keys.html +1 -2
- nautobot/project-static/docs/development/navigation-menu.html +1 -2
- nautobot/project-static/docs/development/react-ui.html +1 -2
- nautobot/project-static/docs/development/release-checklist.html +1 -2
- nautobot/project-static/docs/development/role-internals.html +1 -2
- nautobot/project-static/docs/development/style-guide.html +1 -2
- nautobot/project-static/docs/development/templates.html +1 -2
- nautobot/project-static/docs/development/testing.html +1 -2
- nautobot/project-static/docs/development/user-preferences.html +1 -2
- nautobot/project-static/docs/docker/index.html +1 -2
- nautobot/project-static/docs/index.html +10 -10
- nautobot/project-static/docs/installation/centos.html +1 -2
- nautobot/project-static/docs/installation/external-authentication.html +1 -2
- nautobot/project-static/docs/installation/http-server.html +1 -2
- nautobot/project-static/docs/installation/index.html +1 -2
- nautobot/project-static/docs/installation/migrating-from-netbox.html +1 -2
- nautobot/project-static/docs/installation/migrating-from-postgresql.html +1 -2
- nautobot/project-static/docs/installation/nautobot.html +1 -2
- nautobot/project-static/docs/installation/region-and-site-data-migration-guide.html +1 -2
- nautobot/project-static/docs/installation/selinux-troubleshooting.html +1 -2
- nautobot/project-static/docs/installation/services.html +1 -2
- nautobot/project-static/docs/installation/ubuntu.html +1 -2
- nautobot/project-static/docs/installation/upgrading-from-nautobot-v1.html +1 -2
- nautobot/project-static/docs/installation/upgrading.html +1 -2
- nautobot/project-static/docs/models/circuits/circuit.html +1 -2
- nautobot/project-static/docs/models/circuits/circuittermination.html +1 -2
- nautobot/project-static/docs/models/circuits/circuittype.html +1 -2
- nautobot/project-static/docs/models/circuits/provider.html +1 -2
- nautobot/project-static/docs/models/circuits/providernetwork.html +1 -2
- nautobot/project-static/docs/models/cloud/cloudaccount.html +1 -2
- nautobot/project-static/docs/models/cloud/cloudnetwork.html +1 -2
- nautobot/project-static/docs/models/cloud/cloudnetworkprefixassignment.html +1 -2
- nautobot/project-static/docs/models/cloud/cloudresourcetype.html +1 -2
- nautobot/project-static/docs/models/cloud/cloudservice.html +1 -2
- nautobot/project-static/docs/models/cloud/cloudservicenetworkassignment.html +1 -2
- nautobot/project-static/docs/models/dcim/cable.html +1 -2
- nautobot/project-static/docs/models/dcim/consoleport.html +1 -2
- nautobot/project-static/docs/models/dcim/consoleporttemplate.html +1 -2
- nautobot/project-static/docs/models/dcim/consoleserverport.html +1 -2
- nautobot/project-static/docs/models/dcim/consoleserverporttemplate.html +1 -2
- nautobot/project-static/docs/models/dcim/controller.html +1 -2
- nautobot/project-static/docs/models/dcim/controllermanageddevicegroup.html +1 -2
- nautobot/project-static/docs/models/dcim/device.html +1 -2
- nautobot/project-static/docs/models/dcim/devicebay.html +1 -2
- nautobot/project-static/docs/models/dcim/devicebaytemplate.html +1 -2
- nautobot/project-static/docs/models/dcim/devicefamily.html +1 -2
- nautobot/project-static/docs/models/dcim/deviceredundancygroup.html +1 -2
- nautobot/project-static/docs/models/dcim/devicetype.html +1 -2
- nautobot/project-static/docs/models/dcim/frontport.html +1 -2
- nautobot/project-static/docs/models/dcim/frontporttemplate.html +1 -2
- nautobot/project-static/docs/models/dcim/interface.html +1 -2
- nautobot/project-static/docs/models/dcim/interfacetemplate.html +1 -2
- nautobot/project-static/docs/models/dcim/inventoryitem.html +1 -2
- nautobot/project-static/docs/models/dcim/location.html +1 -2
- nautobot/project-static/docs/models/dcim/locationtype.html +1 -2
- nautobot/project-static/docs/models/dcim/manufacturer.html +1 -2
- nautobot/project-static/docs/models/dcim/module.html +1 -2
- nautobot/project-static/docs/models/dcim/modulebay.html +1 -2
- nautobot/project-static/docs/models/dcim/modulebaytemplate.html +1 -2
- nautobot/project-static/docs/models/dcim/moduletype.html +1 -2
- nautobot/project-static/docs/models/dcim/platform.html +1 -2
- nautobot/project-static/docs/models/dcim/powerfeed.html +1 -2
- nautobot/project-static/docs/models/dcim/poweroutlet.html +1 -2
- nautobot/project-static/docs/models/dcim/poweroutlettemplate.html +1 -2
- nautobot/project-static/docs/models/dcim/powerpanel.html +1 -2
- nautobot/project-static/docs/models/dcim/powerport.html +1 -2
- nautobot/project-static/docs/models/dcim/powerporttemplate.html +1 -2
- nautobot/project-static/docs/models/dcim/rack.html +1 -2
- nautobot/project-static/docs/models/dcim/rackgroup.html +1 -2
- nautobot/project-static/docs/models/dcim/rackreservation.html +1 -2
- nautobot/project-static/docs/models/dcim/rearport.html +1 -2
- nautobot/project-static/docs/models/dcim/rearporttemplate.html +1 -2
- nautobot/project-static/docs/models/dcim/softwareimagefile.html +1 -2
- nautobot/project-static/docs/models/dcim/softwareversion.html +1 -2
- nautobot/project-static/docs/models/dcim/virtualchassis.html +1 -2
- nautobot/project-static/docs/models/extras/computedfield.html +1 -2
- nautobot/project-static/docs/models/extras/configcontext.html +1 -2
- nautobot/project-static/docs/models/extras/configcontextschema.html +1 -2
- nautobot/project-static/docs/models/extras/contact.html +1 -2
- nautobot/project-static/docs/models/extras/customfield.html +1 -2
- nautobot/project-static/docs/models/extras/customlink.html +1 -2
- nautobot/project-static/docs/models/extras/dynamicgroup.html +1 -2
- nautobot/project-static/docs/models/extras/exporttemplate.html +1 -2
- nautobot/project-static/docs/models/extras/gitrepository.html +1 -2
- nautobot/project-static/docs/models/extras/jobhook.html +1 -2
- nautobot/project-static/docs/models/extras/joblogentry.html +1 -2
- nautobot/project-static/docs/models/extras/jobresult.html +1 -2
- nautobot/project-static/docs/models/extras/metadatachoice.html +1 -2
- nautobot/project-static/docs/models/extras/metadatatype.html +1 -2
- nautobot/project-static/docs/models/extras/objectmetadata.html +1 -2
- nautobot/project-static/docs/models/extras/role.html +1 -2
- nautobot/project-static/docs/models/extras/savedview.html +1 -2
- nautobot/project-static/docs/models/extras/secret.html +1 -2
- nautobot/project-static/docs/models/extras/secretsgroup.html +1 -2
- nautobot/project-static/docs/models/extras/staticgroupassociation.html +1 -2
- nautobot/project-static/docs/models/extras/status.html +1 -2
- nautobot/project-static/docs/models/extras/team.html +1 -2
- nautobot/project-static/docs/models/ipam/ipaddress.html +1 -2
- nautobot/project-static/docs/models/ipam/prefix.html +1 -2
- nautobot/project-static/docs/models/ipam/rir.html +1 -2
- nautobot/project-static/docs/models/ipam/routetarget.html +1 -2
- nautobot/project-static/docs/models/ipam/service.html +1 -2
- nautobot/project-static/docs/models/ipam/vlan.html +1 -2
- nautobot/project-static/docs/models/ipam/vlangroup.html +1 -2
- nautobot/project-static/docs/models/ipam/vrf.html +1 -2
- nautobot/project-static/docs/models/tenancy/tenant.html +1 -2
- nautobot/project-static/docs/models/tenancy/tenantgroup.html +1 -2
- nautobot/project-static/docs/models/virtualization/cluster.html +1 -2
- nautobot/project-static/docs/models/virtualization/clustergroup.html +1 -2
- nautobot/project-static/docs/models/virtualization/clustertype.html +1 -2
- nautobot/project-static/docs/models/virtualization/virtualmachine.html +1 -2
- nautobot/project-static/docs/models/virtualization/vminterface.html +1 -2
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +10 -10
- nautobot/project-static/docs/overview/design_philosophy.html +10 -10
- nautobot/project-static/docs/overview/index.html +1 -2
- nautobot/project-static/docs/plugins/development.html +1 -2
- nautobot/project-static/docs/plugins/index.html +1 -2
- nautobot/project-static/docs/plugins/porting-from-netbox.html +1 -2
- nautobot/project-static/docs/release-notes/index.html +15 -15
- nautobot/project-static/docs/release-notes/version-1.0.html +10 -10
- nautobot/project-static/docs/release-notes/version-1.1.html +10 -10
- nautobot/project-static/docs/release-notes/version-1.2.html +10 -10
- nautobot/project-static/docs/release-notes/version-1.3.html +10 -10
- nautobot/project-static/docs/release-notes/version-1.4.html +10 -10
- nautobot/project-static/docs/release-notes/version-1.5.html +10 -10
- nautobot/project-static/docs/release-notes/version-1.6.html +10 -10
- nautobot/project-static/docs/release-notes/version-2.0.html +10 -10
- nautobot/project-static/docs/release-notes/version-2.1.html +10 -10
- nautobot/project-static/docs/release-notes/version-2.2.html +10 -10
- nautobot/project-static/docs/release-notes/version-2.3.html +491 -182
- nautobot/project-static/docs/requirements.txt +2 -2
- nautobot/project-static/docs/rest-api/overview.html +1 -2
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +270 -270
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +10 -10
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +10 -10
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +65 -12
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +10 -10
- nautobot/project-static/docs/user-guide/administration/configuration/node-configuration.html +1 -2
- nautobot/project-static/docs/user-guide/administration/configuration/optional-settings.html +1 -2
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +10 -10
- nautobot/project-static/docs/user-guide/administration/configuration/required-settings.html +1 -2
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +122 -10
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +10 -10
- nautobot/project-static/docs/user-guide/administration/guides/caching.html +1 -2
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +10 -10
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +10 -10
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +10 -10
- nautobot/project-static/docs/user-guide/administration/guides/healthcheck.html +1 -2
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +10 -10
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +10 -10
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +10 -10
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +49 -10
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +10 -10
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +10 -10
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +10 -10
- nautobot/project-static/docs/user-guide/administration/installation/docker.html +1 -2
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +10 -10
- nautobot/project-static/docs/user-guide/administration/installation/health-checks.html +1 -2
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +10 -10
- nautobot/project-static/docs/user-guide/administration/installation/index.html +10 -10
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +10 -10
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +10 -10
- nautobot/project-static/docs/user-guide/administration/installation/selinux-troubleshooting.html +1 -2
- nautobot/project-static/docs/user-guide/administration/installation/services.html +10 -10
- nautobot/project-static/docs/user-guide/administration/installation-extras/docker.html +1 -2
- nautobot/project-static/docs/user-guide/administration/installation-extras/health-checks.html +1 -2
- nautobot/project-static/docs/user-guide/administration/installation-extras/selinux-troubleshooting.html +1 -2
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +10 -10
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +10 -10
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +10 -10
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +10 -10
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +10 -10
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +10 -10
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +10 -10
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +10 -10
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +10 -10
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +10 -10
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +10 -10
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +10 -10
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +10 -10
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +10 -10
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +10 -10
- nautobot/project-static/docs/user-guide/index.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +10 -10
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +10 -10
- nautobot/project-static/docs/user-guides/custom-fields.html +1 -2
- nautobot/project-static/docs/user-guides/getting-started/creating-devices.html +1 -2
- nautobot/project-static/docs/user-guides/getting-started/index.html +1 -2
- nautobot/project-static/docs/user-guides/getting-started/interfaces.html +1 -2
- nautobot/project-static/docs/user-guides/getting-started/ipam.html +1 -2
- nautobot/project-static/docs/user-guides/getting-started/platforms.html +1 -2
- nautobot/project-static/docs/user-guides/getting-started/search-bar.html +1 -2
- nautobot/project-static/docs/user-guides/getting-started/tenants.html +1 -2
- nautobot/project-static/docs/user-guides/getting-started/vlans-and-vlan-groups.html +1 -2
- nautobot/project-static/docs/user-guides/git-data-source.html +1 -2
- nautobot/project-static/docs/user-guides/graphql.html +1 -2
- nautobot/project-static/docs/user-guides/ip-address-merge-tool.html +1 -2
- nautobot/project-static/docs/user-guides/relationships.html +1 -2
- nautobot/project-static/docs/user-guides/s3-django-storage.html +1 -2
- nautobot/project-static/js/forms.js +10 -0
- nautobot/virtualization/forms.py +24 -0
- nautobot/virtualization/templates/virtualization/vminterface.html +4 -0
- nautobot/virtualization/templates/virtualization/vminterface_edit.html +1 -0
- nautobot/virtualization/tests/test_views.py +7 -2
- {nautobot-2.3.10.dist-info → nautobot-2.3.12.dist-info}/METADATA +2 -2
- {nautobot-2.3.10.dist-info → nautobot-2.3.12.dist-info}/RECORD +522 -520
- nautobot/project-static/docs/assets/stylesheets/main.0253249f.min.css +0 -1
- nautobot/project-static/docs/assets/stylesheets/main.0253249f.min.css.map +0 -1
- {nautobot-2.3.10.dist-info → nautobot-2.3.12.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.3.10.dist-info → nautobot-2.3.12.dist-info}/NOTICE +0 -0
- {nautobot-2.3.10.dist-info → nautobot-2.3.12.dist-info}/WHEEL +0 -0
- {nautobot-2.3.10.dist-info → nautobot-2.3.12.dist-info}/entry_points.txt +0 -0
nautobot/ipam/forms.py
CHANGED
|
@@ -752,6 +752,7 @@ class VLANForm(NautobotModelForm, TenancyForm):
|
|
|
752
752
|
)
|
|
753
753
|
vlan_group = DynamicModelChoiceField(
|
|
754
754
|
queryset=VLANGroup.objects.all(),
|
|
755
|
+
query_params={"location": "$locations"},
|
|
755
756
|
required=False,
|
|
756
757
|
)
|
|
757
758
|
|
|
@@ -779,6 +780,22 @@ class VLANForm(NautobotModelForm, TenancyForm):
|
|
|
779
780
|
}
|
|
780
781
|
|
|
781
782
|
def clean(self):
|
|
783
|
+
vlan_group = self.cleaned_data["vlan_group"]
|
|
784
|
+
locations = self.cleaned_data["locations"]
|
|
785
|
+
# Validate Vlan Group Location is one of the ancestors of the VLAN locations specified.
|
|
786
|
+
if vlan_group and vlan_group.location and locations:
|
|
787
|
+
vlan_group_location = vlan_group.location
|
|
788
|
+
is_vlan_group_valid = False
|
|
789
|
+
for location in locations:
|
|
790
|
+
if vlan_group_location in location.ancestors(include_self=True):
|
|
791
|
+
is_vlan_group_valid = True
|
|
792
|
+
break
|
|
793
|
+
|
|
794
|
+
if not is_vlan_group_valid:
|
|
795
|
+
locations = list(locations.values_list("name", flat=True))
|
|
796
|
+
raise ValidationError(
|
|
797
|
+
{"vlan_group": [f"VLAN Group {vlan_group} is not in locations {locations} or their ancestors."]}
|
|
798
|
+
)
|
|
782
799
|
# Validation error raised in signal is not properly handled in form clean
|
|
783
800
|
# Hence handling any validationError that might occur.
|
|
784
801
|
try:
|
nautobot/ipam/models.py
CHANGED
|
@@ -1296,7 +1296,8 @@ class IPAddressToInterface(BaseModel):
|
|
|
1296
1296
|
|
|
1297
1297
|
def __str__(self):
|
|
1298
1298
|
if self.interface:
|
|
1299
|
-
|
|
1299
|
+
parent_name = self.interface.parent.name if self.interface.parent else "No Parent"
|
|
1300
|
+
return f"{self.ip_address!s} {parent_name} {self.interface.name}"
|
|
1300
1301
|
else:
|
|
1301
1302
|
return f"{self.ip_address!s} {self.vm_interface.virtual_machine.name} {self.vm_interface.name}"
|
|
1302
1303
|
|
nautobot/ipam/signals.py
CHANGED
|
@@ -65,9 +65,9 @@ def ip_address_to_interface_pre_delete(instance, raw=False, **kwargs):
|
|
|
65
65
|
# that is the primary_v{version} of the host machine.
|
|
66
66
|
|
|
67
67
|
if getattr(instance, "interface"):
|
|
68
|
-
host = instance.interface.
|
|
68
|
+
host = instance.interface.parent
|
|
69
69
|
other_assignments_exist = (
|
|
70
|
-
IPAddressToInterface.objects.filter(
|
|
70
|
+
IPAddressToInterface.objects.filter(interface__in=host.all_interfaces, ip_address=instance.ip_address)
|
|
71
71
|
.exclude(id=instance.id)
|
|
72
72
|
.exists()
|
|
73
73
|
)
|
nautobot/ipam/tables.py
CHANGED
|
@@ -175,14 +175,6 @@ VLAN_PREFIXES = """
|
|
|
175
175
|
{% endfor %}
|
|
176
176
|
"""
|
|
177
177
|
|
|
178
|
-
VLAN_ROLE_LINK = """
|
|
179
|
-
{% if record.role %}
|
|
180
|
-
<a href="{% url 'ipam:vlan_list' %}?role={{ record.role.name }}">{{ record.role }}</a>
|
|
181
|
-
{% else %}
|
|
182
|
-
—
|
|
183
|
-
{% endif %}
|
|
184
|
-
"""
|
|
185
|
-
|
|
186
178
|
VLANGROUP_ADD_VLAN = """
|
|
187
179
|
{% with next_vid=record.get_next_available_vid %}
|
|
188
180
|
{% if next_vid and perms.ipam.add_vlan %}
|
|
@@ -346,7 +338,9 @@ class PrefixTable(StatusTableMixin, RoleTableMixin, BaseTable):
|
|
|
346
338
|
prefix = tables.TemplateColumn(
|
|
347
339
|
template_code=PREFIX_COPY_LINK, attrs={"td": {"class": "text-nowrap"}}, order_by=("network", "prefix_length")
|
|
348
340
|
)
|
|
349
|
-
|
|
341
|
+
vrf_count = LinkedCountColumn(
|
|
342
|
+
viewname="ipam:vrf_list", url_params={"prefix": "pk"}, reverse_lookup="prefixes", verbose_name="VRFs"
|
|
343
|
+
)
|
|
350
344
|
tenant = TenantColumn()
|
|
351
345
|
namespace = tables.Column(linkify=True)
|
|
352
346
|
vlan = tables.Column(linkify=True, verbose_name="VLAN")
|
|
@@ -368,7 +362,7 @@ class PrefixTable(StatusTableMixin, RoleTableMixin, BaseTable):
|
|
|
368
362
|
"type",
|
|
369
363
|
"status",
|
|
370
364
|
"children",
|
|
371
|
-
|
|
365
|
+
"vrf_count",
|
|
372
366
|
"namespace",
|
|
373
367
|
"tenant",
|
|
374
368
|
"location_count",
|
|
@@ -384,7 +378,7 @@ class PrefixTable(StatusTableMixin, RoleTableMixin, BaseTable):
|
|
|
384
378
|
"prefix",
|
|
385
379
|
"type",
|
|
386
380
|
"status",
|
|
387
|
-
|
|
381
|
+
"vrf_count",
|
|
388
382
|
"namespace",
|
|
389
383
|
"tenant",
|
|
390
384
|
"location_count",
|
|
@@ -766,7 +760,7 @@ class VLANVirtualMachinesTable(VLANMembersTable):
|
|
|
766
760
|
fields = ("virtual_machine", "name", "tagged", "actions")
|
|
767
761
|
|
|
768
762
|
|
|
769
|
-
class InterfaceVLANTable(StatusTableMixin, BaseTable):
|
|
763
|
+
class InterfaceVLANTable(StatusTableMixin, RoleTableMixin, BaseTable):
|
|
770
764
|
"""
|
|
771
765
|
List VLANs assigned to a specific Interface.
|
|
772
766
|
"""
|
|
@@ -775,7 +769,6 @@ class InterfaceVLANTable(StatusTableMixin, BaseTable):
|
|
|
775
769
|
tagged = BooleanColumn()
|
|
776
770
|
vlan_group = tables.Column(accessor=Accessor("vlan_group__name"), verbose_name="Group")
|
|
777
771
|
tenant = TenantColumn()
|
|
778
|
-
role = tables.TemplateColumn(template_code=VLAN_ROLE_LINK)
|
|
779
772
|
location_count = LinkedCountColumn(
|
|
780
773
|
viewname="dcim:location_list",
|
|
781
774
|
url_params={"vlans": "pk"},
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
{% endif %}
|
|
19
19
|
{% endfor %}
|
|
20
20
|
<div class="row">
|
|
21
|
-
<div class="col-md-
|
|
21
|
+
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
|
|
22
22
|
<h3>Assign an IP Address</h3>
|
|
23
23
|
{% include 'ipam/inc/ipadress_edit_header.html' with active_tab='assign' %}
|
|
24
24
|
{% if form.non_field_errors %}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
</div>
|
|
39
39
|
</div>
|
|
40
40
|
<div class="row">
|
|
41
|
-
<div class="col-md-
|
|
41
|
+
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1 text-right">
|
|
42
42
|
<button type="submit" class="btn btn-primary">Search</button>
|
|
43
43
|
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
|
|
44
44
|
</div>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
{% block masthead %}
|
|
6
6
|
<h1>
|
|
7
|
-
<span class="hover_copy"><span id="copy_title">{{ object }}</span><button type="button" class="btn btn-inline btn-default hover_copy_button" data-clipboard-
|
|
7
|
+
<span class="hover_copy"><span id="copy_title">{{ object }}</span><button type="button" class="btn btn-inline btn-default hover_copy_button" data-clipboard-text="{{ object }}">
|
|
8
8
|
<span class="mdi mdi-content-copy"></span>
|
|
9
9
|
</button>
|
|
10
10
|
</span>
|
|
@@ -9,7 +9,7 @@ import netaddr
|
|
|
9
9
|
|
|
10
10
|
from nautobot.core.testing.models import ModelTestCases
|
|
11
11
|
from nautobot.dcim import choices as dcim_choices
|
|
12
|
-
from nautobot.dcim.models import Device, DeviceType, Interface, Location, LocationType
|
|
12
|
+
from nautobot.dcim.models import Device, DeviceType, Interface, Location, LocationType, Module, ModuleBay, ModuleType
|
|
13
13
|
from nautobot.extras.models import Role, Status
|
|
14
14
|
from nautobot.ipam.choices import IPAddressTypeChoices, PrefixTypeChoices, ServiceProtocolChoices
|
|
15
15
|
from nautobot.ipam.models import (
|
|
@@ -171,6 +171,118 @@ class IPAddressToInterfaceTest(TestCase):
|
|
|
171
171
|
IPAddressToInterface.objects.create(vm_interface=None, interface=None, ip_address=ip_addr)
|
|
172
172
|
self.assertIn("Must associate to either an Interface or a VMInterface.", str(cm.exception))
|
|
173
173
|
|
|
174
|
+
def test_primary_ip_retained_when_deleted_from_device_or_module_interface(self):
|
|
175
|
+
"""Test primary_ip4 remains set when the same IP is assigned to multiple interfaces and deleted from one."""
|
|
176
|
+
|
|
177
|
+
# Create a module bay on the existing device
|
|
178
|
+
device_module_bay = ModuleBay.objects.create(parent_device=self.test_device, name="Test Bay")
|
|
179
|
+
|
|
180
|
+
# Create a module with an interface and add it to the module bay on the device
|
|
181
|
+
module = Module.objects.create(
|
|
182
|
+
module_type=ModuleType.objects.first(),
|
|
183
|
+
status=Status.objects.get_for_model(Module).first(),
|
|
184
|
+
parent_module_bay=device_module_bay,
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
# Set status for the module interface
|
|
188
|
+
int_status = Status.objects.get_for_model(Interface).first()
|
|
189
|
+
|
|
190
|
+
# Create an interface on the module
|
|
191
|
+
interface_module = Interface.objects.create(
|
|
192
|
+
name="eth0_module",
|
|
193
|
+
module=module,
|
|
194
|
+
type=dcim_choices.InterfaceTypeChoices.TYPE_1GE_FIXED,
|
|
195
|
+
status=int_status,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
# Link the module to the device
|
|
199
|
+
self.test_device.installed_device = interface_module
|
|
200
|
+
self.test_device.save()
|
|
201
|
+
|
|
202
|
+
# Create IP and assign it to multiple interfaces
|
|
203
|
+
ip_address = IPAddress.objects.create(address="192.0.2.1/24", namespace=self.namespace, status=self.status)
|
|
204
|
+
assignment_device_int1 = IPAddressToInterface.objects.create(interface=self.test_int1, ip_address=ip_address)
|
|
205
|
+
assignment_module_int1 = IPAddressToInterface.objects.create(interface=interface_module, ip_address=ip_address)
|
|
206
|
+
|
|
207
|
+
# Set the primary IP on the device
|
|
208
|
+
self.test_device.primary_ip4 = assignment_device_int1.ip_address
|
|
209
|
+
self.test_device.save()
|
|
210
|
+
|
|
211
|
+
# Verify that the primary IP is set
|
|
212
|
+
self.assertEqual(self.test_device.primary_ip4, ip_address)
|
|
213
|
+
|
|
214
|
+
# Delete the IP assignment from one interface
|
|
215
|
+
assignment_device_int1.delete()
|
|
216
|
+
|
|
217
|
+
# Refresh and check that the primary IP is still assigned
|
|
218
|
+
self.test_device.refresh_from_db()
|
|
219
|
+
self.assertEqual(self.test_device.primary_ip4, ip_address)
|
|
220
|
+
|
|
221
|
+
# Verify remaining IP assignments on the IP object
|
|
222
|
+
remaining_assignments = ip_address.interface_assignments.all()
|
|
223
|
+
self.assertEqual(remaining_assignments.count(), 1)
|
|
224
|
+
self.assertIn(assignment_module_int1, remaining_assignments)
|
|
225
|
+
|
|
226
|
+
def test_primary_ip_retained_when_deleted_from_device_interface_with_nested_module(self):
|
|
227
|
+
"""Test primary_ip4 remains set when the same IP is assigned to a device and nested module interfaces, and deleted from the device interface."""
|
|
228
|
+
|
|
229
|
+
# Create a module bay on the existing device
|
|
230
|
+
device_module_bay = ModuleBay.objects.create(parent_device=self.test_device, name="Primary Module Bay")
|
|
231
|
+
|
|
232
|
+
# Create a primary module with an interface and add it to the module bay on the device
|
|
233
|
+
primary_module = Module.objects.create(
|
|
234
|
+
module_type=ModuleType.objects.first(),
|
|
235
|
+
status=Status.objects.get_for_model(Module).first(),
|
|
236
|
+
parent_module_bay=device_module_bay,
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
# Create a secondary module bay within the primary module for nested module creation
|
|
240
|
+
nested_module_bay = ModuleBay.objects.create(parent_module=primary_module, name="Nested Module Bay")
|
|
241
|
+
|
|
242
|
+
# Create a nested module within the primary module's module bay
|
|
243
|
+
nested_module = Module.objects.create(
|
|
244
|
+
module_type=ModuleType.objects.first(),
|
|
245
|
+
status=Status.objects.get_for_model(Module).first(),
|
|
246
|
+
parent_module_bay=nested_module_bay,
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
# Set status for the nested module interface
|
|
250
|
+
int_status = Status.objects.get_for_model(Interface).first()
|
|
251
|
+
|
|
252
|
+
# Create an interface on the nested module and assign an IP
|
|
253
|
+
nested_interface = Interface.objects.create(
|
|
254
|
+
name="eth0_nested",
|
|
255
|
+
module=nested_module,
|
|
256
|
+
type=dcim_choices.InterfaceTypeChoices.TYPE_1GE_FIXED,
|
|
257
|
+
status=int_status,
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
# Create IP and assign it to both the device and the nested module interface
|
|
261
|
+
ip_address = IPAddress.objects.create(address="192.0.2.1/24", namespace=self.namespace, status=self.status)
|
|
262
|
+
assignment_device_int1 = IPAddressToInterface.objects.create(interface=self.test_int1, ip_address=ip_address)
|
|
263
|
+
assignment_nested_module = IPAddressToInterface.objects.create(
|
|
264
|
+
interface=nested_interface, ip_address=ip_address
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
# Set the primary IP on the device to the IP on the device interface
|
|
268
|
+
self.test_device.primary_ip4 = assignment_nested_module.ip_address
|
|
269
|
+
self.test_device.save()
|
|
270
|
+
|
|
271
|
+
# Verify that the primary IP is correctly set
|
|
272
|
+
self.assertEqual(self.test_device.primary_ip4, ip_address)
|
|
273
|
+
|
|
274
|
+
# Delete the IP assignment from the device interface
|
|
275
|
+
assignment_device_int1.delete()
|
|
276
|
+
|
|
277
|
+
# Refresh and check that the primary IP is still assigned to the device
|
|
278
|
+
self.test_device.refresh_from_db()
|
|
279
|
+
self.assertEqual(self.test_device.primary_ip4, ip_address)
|
|
280
|
+
|
|
281
|
+
# Confirm that the IP is still associated with the nested module interface
|
|
282
|
+
remaining_assignments = ip_address.interface_assignments.all()
|
|
283
|
+
self.assertEqual(remaining_assignments.count(), 1)
|
|
284
|
+
self.assertIn(assignment_nested_module, remaining_assignments)
|
|
285
|
+
|
|
174
286
|
|
|
175
287
|
class TestVarbinaryIPField(TestCase):
|
|
176
288
|
"""Tests for `nautobot.ipam.fields.VarbinaryIPField`."""
|
|
@@ -9,9 +9,10 @@ from django.utils.timezone import make_aware
|
|
|
9
9
|
from netaddr import IPNetwork
|
|
10
10
|
|
|
11
11
|
from nautobot.circuits.models import Circuit, Provider
|
|
12
|
-
from nautobot.core.templatetags.helpers import queryset_to_pks
|
|
12
|
+
from nautobot.core.templatetags.helpers import hyperlinked_object, queryset_to_pks
|
|
13
13
|
from nautobot.core.testing import ModelViewTestCase, post_data, ViewTestCases
|
|
14
14
|
from nautobot.core.testing.utils import extract_page_body
|
|
15
|
+
from nautobot.core.utils.lookup import get_route_for_model
|
|
15
16
|
from nautobot.dcim.models import Device, DeviceType, Interface, Location, LocationType, Manufacturer
|
|
16
17
|
from nautobot.extras.choices import CustomFieldTypeChoices, RelationshipTypeChoices
|
|
17
18
|
from nautobot.extras.models import (
|
|
@@ -178,6 +179,24 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase, ViewTestCases.List
|
|
|
178
179
|
"remove_vrfs": [vrfs[1].pk],
|
|
179
180
|
}
|
|
180
181
|
|
|
182
|
+
@override_settings(EXEMPT_VIEW_PERMISSIONS=[])
|
|
183
|
+
def test_list_objects_with_permission(self):
|
|
184
|
+
"""Test rendering of LinkedCountColumn for related fields."""
|
|
185
|
+
response = super().test_list_objects_with_permission()
|
|
186
|
+
response_body = extract_page_body(response.content.decode(response.charset))
|
|
187
|
+
|
|
188
|
+
locations_list_url = reverse(get_route_for_model(Location, "list"))
|
|
189
|
+
|
|
190
|
+
for prefix in self._get_queryset().all():
|
|
191
|
+
if str(prefix.pk) in response_body:
|
|
192
|
+
count = prefix.locations.count()
|
|
193
|
+
if count > 1:
|
|
194
|
+
self.assertBodyContains(
|
|
195
|
+
response, f'<a href="{locations_list_url}?prefixes={prefix.pk}" class="badge">{count}</a>'
|
|
196
|
+
)
|
|
197
|
+
elif count == 1:
|
|
198
|
+
self.assertBodyContains(response, hyperlinked_object(prefix.locations.first()))
|
|
199
|
+
|
|
181
200
|
@override_settings(EXEMPT_VIEW_PERMISSIONS=["*"])
|
|
182
201
|
def test_empty_queryset(self):
|
|
183
202
|
"""
|
|
@@ -1043,7 +1062,7 @@ class VLANTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
|
1043
1062
|
def setUpTestData(cls):
|
|
1044
1063
|
cls.locations = Location.objects.filter(location_type=LocationType.objects.get(name="Campus"))
|
|
1045
1064
|
|
|
1046
|
-
vlangroups = (
|
|
1065
|
+
cls.vlangroups = (
|
|
1047
1066
|
VLANGroup.objects.create(name="VLAN Group 1", location=cls.locations.first()),
|
|
1048
1067
|
VLANGroup.objects.create(name="VLAN Group 2", location=cls.locations.last()),
|
|
1049
1068
|
)
|
|
@@ -1053,25 +1072,40 @@ class VLANTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
|
1053
1072
|
status = Status.objects.get_for_model(VLAN).first()
|
|
1054
1073
|
|
|
1055
1074
|
cls.form_data = {
|
|
1056
|
-
"vlan_group": vlangroups[
|
|
1075
|
+
"vlan_group": cls.vlangroups[0].pk,
|
|
1057
1076
|
"vid": 999,
|
|
1058
1077
|
"name": "VLAN999 with an unwieldy long name since we increased the limit to more than 64 characters",
|
|
1059
1078
|
"tenant": None,
|
|
1060
1079
|
"status": status.pk,
|
|
1061
1080
|
"role": roles[1].pk,
|
|
1062
|
-
"locations": list(cls.locations.values_list("pk", flat=True)[:
|
|
1081
|
+
"locations": list(cls.locations.values_list("pk", flat=True)[:1]),
|
|
1063
1082
|
"description": "A new VLAN",
|
|
1064
1083
|
"tags": [t.pk for t in Tag.objects.get_for_model(VLAN)],
|
|
1065
1084
|
}
|
|
1066
1085
|
|
|
1067
1086
|
cls.bulk_edit_data = {
|
|
1068
|
-
"vlan_group": vlangroups[0].pk,
|
|
1087
|
+
"vlan_group": cls.vlangroups[0].pk,
|
|
1069
1088
|
"tenant": Tenant.objects.first().pk,
|
|
1070
1089
|
"status": status.pk,
|
|
1071
1090
|
"role": roles[0].pk,
|
|
1072
1091
|
"description": "New description",
|
|
1073
1092
|
}
|
|
1074
1093
|
|
|
1094
|
+
@override_settings(EXEMPT_VIEW_PERMISSIONS=["*"])
|
|
1095
|
+
def test_vlan_group_not_belong_to_vlan_locations(self):
|
|
1096
|
+
"""Test that a VLAN cannot be assigned to a VLAN Group that is not in the same location as the VLAN."""
|
|
1097
|
+
vlan_group = self.vlangroups[0]
|
|
1098
|
+
form_data = self.form_data.copy()
|
|
1099
|
+
form_data["vlan_group"] = vlan_group.pk
|
|
1100
|
+
form_data["locations"] = [self.locations.last().pk]
|
|
1101
|
+
self.add_permissions("ipam.add_vlan")
|
|
1102
|
+
request = {
|
|
1103
|
+
"path": self._get_url("add"),
|
|
1104
|
+
"data": post_data(form_data),
|
|
1105
|
+
}
|
|
1106
|
+
response = self.client.post(**request)
|
|
1107
|
+
self.assertBodyContains(response, f"vlan_group: VLAN Group {vlan_group} is not in locations")
|
|
1108
|
+
|
|
1075
1109
|
|
|
1076
1110
|
class ServiceTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
1077
1111
|
model = Service
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
<link rel="icon" href="/projects/core/en/stable/assets/favicon.ico">
|
|
15
|
-
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.
|
|
15
|
+
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.46">
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
<link rel="stylesheet" href="/projects/core/en/stable/assets/stylesheets/main.
|
|
23
|
+
<link rel="stylesheet" href="/projects/core/en/stable/assets/stylesheets/main.6f8fc17f.min.css">
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
<link rel="stylesheet" href="/projects/core/en/stable/assets/stylesheets/palette.06af60db.min.css">
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
<style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.
|
|
35
|
+
<style>:root{--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M288 0H128c-17.7 0-32 14.3-32 32s14.3 32 32 32v132.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6 0 480.9 31.1 512 69.4 512h309.2c38.3 0 69.4-31.1 69.4-69.4 0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7 0 32-14.3 32-32S337.7 0 320 0zm-96 196.8V64h64v132.8c0 23.7 6.6 46.9 19 67.1l34.5 56.1h-171l34.5-56.1c12.4-20.2 19-43.4 19-67.1"/></svg>');}</style>
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
|
|
@@ -197,7 +197,7 @@
|
|
|
197
197
|
<a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
|
|
198
198
|
<div class="md-source__icon md-icon">
|
|
199
199
|
|
|
200
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.
|
|
200
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
|
|
201
201
|
</div>
|
|
202
202
|
<div class="md-source__repository">
|
|
203
203
|
GitHub
|
|
@@ -355,7 +355,7 @@
|
|
|
355
355
|
<a href="https://github.com/nautobot/nautobot" title="Go to repository" class="md-source" data-md-component="source">
|
|
356
356
|
<div class="md-source__icon md-icon">
|
|
357
357
|
|
|
358
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.
|
|
358
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
|
|
359
359
|
</div>
|
|
360
360
|
<div class="md-source__repository">
|
|
361
361
|
GitHub
|
|
@@ -8600,7 +8600,7 @@
|
|
|
8600
8600
|
|
|
8601
8601
|
|
|
8602
8602
|
<a href="https://blog.networktocode.com/blog/tags/nautobot" target="_blank" rel="noopener" title="Network to Code Blog" class="md-social__link">
|
|
8603
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.
|
|
8603
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 64c0-17.7 14.3-32 32-32 229.8 0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7 0 64m0 352a64 64 0 1 1 128 0 64 64 0 1 1-128 0m32-256c159.1 0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7 0-32-14.3-32-32s14.3-32 32-32"/></svg>
|
|
8604
8604
|
</a>
|
|
8605
8605
|
|
|
8606
8606
|
|
|
@@ -8608,7 +8608,7 @@
|
|
|
8608
8608
|
|
|
8609
8609
|
|
|
8610
8610
|
<a href="https://www.youtube.com/playlist?list=PLjA0bhxgryJ2Ts4GJMDA-tPzVWEncv4pb" target="_blank" rel="noopener" title="Nautobot Videos" class="md-social__link">
|
|
8611
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.
|
|
8611
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305m-317.51 213.508V175.185l142.739 81.205z"/></svg>
|
|
8612
8612
|
</a>
|
|
8613
8613
|
|
|
8614
8614
|
|
|
@@ -8616,7 +8616,7 @@
|
|
|
8616
8616
|
|
|
8617
8617
|
|
|
8618
8618
|
<a href="https://www.networktocode.com/community/" target="_blank" rel="noopener" title="Network to Code Community" class="md-social__link">
|
|
8619
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.
|
|
8619
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1s21.16-47.06 47.06-47.06h47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06S448 171 448 196.9s-21.16 47.06-47.06 47.06h-47.06zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06S309 480 283.1 480s-47.06-21.16-47.06-47.06v-47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06s21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06z"/></svg>
|
|
8620
8620
|
</a>
|
|
8621
8621
|
|
|
8622
8622
|
|
|
@@ -8624,7 +8624,7 @@
|
|
|
8624
8624
|
|
|
8625
8625
|
|
|
8626
8626
|
<a href="https://github.com/nautobot/nautobot" target="_blank" rel="noopener" title="GitHub Repo" class="md-social__link">
|
|
8627
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.
|
|
8627
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
|
|
8628
8628
|
</a>
|
|
8629
8629
|
|
|
8630
8630
|
|
|
@@ -8632,7 +8632,7 @@
|
|
|
8632
8632
|
|
|
8633
8633
|
|
|
8634
8634
|
<a href="https://twitter.com/networktocode" target="_blank" rel="noopener" title="Network to Code Twitter" class="md-social__link">
|
|
8635
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.
|
|
8635
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253"/></svg>
|
|
8636
8636
|
</a>
|
|
8637
8637
|
|
|
8638
8638
|
</div>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../user-guide/administration/configuration/redis.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../user-guide/administration/configuration/redis.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../user-guide/administration/configuration/redis.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../user-guide/administration/configuration/redis.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../user-guide/platform-functionality/change-logging.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../user-guide/platform-functionality/change-logging.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../user-guide/platform-functionality/change-logging.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../user-guide/platform-functionality/change-logging.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../user-guide/core-data-model/extras/configcontext.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../user-guide/core-data-model/extras/configcontext.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../user-guide/core-data-model/extras/configcontext.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../user-guide/core-data-model/extras/configcontext.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../user-guide/administration/guides/health-checks.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../user-guide/administration/guides/health-checks.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../user-guide/administration/guides/health-checks.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../user-guide/administration/guides/health-checks.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../development/jobs/index.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../development/jobs/index.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../development/jobs/index.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../development/jobs/index.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../user-guide/administration/guides/prometheus-metrics.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../user-guide/administration/guides/prometheus-metrics.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../user-guide/administration/guides/prometheus-metrics.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../user-guide/administration/guides/prometheus-metrics.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../user-guide/administration/guides/celery-queues.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../user-guide/administration/guides/celery-queues.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../user-guide/administration/guides/celery-queues.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../user-guide/administration/guides/celery-queues.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../user-guide/administration/tools/nautobot-server.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../user-guide/administration/tools/nautobot-server.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../user-guide/administration/tools/nautobot-server.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../user-guide/administration/tools/nautobot-server.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../user-guide/administration/tools/nautobot-shell.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../user-guide/administration/tools/nautobot-shell.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../user-guide/administration/tools/nautobot-shell.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../user-guide/administration/tools/nautobot-shell.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../user-guide/administration/guides/permissions.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../user-guide/administration/guides/permissions.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../user-guide/administration/guides/permissions.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../user-guide/administration/guides/permissions.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
<meta charset="utf-8">
|
|
6
6
|
<title>Redirecting...</title>
|
|
7
7
|
<link rel="canonical" href="../user-guide/administration/guides/replicating-nautobot.html">
|
|
8
|
-
<meta name="robots" content="noindex">
|
|
9
8
|
<script>var anchor=window.location.hash.substr(1);location.href="../user-guide/administration/guides/replicating-nautobot.html"+(anchor?"#"+anchor:"")</script>
|
|
10
9
|
<meta http-equiv="refresh" content="0; url=../user-guide/administration/guides/replicating-nautobot.html">
|
|
11
10
|
</head>
|
|
12
11
|
<body>
|
|
13
|
-
|
|
12
|
+
You're being redirected to a <a href="../user-guide/administration/guides/replicating-nautobot.html">new destination</a>.
|
|
14
13
|
</body>
|
|
15
14
|
</html>
|