nautobot 2.0.0a3__py3-none-any.whl → 2.0.0b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nautobot/apps/api.py +6 -8
- nautobot/apps/forms.py +0 -2
- nautobot/apps/ui.py +0 -8
- nautobot/circuits/api/serializers.py +9 -117
- nautobot/circuits/api/urls.py +1 -1
- nautobot/circuits/api/views.py +0 -1
- nautobot/circuits/forms.py +0 -65
- nautobot/circuits/migrations/0014_related_name_changes.py +1 -1
- nautobot/circuits/migrations/0016_tagsfield.py +34 -0
- nautobot/circuits/migrations/0017_fixup_null_statuses.py +22 -0
- nautobot/circuits/migrations/0018_status_nonnullable.py +22 -0
- nautobot/circuits/models.py +3 -87
- nautobot/circuits/navigation.py +14 -69
- nautobot/circuits/signals.py +0 -2
- nautobot/circuits/tables.py +39 -1
- nautobot/circuits/tests/integration/test_relationships.py +9 -9
- nautobot/circuits/tests/test_api.py +4 -8
- nautobot/circuits/tests/test_filters.py +10 -4
- nautobot/circuits/tests/test_models.py +5 -1
- nautobot/circuits/tests/test_views.py +27 -5
- nautobot/circuits/views.py +18 -10
- nautobot/core/api/__init__.py +8 -2
- nautobot/core/api/fields.py +15 -6
- nautobot/core/api/filter_backends.py +3 -2
- nautobot/core/api/metadata.py +237 -30
- nautobot/core/api/mixins.py +94 -0
- nautobot/core/api/pagination.py +4 -0
- nautobot/core/api/parsers.py +154 -0
- nautobot/core/api/renderers.py +153 -2
- nautobot/core/api/schema.py +46 -2
- nautobot/core/api/serializers.py +377 -35
- nautobot/core/api/urls.py +11 -3
- nautobot/core/api/utils.py +174 -2
- nautobot/core/api/versioning.py +32 -10
- nautobot/core/api/views.py +266 -72
- nautobot/core/apps/__init__.py +138 -220
- nautobot/core/celery/__init__.py +112 -41
- nautobot/core/celery/backends.py +19 -12
- nautobot/core/celery/control.py +46 -0
- nautobot/core/celery/encoders.py +53 -0
- nautobot/core/celery/log.py +38 -0
- nautobot/core/celery/schedulers.py +23 -4
- nautobot/core/celery/task.py +1 -16
- nautobot/core/checks.py +0 -27
- nautobot/core/choices.py +0 -113
- nautobot/core/{cli.py → cli/__init__.py} +1 -1
- nautobot/core/cli/__main__.py +3 -0
- nautobot/core/constants.py +0 -24
- nautobot/core/context_processors.py +12 -0
- nautobot/core/filters.py +2 -2
- nautobot/core/forms/__init__.py +0 -4
- nautobot/core/forms/fields.py +38 -65
- nautobot/core/forms/forms.py +4 -1
- nautobot/core/forms/utils.py +0 -52
- nautobot/core/graphql/schema.py +4 -27
- nautobot/core/jobs/__init__.py +75 -0
- nautobot/core/management/commands/build_ui.py +255 -0
- nautobot/core/management/commands/generate_test_data.py +3 -2
- nautobot/core/management/commands/post_upgrade.py +24 -24
- nautobot/core/models/__init__.py +26 -1
- nautobot/core/models/fields.py +24 -5
- nautobot/core/models/generics.py +2 -42
- nautobot/core/models/managers.py +5 -0
- nautobot/core/models/name_color_content_types.py +0 -14
- nautobot/core/models/tree_queries.py +14 -4
- nautobot/core/models/utils.py +5 -6
- nautobot/core/models/validators.py +17 -8
- nautobot/core/releases.py +8 -10
- nautobot/core/settings.py +80 -42
- nautobot/core/tables.py +5 -5
- nautobot/core/tasks.py +4 -7
- nautobot/core/templates/base.html +1 -49
- nautobot/core/templates/base_django.html +49 -0
- nautobot/core/templates/base_react.html +55 -0
- nautobot/core/templates/buttons/export.html +6 -4
- nautobot/core/templates/generic/object_bulk_create.html +10 -21
- nautobot/core/templates/generic/object_list.html +3 -1
- nautobot/core/templates/generic/object_retrieve_plugin_full_width.html +3 -0
- nautobot/core/templates/inc/footer.html +1 -0
- nautobot/core/templates/inc/javascript.html +0 -14
- nautobot/core/templates/inc/nav_menu.html +28 -33
- nautobot/core/templates/inc/object_details_advanced_panel.html +13 -0
- nautobot/core/templates/inc/relationships_table_rows.html +2 -2
- nautobot/core/templates/nautobot_config.py.j2 +8 -20
- nautobot/core/templates/plugin_template/__init__.py-tpl +1 -2
- nautobot/core/templates/rest_framework/api.html +8 -0
- nautobot/core/templatetags/buttons.py +32 -28
- nautobot/core/testing/__init__.py +47 -44
- nautobot/core/testing/api.py +362 -47
- nautobot/core/testing/filters.py +1 -1
- nautobot/core/testing/migrations.py +2 -0
- nautobot/core/testing/mixins.py +22 -9
- nautobot/core/testing/schema.py +2 -1
- nautobot/core/testing/views.py +21 -46
- nautobot/core/tests/integration/test_filters.py +17 -8
- nautobot/core/tests/integration/test_navbar.py +11 -34
- nautobot/core/tests/integration/test_plugin_navbar.py +9 -103
- nautobot/core/tests/nautobot_config.py +2 -3
- nautobot/core/tests/test_api.py +290 -21
- nautobot/core/tests/test_checks.py +0 -7
- nautobot/core/tests/test_filters.py +107 -59
- nautobot/core/tests/test_forms.py +26 -92
- nautobot/core/tests/test_graphql.py +110 -77
- nautobot/core/tests/test_logging.py +4 -0
- nautobot/core/tests/test_managers.py +3 -1
- nautobot/core/tests/test_models.py +2 -0
- nautobot/core/tests/test_paginator.py +3 -1
- nautobot/core/tests/test_releases.py +12 -12
- nautobot/core/tests/test_templatetags_helpers.py +4 -4
- nautobot/core/tests/test_utils.py +32 -68
- nautobot/core/tests/test_views.py +12 -15
- nautobot/core/utils/data.py +17 -0
- nautobot/core/utils/deprecation.py +9 -6
- nautobot/core/utils/filtering.py +8 -3
- nautobot/core/utils/git.py +12 -4
- nautobot/core/utils/lookup.py +3 -1
- nautobot/core/utils/requests.py +1 -104
- nautobot/core/views/__init__.py +1 -0
- nautobot/core/views/generic.py +75 -110
- nautobot/core/views/mixins.py +52 -61
- nautobot/core/views/renderers.py +6 -7
- nautobot/core/views/utils.py +80 -0
- nautobot/dcim/api/serializers.py +160 -667
- nautobot/dcim/api/urls.py +1 -1
- nautobot/dcim/api/views.py +7 -44
- nautobot/dcim/choices.py +2 -0
- nautobot/dcim/filters/__init__.py +21 -0
- nautobot/dcim/form_mixins.py +1 -27
- nautobot/dcim/forms.py +19 -765
- nautobot/dcim/migrations/0024_alter_device_and_rack_role_add_new_role.py +2 -1
- nautobot/dcim/migrations/0025_device_and_rack_roles_data_migrations.py +19 -13
- nautobot/dcim/migrations/0027_remove_device_role_and_rack_role.py +1 -1
- nautobot/dcim/migrations/0028_rename_foreignkey_fields.py +1 -1
- nautobot/dcim/migrations/0030_migrate_region_and_site_data_to_locations.py +2 -2
- nautobot/dcim/migrations/0035_related_name_changes.py +1 -1
- nautobot/dcim/migrations/0036_remove_region_and_site.py +1 -1
- nautobot/dcim/migrations/0040_tagsfield.py +109 -0
- nautobot/dcim/migrations/{0040_ipam__namespaces.py → 0041_ipam__namespaces.py} +1 -1
- nautobot/dcim/migrations/0042_fixup_null_statuses.py +51 -0
- nautobot/dcim/migrations/0043_status_nonnullable.py +72 -0
- nautobot/dcim/models/cables.py +3 -33
- nautobot/dcim/models/device_component_templates.py +6 -0
- nautobot/dcim/models/device_components.py +12 -198
- nautobot/dcim/models/devices.py +30 -143
- nautobot/dcim/models/locations.py +3 -64
- nautobot/dcim/models/power.py +3 -50
- nautobot/dcim/models/racks.py +7 -84
- nautobot/dcim/navigation.py +141 -467
- nautobot/dcim/signals.py +0 -2
- nautobot/dcim/tables/locations.py +2 -2
- nautobot/dcim/tables/power.py +1 -2
- nautobot/dcim/templates/dcim/console_port_connection_list.html +7 -0
- nautobot/dcim/templates/dcim/devicetype.html +2 -2
- nautobot/dcim/templates/dcim/interface_connection_list.html +7 -0
- nautobot/dcim/templates/dcim/location.html +16 -1
- nautobot/dcim/templates/dcim/locationtype.html +15 -0
- nautobot/dcim/templates/dcim/power_port_connection_list.html +7 -0
- nautobot/dcim/templates/dcim/rackgroup.html +0 -12
- nautobot/dcim/tests/test_api.py +166 -81
- nautobot/dcim/tests/test_cablepaths.py +41 -35
- nautobot/dcim/tests/test_filters.py +67 -23
- nautobot/dcim/tests/test_forms.py +5 -205
- nautobot/dcim/tests/test_graphql.py +7 -2
- nautobot/dcim/tests/test_migrations.py +6 -11
- nautobot/dcim/tests/test_models.py +182 -110
- nautobot/dcim/tests/test_natural_ordering.py +11 -8
- nautobot/dcim/tests/test_signals.py +6 -3
- nautobot/dcim/tests/test_views.py +197 -175
- nautobot/dcim/urls.py +11 -16
- nautobot/dcim/views.py +7 -134
- nautobot/docs/additional-features/caching.md +6 -87
- nautobot/docs/additional-features/job-scheduling-and-approvals.md +3 -0
- nautobot/docs/additional-features/jobs.md +177 -195
- nautobot/docs/administration/nautobot-server.md +6 -21
- nautobot/docs/administration/replicating-nautobot.md +0 -10
- nautobot/docs/configuration/optional-settings.md +32 -41
- nautobot/docs/configuration/required-settings.md +11 -52
- nautobot/docs/development/application-registry.md +2 -13
- nautobot/docs/development/extending-models.md +15 -17
- nautobot/docs/development/generic-views.md +0 -2
- nautobot/docs/development/getting-started.md +55 -5
- nautobot/docs/development/navigation-menu.md +22 -93
- nautobot/docs/development/react-ui.md +105 -0
- nautobot/docs/development/role-internals.md +1 -3
- nautobot/docs/development/style-guide.md +6 -4
- nautobot/docs/index.md +3 -2
- nautobot/docs/installation/migrating-from-netbox.md +11 -42
- nautobot/docs/installation/nautobot.md +1 -1
- nautobot/docs/installation/tables/v2-api-behavior-changes.yaml +70 -0
- nautobot/docs/installation/tables/v2-api-removed-fields.yaml +142 -0
- nautobot/docs/installation/tables/v2-api-renamed-fields.yaml +124 -0
- nautobot/docs/installation/tables/v2-code-location-changes.yaml +241 -0
- nautobot/docs/installation/tables/v2-code-removals.yaml +67 -0
- nautobot/docs/installation/tables/v2-database-behavior-changes.yaml +37 -0
- nautobot/docs/installation/tables/v2-database-removed-fields.yaml +166 -0
- nautobot/docs/installation/tables/v2-database-renamed-fields.yaml +340 -0
- nautobot/docs/installation/tables/v2-filters-corrected-fields.yaml +28 -0
- nautobot/docs/installation/tables/v2-filters-enhanced-fields.yaml +241 -0
- nautobot/docs/installation/tables/v2-filters-removed-fields.yaml +553 -0
- nautobot/docs/installation/tables/v2-filters-renamed-fields.yaml +223 -0
- nautobot/docs/installation/tables/v2-logging-renamed-loggers.yaml +23 -0
- nautobot/docs/installation/upgrading-from-nautobot-v1.md +170 -747
- nautobot/docs/models/dcim/device.md +3 -0
- nautobot/docs/models/dcim/deviceredundancygroup.md +3 -3
- nautobot/docs/models/extras/computedfield.md +4 -4
- nautobot/docs/models/extras/gitrepository.md +3 -0
- nautobot/docs/models/extras/job.md +1 -0
- nautobot/docs/models/extras/jobbutton.md +18 -13
- nautobot/docs/models/extras/jobhook.md +7 -4
- nautobot/docs/models/extras/jobresult.md +6 -2
- nautobot/docs/models/extras/relationship.md +2 -2
- nautobot/docs/models/extras/status.md +6 -19
- nautobot/docs/models/ipam/ipaddress.md +3 -0
- nautobot/docs/models/virtualization/virtualmachine.md +3 -0
- nautobot/docs/plugins/development.md +83 -21
- nautobot/docs/release-notes/version-1.5.md +53 -0
- nautobot/docs/release-notes/version-2.0.md +180 -0
- nautobot/docs/requirements.txt +1 -0
- nautobot/docs/rest-api/overview.md +384 -215
- nautobot/docs/rest-api/ui-related-endpoints.md +9 -0
- nautobot/extras/admin.py +3 -5
- nautobot/extras/api/customfields.py +15 -39
- nautobot/extras/api/fields.py +0 -11
- nautobot/extras/api/mixins.py +45 -0
- nautobot/extras/api/relationships.py +63 -158
- nautobot/extras/api/serializers.py +165 -700
- nautobot/extras/api/urls.py +1 -1
- nautobot/extras/api/views.py +294 -280
- nautobot/extras/apps.py +4 -7
- nautobot/extras/choices.py +11 -9
- nautobot/extras/constants.py +9 -3
- nautobot/extras/datasources/__init__.py +2 -0
- nautobot/extras/datasources/git.py +135 -186
- nautobot/extras/datasources/registry.py +25 -35
- nautobot/extras/filters/__init__.py +20 -19
- nautobot/extras/filters/mixins.py +4 -4
- nautobot/extras/forms/forms.py +63 -127
- nautobot/extras/forms/mixins.py +23 -51
- nautobot/extras/health_checks.py +0 -33
- nautobot/extras/jobs.py +387 -565
- nautobot/extras/management/commands/runjob.py +24 -62
- nautobot/extras/managers.py +30 -7
- nautobot/extras/migrations/0058_jobresult_add_time_status_idxs.py +38 -0
- nautobot/extras/migrations/{0058_joblogentry_scheduledjob_webhook_data_migration.py → 0059_joblogentry_scheduledjob_webhook_data_migration.py} +1 -1
- nautobot/extras/migrations/{0059_alter_joblogentry_scheduledjob_webhook_fields.py → 0060_alter_joblogentry_scheduledjob_webhook_fields.py} +1 -1
- nautobot/extras/migrations/{0060_role_and_alter_status.py → 0061_role_and_alter_status.py} +1 -7
- nautobot/extras/migrations/{0061_collect_roles_from_related_apps_roles.py → 0062_collect_roles_from_related_apps_roles.py} +33 -32
- nautobot/extras/migrations/{0062_alter_role_options.py → 0063_alter_role_options.py} +1 -1
- nautobot/extras/migrations/{0063_alter_configcontext_and_add_new_role.py → 0064_alter_configcontext_and_add_new_role.py} +1 -1
- nautobot/extras/migrations/0065_configcontext_data_migrations.py +44 -0
- nautobot/extras/migrations/{0065_rename_configcontext_role.py → 0066_rename_configcontext_role.py} +1 -1
- nautobot/extras/migrations/{0066_jobresult__add_celery_fields.py → 0067_jobresult__add_celery_fields.py} +36 -2
- nautobot/extras/migrations/{0067_created_datetime.py → 0068_created_datetime.py} +1 -1
- nautobot/extras/migrations/{0068_remove_site_and_region_attributes_from_config_context.py → 0069_remove_site_and_region_attributes_from_config_context.py} +1 -1
- nautobot/extras/migrations/{0069_replace_related_names.py → 0070_replace_related_names.py} +1 -1
- nautobot/extras/migrations/{0070_rename_model_fields.py → 0071_rename_model_fields.py} +1 -1
- nautobot/extras/migrations/0072_job__unique_name_data_migration.py +86 -0
- nautobot/extras/migrations/{0072_job__unique_name.py → 0073_job__unique_name.py} +13 -9
- nautobot/extras/migrations/{0073_remove_gitrepository_fields.py → 0074_remove_gitrepository_fields.py} +1 -1
- nautobot/extras/migrations/{0074_rename_slug_to_key_for_custom_field.py → 0075_rename_slug_to_key_for_custom_field.py} +1 -1
- nautobot/extras/migrations/{0075_migrate_custom_field_data.py → 0076_migrate_custom_field_data.py} +1 -1
- nautobot/extras/migrations/{0076_remove_name_field_and_make_label_field_non_nullable.py → 0077_remove_name_field_and_make_label_field_non_nullable.py} +1 -1
- nautobot/extras/migrations/{0077_remove_slug.py → 0078_remove_slug.py} +1 -5
- nautobot/extras/migrations/0079_tagsfield.py +28 -0
- nautobot/extras/migrations/0080_rename_relationship_slug_to_key.py +17 -0
- nautobot/extras/migrations/0081_rename_relationship_name_to_label.py +29 -0
- nautobot/extras/migrations/0082_ensure_relationship_keys_are_unique.py +43 -0
- nautobot/extras/migrations/0083_rename_computed_field_slug_to_key.py +21 -0
- nautobot/extras/migrations/0084_taggeditem_cleanup.py +43 -0
- nautobot/extras/migrations/0085_taggeditem_uniqueness.py +22 -0
- nautobot/extras/migrations/0086_job__celery_task_fields__dryrun_support.py +81 -0
- nautobot/extras/migrations/0087_job__commit_default_data_migration.py +26 -0
- nautobot/extras/migrations/0088_joblogentry__log_level_default.py +17 -0
- nautobot/extras/migrations/0089_joblogentry__log_level_data_migration.py +34 -0
- nautobot/extras/migrations/0090_scheduledjob__data_migration.py +57 -0
- nautobot/extras/models/__init__.py +2 -3
- nautobot/extras/models/change_logging.py +0 -36
- nautobot/extras/models/customfields.py +39 -33
- nautobot/extras/models/datasources.py +48 -50
- nautobot/extras/models/groups.py +5 -6
- nautobot/extras/models/jobs.py +189 -321
- nautobot/extras/models/mixins.py +0 -71
- nautobot/extras/models/models.py +0 -19
- nautobot/extras/models/relationships.py +19 -13
- nautobot/extras/models/roles.py +0 -34
- nautobot/extras/models/secrets.py +2 -26
- nautobot/extras/models/statuses.py +6 -5
- nautobot/extras/models/tags.py +2 -17
- nautobot/extras/navigation.py +89 -307
- nautobot/extras/plugins/__init__.py +3 -120
- nautobot/extras/plugins/utils.py +0 -3
- nautobot/extras/plugins/validators.py +5 -4
- nautobot/extras/plugins/views.py +16 -3
- nautobot/extras/querysets.py +1 -7
- nautobot/extras/registry.py +3 -0
- nautobot/extras/signals.py +26 -60
- nautobot/extras/tables.py +34 -40
- nautobot/extras/tasks.py +0 -12
- nautobot/extras/templates/extras/configcontext.html +1 -1
- nautobot/extras/templates/extras/configcontextschema.html +16 -1
- nautobot/extras/templates/extras/customfield.html +0 -13
- nautobot/extras/templates/extras/gitrepository.html +3 -3
- nautobot/extras/templates/extras/inc/jobresult.html +10 -0
- nautobot/extras/templates/extras/inc/panel_jobhistory.html +1 -1
- nautobot/extras/templates/extras/job.html +35 -25
- nautobot/extras/templates/extras/job_approval_request.html +15 -30
- nautobot/extras/templates/extras/job_detail.html +13 -31
- nautobot/extras/templates/extras/job_edit.html +15 -17
- nautobot/extras/templates/extras/jobresult.html +24 -6
- nautobot/extras/templates/extras/scheduledjob.html +2 -2
- nautobot/extras/templates/extras/secret.html +28 -0
- nautobot/extras/templatetags/job_buttons.py +1 -0
- nautobot/extras/{tests/example_jobs → test_jobs}/api_test_job.py +13 -6
- nautobot/extras/test_jobs/atomic_transaction.py +53 -0
- nautobot/extras/test_jobs/dry_run.py +29 -0
- nautobot/extras/{tests/example_jobs/test_duplicate_name.py → test_jobs/duplicate_name.py} +4 -0
- nautobot/extras/test_jobs/duplicate_name2.py +9 -0
- nautobot/extras/test_jobs/fail.py +23 -0
- nautobot/extras/{tests/example_jobs/test_field_default.py → test_jobs/field_default.py} +4 -0
- nautobot/extras/{tests/example_jobs/test_field_order.py → test_jobs/field_order.py} +4 -0
- nautobot/extras/{tests/example_jobs/test_file_upload_fail.py → test_jobs/file_upload_fail.py} +11 -6
- nautobot/extras/test_jobs/file_upload_pass.py +25 -0
- nautobot/extras/test_jobs/has_sensitive_variables.py +25 -0
- nautobot/extras/test_jobs/ipaddress_vars.py +66 -0
- nautobot/extras/test_jobs/job_button_receiver.py +28 -0
- nautobot/extras/test_jobs/job_hook_receiver.py +29 -0
- nautobot/extras/test_jobs/job_variables.py +88 -0
- nautobot/extras/test_jobs/location_with_custom_field.py +45 -0
- nautobot/extras/test_jobs/log_redaction.py +20 -0
- nautobot/extras/test_jobs/log_skip_db_logging.py +17 -0
- nautobot/extras/test_jobs/modify_db.py +25 -0
- nautobot/extras/{tests/example_jobs/test_no_field_order.py → test_jobs/no_field_order.py} +4 -0
- nautobot/extras/test_jobs/object_var_optional.py +21 -0
- nautobot/extras/test_jobs/object_var_required.py +21 -0
- nautobot/extras/test_jobs/object_vars.py +26 -0
- nautobot/extras/test_jobs/pass.py +25 -0
- nautobot/extras/test_jobs/profiling.py +32 -0
- nautobot/extras/test_jobs/read_only_job.py +15 -0
- nautobot/extras/{tests/example_jobs/test_required_args.py → test_jobs/required_args.py} +4 -0
- nautobot/extras/{tests/example_jobs/test_soft_time_limit_greater_than_time_limit.py → test_jobs/soft_time_limit_greater_than_time_limit.py} +5 -1
- nautobot/extras/{tests/example_jobs/test_task_queues.py → test_jobs/task_queues.py} +5 -1
- nautobot/extras/tests/integration/test_computedfields.py +1 -1
- nautobot/extras/tests/integration/test_configcontextschema.py +5 -3
- nautobot/extras/tests/integration/test_customfields.py +4 -2
- nautobot/extras/tests/integration/test_dynamicgroups.py +1 -1
- nautobot/extras/tests/integration/test_jobs.py +25 -27
- nautobot/extras/tests/integration/test_notes.py +8 -4
- nautobot/extras/tests/integration/test_relationships.py +2 -2
- nautobot/extras/tests/test_api.py +649 -642
- nautobot/extras/tests/test_changelog.py +3 -3
- nautobot/extras/tests/test_context_managers.py +5 -3
- nautobot/extras/tests/test_customfields.py +92 -50
- nautobot/extras/tests/test_datasources.py +189 -112
- nautobot/extras/tests/test_dynamicgroups.py +7 -8
- nautobot/extras/tests/test_filters.py +137 -89
- nautobot/extras/tests/test_forms.py +73 -75
- nautobot/extras/tests/{test_scripts.py → test_job_variables.py} +43 -49
- nautobot/extras/tests/test_jobs.py +262 -263
- nautobot/extras/tests/test_migrations.py +4 -3
- nautobot/extras/tests/test_models.py +116 -161
- nautobot/extras/tests/test_plugins.py +38 -60
- nautobot/extras/tests/test_relationships.py +167 -120
- nautobot/extras/tests/test_tags.py +6 -11
- nautobot/extras/tests/test_utils.py +31 -1
- nautobot/extras/tests/test_views.py +201 -145
- nautobot/extras/tests/test_webhooks.py +6 -2
- nautobot/extras/urls.py +42 -42
- nautobot/extras/utils.py +137 -163
- nautobot/extras/views.py +78 -152
- nautobot/ipam/api/fields.py +17 -0
- nautobot/ipam/api/serializers.py +58 -164
- nautobot/ipam/api/urls.py +1 -1
- nautobot/ipam/api/views.py +3 -2
- nautobot/ipam/apps.py +1 -2
- nautobot/ipam/filters.py +1 -10
- nautobot/ipam/forms.py +4 -177
- nautobot/ipam/lookups.py +1 -0
- nautobot/ipam/management/commands/__init__.py +0 -0
- nautobot/ipam/management/commands/fix_prefix_broadcast.py +17 -0
- nautobot/ipam/migrations/0010_alter_ipam_role_add_new_role.py +1 -1
- nautobot/ipam/migrations/0011_migrate_ipam_role_data.py +32 -38
- nautobot/ipam/migrations/0020_related_name_changes.py +1 -1
- nautobot/ipam/migrations/0022_aggregate_to_prefix_data_migration.py +2 -2
- nautobot/ipam/migrations/0028_tagsfield.py +44 -0
- nautobot/ipam/migrations/0029_ip_address_to_interface_uniqueness_constraints.py +18 -0
- nautobot/ipam/migrations/{0028_ipam__namespaces.py → 0030_ipam__namespaces.py} +77 -28
- nautobot/ipam/migrations/0031_ipam__prefix__add_parent.py +58 -0
- nautobot/ipam/migrations/0032_ipam__namespaces_finish.py +63 -0
- nautobot/ipam/migrations/0033_fixup_null_statuses.py +26 -0
- nautobot/ipam/migrations/0034_status_nonnullable.py +36 -0
- nautobot/ipam/models.py +100 -236
- nautobot/ipam/navigation.py +36 -181
- nautobot/ipam/querysets.py +20 -25
- nautobot/ipam/signals.py +49 -6
- nautobot/ipam/tables.py +10 -3
- nautobot/ipam/templates/ipam/namespace_ipaddresses.html +11 -0
- nautobot/ipam/templates/ipam/namespace_prefixes.html +11 -0
- nautobot/ipam/templates/ipam/namespace_retrieve.html +17 -4
- nautobot/ipam/templates/ipam/namespace_vrfs.html +11 -0
- nautobot/ipam/templates/ipam/prefix.html +1 -1
- nautobot/ipam/templates/ipam/vlangroup.html +0 -13
- nautobot/ipam/templates/ipam/vrf_edit.html +6 -0
- nautobot/ipam/tests/integration/test_prefixes.py +3 -26
- nautobot/ipam/tests/test_api.py +22 -19
- nautobot/ipam/tests/test_filters.py +59 -23
- nautobot/ipam/tests/test_migrations.py +6 -10
- nautobot/ipam/tests/test_models.py +323 -198
- nautobot/ipam/tests/test_ordering.py +2 -2
- nautobot/ipam/tests/test_querysets.py +44 -24
- nautobot/ipam/tests/test_views.py +73 -26
- nautobot/ipam/urls.py +16 -0
- nautobot/ipam/{utils.py → utils/__init__.py} +2 -2
- nautobot/ipam/utils/migrations.py +713 -0
- nautobot/ipam/views.py +137 -20
- nautobot/project-static/docs/404.html +1178 -10
- nautobot/project-static/docs/additional-features/caching.html +1224 -159
- nautobot/project-static/docs/additional-features/change-logging.html +1180 -12
- nautobot/project-static/docs/additional-features/config-contexts.html +1180 -12
- nautobot/project-static/docs/additional-features/graphql.html +1179 -11
- nautobot/project-static/docs/additional-features/healthcheck.html +1180 -12
- nautobot/project-static/docs/additional-features/job-scheduling-and-approvals.html +1184 -12
- nautobot/project-static/docs/additional-features/jobs.html +1514 -328
- nautobot/project-static/docs/additional-features/napalm.html +1180 -12
- nautobot/project-static/docs/additional-features/prometheus-metrics.html +1180 -12
- nautobot/project-static/docs/additional-features/template-filters.html +1180 -12
- nautobot/project-static/docs/administration/celery-queues.html +1178 -10
- nautobot/project-static/docs/administration/nautobot-server.html +1451 -304
- nautobot/project-static/docs/administration/nautobot-shell.html +1178 -10
- nautobot/project-static/docs/administration/permissions.html +1178 -10
- nautobot/project-static/docs/administration/replicating-nautobot.html +1262 -113
- nautobot/project-static/docs/apps/index.html +1178 -10
- nautobot/project-static/docs/apps/nautobot-apps.html +1178 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +1580 -426
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +1178 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +3481 -1838
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +1178 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +1178 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +1185 -11
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +1719 -551
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +2062 -930
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +1946 -659
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +1180 -12
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +1189 -21
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +9283 -6218
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +2734 -2122
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +1178 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +2337 -1300
- nautobot/project-static/docs/configuration/authentication/ldap.html +1178 -10
- nautobot/project-static/docs/configuration/authentication/remote.html +1178 -10
- nautobot/project-static/docs/configuration/authentication/sso.html +1178 -10
- nautobot/project-static/docs/configuration/index.html +1178 -10
- nautobot/project-static/docs/configuration/optional-settings.html +1311 -160
- nautobot/project-static/docs/configuration/required-settings.html +1312 -211
- nautobot/project-static/docs/core-functionality/circuits.html +1178 -10
- nautobot/project-static/docs/core-functionality/device-types.html +1178 -10
- nautobot/project-static/docs/core-functionality/devices.html +1182 -10
- nautobot/project-static/docs/core-functionality/ipam.html +1182 -10
- nautobot/project-static/docs/core-functionality/power.html +1178 -10
- nautobot/project-static/docs/core-functionality/secrets.html +1178 -10
- nautobot/project-static/docs/core-functionality/services.html +1178 -10
- nautobot/project-static/docs/core-functionality/sites-and-racks.html +1178 -10
- nautobot/project-static/docs/core-functionality/tenancy.html +1178 -10
- nautobot/project-static/docs/core-functionality/virtualization.html +1182 -10
- nautobot/project-static/docs/core-functionality/vlans.html +1179 -11
- nautobot/project-static/docs/development/application-registry.html +1190 -42
- nautobot/project-static/docs/development/best-practices.html +1178 -10
- nautobot/project-static/docs/development/docker-compose-advanced-use-cases.html +1178 -10
- nautobot/project-static/docs/development/extending-models.html +1238 -83
- nautobot/project-static/docs/development/generic-views.html +1180 -14
- nautobot/project-static/docs/development/getting-started.html +1365 -90
- nautobot/project-static/docs/development/homepage.html +1178 -10
- nautobot/project-static/docs/development/index.html +1178 -10
- nautobot/project-static/docs/development/model-features.html +1178 -10
- nautobot/project-static/docs/development/natural-keys.html +1178 -10
- nautobot/project-static/docs/development/navigation-menu.html +1215 -125
- nautobot/project-static/docs/development/react-ui.html +4199 -0
- nautobot/project-static/docs/development/release-checklist.html +1178 -10
- nautobot/project-static/docs/development/role-internals.html +1179 -12
- nautobot/project-static/docs/development/style-guide.html +1188 -19
- nautobot/project-static/docs/development/templates.html +1178 -10
- nautobot/project-static/docs/development/testing.html +1178 -10
- nautobot/project-static/docs/development/user-preferences.html +1178 -10
- nautobot/project-static/docs/docker/index.html +1178 -10
- nautobot/project-static/docs/index.html +1183 -12
- nautobot/project-static/docs/installation/centos.html +1178 -10
- nautobot/project-static/docs/installation/external-authentication.html +1178 -10
- nautobot/project-static/docs/installation/http-server.html +1178 -10
- nautobot/project-static/docs/installation/index.html +1178 -10
- nautobot/project-static/docs/installation/migrating-from-netbox.html +1305 -189
- nautobot/project-static/docs/installation/migrating-from-postgresql.html +1178 -10
- nautobot/project-static/docs/installation/nautobot.html +1179 -11
- nautobot/project-static/docs/installation/region-and-site-data-migration-guide.html +1178 -10
- nautobot/project-static/docs/installation/selinux-troubleshooting.html +1178 -10
- nautobot/project-static/docs/installation/services.html +1178 -10
- nautobot/project-static/docs/installation/tables/v2-api-behavior-changes.yaml +70 -0
- nautobot/project-static/docs/installation/tables/v2-api-removed-fields.yaml +142 -0
- nautobot/project-static/docs/installation/tables/v2-api-renamed-fields.yaml +124 -0
- nautobot/project-static/docs/installation/tables/v2-code-location-changes.yaml +241 -0
- nautobot/project-static/docs/installation/tables/v2-code-removals.yaml +67 -0
- nautobot/project-static/docs/installation/tables/v2-database-behavior-changes.yaml +37 -0
- nautobot/project-static/docs/installation/tables/v2-database-removed-fields.yaml +166 -0
- nautobot/project-static/docs/installation/tables/v2-database-renamed-fields.yaml +340 -0
- nautobot/project-static/docs/installation/tables/v2-filters-corrected-fields.yaml +28 -0
- nautobot/project-static/docs/installation/tables/v2-filters-enhanced-fields.yaml +241 -0
- nautobot/project-static/docs/installation/tables/v2-filters-removed-fields.yaml +553 -0
- nautobot/project-static/docs/installation/tables/v2-filters-renamed-fields.yaml +223 -0
- nautobot/project-static/docs/installation/tables/v2-logging-renamed-loggers.yaml +23 -0
- nautobot/project-static/docs/installation/ubuntu.html +1178 -10
- nautobot/project-static/docs/installation/upgrading-from-nautobot-v1.html +3823 -2152
- nautobot/project-static/docs/installation/upgrading.html +1178 -10
- nautobot/project-static/docs/models/circuits/circuit.html +1293 -103
- nautobot/project-static/docs/models/circuits/circuittermination.html +1293 -103
- nautobot/project-static/docs/models/circuits/circuittype.html +1293 -103
- nautobot/project-static/docs/models/circuits/provider.html +1293 -103
- nautobot/project-static/docs/models/circuits/providernetwork.html +1293 -103
- nautobot/project-static/docs/models/dcim/cable.html +1324 -103
- nautobot/project-static/docs/models/dcim/consoleport.html +1293 -103
- nautobot/project-static/docs/models/dcim/consoleporttemplate.html +1293 -103
- nautobot/project-static/docs/models/dcim/consoleserverport.html +1293 -103
- nautobot/project-static/docs/models/dcim/consoleserverporttemplate.html +1293 -103
- nautobot/project-static/docs/models/dcim/device.html +1326 -132
- nautobot/project-static/docs/models/dcim/devicebay.html +1293 -103
- nautobot/project-static/docs/models/dcim/devicebaytemplate.html +1293 -103
- nautobot/project-static/docs/models/dcim/deviceredundancygroup.html +1379 -97
- nautobot/project-static/docs/models/dcim/devicetype.html +1293 -103
- nautobot/project-static/docs/models/dcim/frontport.html +1293 -103
- nautobot/project-static/docs/models/dcim/frontporttemplate.html +1293 -103
- nautobot/project-static/docs/models/dcim/interface.html +1293 -103
- nautobot/project-static/docs/models/dcim/interfacetemplate.html +1293 -103
- nautobot/project-static/docs/models/dcim/inventoryitem.html +1293 -103
- nautobot/project-static/docs/models/dcim/location.html +1293 -103
- nautobot/project-static/docs/models/dcim/locationtype.html +1293 -103
- nautobot/project-static/docs/models/dcim/manufacturer.html +1292 -102
- nautobot/project-static/docs/models/dcim/platform.html +1272 -82
- nautobot/project-static/docs/models/dcim/powerfeed.html +1270 -80
- nautobot/project-static/docs/models/dcim/poweroutlet.html +1272 -82
- nautobot/project-static/docs/models/dcim/poweroutlettemplate.html +1272 -82
- nautobot/project-static/docs/models/dcim/powerpanel.html +1270 -80
- nautobot/project-static/docs/models/dcim/powerport.html +1272 -82
- nautobot/project-static/docs/models/dcim/powerporttemplate.html +1272 -82
- nautobot/project-static/docs/models/dcim/rack.html +1272 -82
- nautobot/project-static/docs/models/dcim/rackgroup.html +1272 -82
- nautobot/project-static/docs/models/dcim/rackreservation.html +1272 -82
- nautobot/project-static/docs/models/dcim/rearport.html +1286 -96
- nautobot/project-static/docs/models/dcim/rearporttemplate.html +1286 -96
- nautobot/project-static/docs/models/dcim/region.html +1178 -10
- nautobot/project-static/docs/models/dcim/site.html +1178 -10
- nautobot/project-static/docs/models/dcim/virtualchassis.html +1284 -94
- nautobot/project-static/docs/models/extras/computedfield.html +1184 -16
- nautobot/project-static/docs/models/extras/configcontext.html +1314 -86
- nautobot/project-static/docs/models/extras/configcontextschema.html +1276 -86
- nautobot/project-static/docs/models/extras/customfield.html +1180 -12
- nautobot/project-static/docs/models/extras/customlink.html +1180 -12
- nautobot/project-static/docs/models/extras/dynamicgroup.html +1180 -12
- nautobot/project-static/docs/models/extras/exporttemplate.html +1180 -12
- nautobot/project-static/docs/models/extras/gitrepository.html +1184 -12
- nautobot/project-static/docs/models/extras/graphqlquery.html +1321 -86
- nautobot/project-static/docs/models/extras/imageattachment.html +1276 -86
- nautobot/project-static/docs/models/extras/job.html +1277 -86
- nautobot/project-static/docs/models/extras/jobbutton.html +1201 -29
- nautobot/project-static/docs/models/extras/jobhook.html +1188 -16
- nautobot/project-static/docs/models/extras/joblogentry.html +1274 -84
- nautobot/project-static/docs/models/extras/jobresult.html +1364 -169
- nautobot/project-static/docs/models/extras/note.html +1180 -12
- nautobot/project-static/docs/models/extras/relationship.html +1182 -14
- nautobot/project-static/docs/models/extras/role.html +1320 -86
- nautobot/project-static/docs/models/extras/secret.html +1314 -86
- nautobot/project-static/docs/models/extras/secretsgroup.html +1276 -86
- nautobot/project-static/docs/models/extras/status.html +1188 -59
- nautobot/project-static/docs/models/extras/tag.html +1180 -12
- nautobot/project-static/docs/models/extras/webhook.html +1180 -12
- nautobot/project-static/docs/models/ipam/ipaddress.html +1327 -102
- nautobot/project-static/docs/models/ipam/prefix.html +1276 -86
- nautobot/project-static/docs/models/ipam/rir.html +1276 -86
- nautobot/project-static/docs/models/ipam/routetarget.html +1276 -86
- nautobot/project-static/docs/models/ipam/service.html +1276 -86
- nautobot/project-static/docs/models/ipam/vlan.html +1276 -86
- nautobot/project-static/docs/models/ipam/vlangroup.html +1276 -86
- nautobot/project-static/docs/models/ipam/vrf.html +1276 -86
- nautobot/project-static/docs/models/tenancy/tenant.html +1276 -86
- nautobot/project-static/docs/models/tenancy/tenantgroup.html +1276 -86
- nautobot/project-static/docs/models/users/objectpermission.html +1314 -86
- nautobot/project-static/docs/models/users/token.html +1276 -86
- nautobot/project-static/docs/models/virtualization/cluster.html +1276 -86
- nautobot/project-static/docs/models/virtualization/clustergroup.html +1276 -86
- nautobot/project-static/docs/models/virtualization/clustertype.html +1276 -86
- nautobot/project-static/docs/models/virtualization/virtualmachine.html +1321 -127
- nautobot/project-static/docs/models/virtualization/vminterface.html +1276 -86
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/plugins/development.html +1726 -495
- nautobot/project-static/docs/plugins/index.html +1178 -10
- nautobot/project-static/docs/plugins/porting-from-netbox.html +1178 -10
- nautobot/project-static/docs/release-notes/index.html +1178 -10
- nautobot/project-static/docs/release-notes/version-1.0.html +1178 -10
- nautobot/project-static/docs/release-notes/version-1.1.html +1178 -10
- nautobot/project-static/docs/release-notes/version-1.2.html +1178 -10
- nautobot/project-static/docs/release-notes/version-1.3.html +1178 -10
- nautobot/project-static/docs/release-notes/version-1.4.html +1178 -10
- nautobot/project-static/docs/release-notes/version-1.5.html +1608 -225
- nautobot/project-static/docs/release-notes/version-2.0.html +1547 -47
- nautobot/project-static/docs/requirements.txt +1 -0
- nautobot/project-static/docs/rest-api/authentication.html +1179 -11
- nautobot/project-static/docs/rest-api/filtering.html +1178 -10
- nautobot/project-static/docs/rest-api/overview.html +1841 -446
- nautobot/project-static/docs/rest-api/ui-related-endpoints.html +4057 -0
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +197 -187
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guides/custom-fields.html +1178 -10
- nautobot/project-static/docs/user-guides/getting-started/creating-devices.html +1178 -10
- nautobot/project-static/docs/user-guides/getting-started/index.html +1178 -10
- nautobot/project-static/docs/user-guides/getting-started/interfaces.html +1178 -10
- nautobot/project-static/docs/user-guides/getting-started/ipam.html +1178 -10
- nautobot/project-static/docs/user-guides/getting-started/platforms.html +1178 -10
- nautobot/project-static/docs/user-guides/getting-started/regions.html +1178 -10
- nautobot/project-static/docs/user-guides/getting-started/search-bar.html +1178 -10
- nautobot/project-static/docs/user-guides/getting-started/tenants.html +1178 -10
- nautobot/project-static/docs/user-guides/getting-started/vlans-and-vlan-groups.html +1178 -10
- nautobot/project-static/docs/user-guides/git-data-source.html +1178 -10
- nautobot/project-static/docs/user-guides/graphql.html +1178 -10
- nautobot/project-static/docs/user-guides/relationships.html +1178 -10
- nautobot/project-static/docs/user-guides/s3-django-storage.html +1178 -10
- nautobot/project-static/js/forms.js +16 -9
- nautobot/project-static/js/theme.js +5 -0
- nautobot/tenancy/api/serializers.py +4 -32
- nautobot/tenancy/api/urls.py +1 -1
- nautobot/tenancy/forms.py +0 -28
- nautobot/tenancy/migrations/0008_tagsfield.py +19 -0
- nautobot/tenancy/models.py +0 -25
- nautobot/tenancy/navigation.py +6 -39
- nautobot/tenancy/templates/tenancy/tenant.html +12 -12
- nautobot/tenancy/templates/tenancy/tenantgroup.html +1 -1
- nautobot/tenancy/tests/test_api.py +1 -3
- nautobot/tenancy/tests/test_filters.py +10 -5
- nautobot/tenancy/views.py +0 -2
- nautobot/ui/.eslintignore +6 -0
- nautobot/ui/.gitignore +10 -0
- nautobot/ui/.prettierignore +9 -0
- nautobot/ui/.prettierrc +4 -0
- nautobot/ui/README.md +33 -0
- nautobot/ui/app_imports.js.j2 +7 -0
- nautobot/ui/craco.config.js +46 -0
- nautobot/ui/jsconfig-base.json +11 -0
- nautobot/ui/jsconfig.json +5 -0
- nautobot/ui/lib/nautobot-craco-alias-plugin.js +40 -0
- nautobot/ui/package-lock.json +21451 -0
- nautobot/ui/package.json +70 -0
- nautobot/ui/public/index.html +47 -0
- nautobot/ui/public/logo192.png +0 -0
- nautobot/ui/public/logo512.png +0 -0
- nautobot/ui/public/manifest.json +25 -0
- nautobot/ui/public/nautobot_logo.svg +131 -0
- nautobot/ui/public/robots.txt +3 -0
- nautobot/ui/src/App.js +71 -0
- nautobot/ui/src/components/AppFullWidthComponents.js +8 -0
- nautobot/ui/src/components/AppTab.js +40 -0
- nautobot/ui/src/components/Apps.js +60 -0
- nautobot/ui/src/components/HomeChangelogPanel.js +98 -0
- nautobot/ui/src/components/HomePanel.js +58 -0
- nautobot/ui/src/components/JobHistoryTable.js +78 -0
- nautobot/ui/src/components/Layout.js +53 -0
- nautobot/ui/src/components/LoadingWidget.js +25 -0
- nautobot/ui/src/components/Navbar.js +116 -0
- nautobot/ui/src/components/NotificationPopover.js +27 -0
- nautobot/ui/src/components/ObjectListTable.js +209 -0
- nautobot/ui/src/components/ReferenceDataTag.js +35 -0
- nautobot/ui/src/components/RouterButton.js +10 -0
- nautobot/ui/src/components/RouterLink.js +10 -0
- nautobot/ui/src/components/SidebarNav.js +147 -0
- nautobot/ui/src/components/Table.js +48 -0
- nautobot/ui/src/components/TableItem.js +71 -0
- nautobot/ui/src/components/__tests__/AppFullWidthComponents.test.js +16 -0
- nautobot/ui/src/components/__tests__/AppTab.test.js +21 -0
- nautobot/ui/src/components/__tests__/Apps.test.js +14 -0
- nautobot/ui/src/components/__tests__/Layout.test.js +33 -0
- nautobot/ui/src/components/__tests__/Table.test.js +36 -0
- nautobot/ui/src/components/__tests__/TableItem.test.js +37 -0
- nautobot/ui/src/components/__tests__/paginator.test.js +43 -0
- nautobot/ui/src/components/__tests__/paginator_form.test.js +13 -0
- nautobot/ui/src/components/pagination.js +93 -0
- nautobot/ui/src/components/paginator.js +79 -0
- nautobot/ui/src/components/paginator_form.js +43 -0
- nautobot/ui/src/components/usePagination.js +57 -0
- nautobot/ui/src/constants/apiPath.js +10 -0
- nautobot/ui/src/constants/icons.js +15 -0
- nautobot/ui/src/constants/size.js +15 -0
- nautobot/ui/src/index.js +65 -0
- nautobot/ui/src/reportWebVitals.js +15 -0
- nautobot/ui/src/router.js +77 -0
- nautobot/ui/src/utils/api.js +131 -0
- nautobot/ui/src/utils/app-import.js +15 -0
- nautobot/ui/src/utils/color.js +15 -0
- nautobot/ui/src/utils/date.js +14 -0
- nautobot/ui/src/utils/index.js +15 -0
- nautobot/ui/src/utils/navigation.js +32 -0
- nautobot/ui/src/utils/session.js +64 -0
- nautobot/ui/src/utils/store.js +242 -0
- nautobot/ui/src/utils/string.js +6 -0
- nautobot/ui/src/utils/url.js +4 -0
- nautobot/ui/src/views/Home.js +138 -0
- nautobot/ui/src/views/InstalledApps.js +80 -0
- nautobot/ui/src/views/Login.js +48 -0
- nautobot/ui/src/views/Logout.js +20 -0
- nautobot/ui/src/views/__tests__/BSCreateViewTemplate.test.js +11 -0
- nautobot/ui/src/views/__tests__/BSListViewTemplate.test.js +107 -0
- nautobot/ui/src/views/__tests__/Login.test.js +15 -0
- nautobot/ui/src/views/generic/GenericView.js +142 -0
- nautobot/ui/src/views/generic/ObjectCreate.js +96 -0
- nautobot/ui/src/views/generic/ObjectList.js +127 -0
- nautobot/ui/src/views/generic/ObjectRetrieve.js +551 -0
- nautobot/users/admin.py +1 -1
- nautobot/users/api/serializers.py +51 -61
- nautobot/users/api/urls.py +1 -1
- nautobot/users/api/views.py +53 -2
- nautobot/users/tests/test_api.py +110 -25
- nautobot/virtualization/api/serializers.py +18 -130
- nautobot/virtualization/api/urls.py +1 -1
- nautobot/virtualization/api/views.py +1 -22
- nautobot/virtualization/forms.py +13 -99
- nautobot/virtualization/migrations/0012_alter_virtualmachine_role_add_new_role.py +1 -1
- nautobot/virtualization/migrations/0013_migrate_virtualmachine_role_data.py +18 -11
- nautobot/virtualization/migrations/0015_rename_foreignkey_fields.py +1 -1
- nautobot/virtualization/migrations/0018_related_name_changes.py +1 -1
- nautobot/virtualization/migrations/0021_tagsfield_and_vminterface_to_primarymodel.py +39 -0
- nautobot/virtualization/migrations/0022_vminterface_timestamps_data_migration.py +17 -0
- nautobot/virtualization/migrations/{0021_ipam__namespaces.py → 0023_ipam__namespaces.py} +2 -2
- nautobot/virtualization/migrations/0024_fixup_null_statuses.py +25 -0
- nautobot/virtualization/migrations/0025_status_nonnullable.py +29 -0
- nautobot/virtualization/models.py +31 -123
- nautobot/virtualization/navigation.py +18 -99
- nautobot/virtualization/templates/virtualization/virtualmachine.html +2 -1
- nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +6 -0
- nautobot/virtualization/tests/test_api.py +25 -26
- nautobot/virtualization/tests/test_filters.py +41 -15
- nautobot/virtualization/tests/test_models.py +31 -7
- nautobot/virtualization/tests/test_views.py +42 -25
- nautobot/virtualization/views.py +7 -6
- {nautobot-2.0.0a3.dist-info → nautobot-2.0.0b1.dist-info}/METADATA +3 -7
- {nautobot-2.0.0a3.dist-info → nautobot-2.0.0b1.dist-info}/RECORD +744 -602
- {nautobot-2.0.0a3.dist-info → nautobot-2.0.0b1.dist-info}/WHEEL +1 -1
- nautobot/circuits/api/nested_serializers.py +0 -69
- nautobot/core/templates/plugin_template/navigation.py-tpl +0 -22
- nautobot/dcim/api/nested_serializers.py +0 -356
- nautobot/dcim/templates/dcim/device_import.html +0 -5
- nautobot/dcim/templates/dcim/device_import_child.html +0 -5
- nautobot/dcim/templates/dcim/inc/device_import_header.html +0 -4
- nautobot/extras/api/nested_serializers.py +0 -353
- nautobot/extras/migrations/0064_configcontext_data_migrations.py +0 -41
- nautobot/extras/migrations/0071_job__unique_name_data_migration.py +0 -46
- nautobot/extras/reports.py +0 -60
- nautobot/extras/scripts.py +0 -72
- nautobot/extras/tests/example_jobs/script_variables.py +0 -67
- nautobot/extras/tests/example_jobs/test_duplicate_name2.py +0 -5
- nautobot/extras/tests/example_jobs/test_fail.py +0 -16
- nautobot/extras/tests/example_jobs/test_file_upload_pass.py +0 -20
- nautobot/extras/tests/example_jobs/test_ipaddress_vars.py +0 -52
- nautobot/extras/tests/example_jobs/test_job_button_receiver.py +0 -21
- nautobot/extras/tests/example_jobs/test_job_hook_receiver.py +0 -20
- nautobot/extras/tests/example_jobs/test_location_with_custom_field.py +0 -35
- nautobot/extras/tests/example_jobs/test_log_redaction.py +0 -14
- nautobot/extras/tests/example_jobs/test_modify_db.py +0 -18
- nautobot/extras/tests/example_jobs/test_object_var_optional.py +0 -14
- nautobot/extras/tests/example_jobs/test_object_var_required.py +0 -14
- nautobot/extras/tests/example_jobs/test_object_vars.py +0 -29
- nautobot/extras/tests/example_jobs/test_pass.py +0 -19
- nautobot/extras/tests/example_jobs/test_read_only_fail.py +0 -24
- nautobot/extras/tests/example_jobs/test_read_only_no_commit_field.py +0 -10
- nautobot/extras/tests/example_jobs/test_read_only_pass.py +0 -22
- nautobot/ipam/api/nested_serializers.py +0 -159
- nautobot/ipam/migrations/0029_ipam__prefix__add_parent.py +0 -31
- nautobot/ipam/migrations/0030_ipam__prefix__data_migration.py +0 -13
- nautobot/ipam/migrations/0031_ipam__ipaddress__add_parent.py +0 -41
- nautobot/ipam/migrations/0032_ipam__ipaddress__data_migration.py +0 -11
- nautobot/tenancy/api/nested_serializers.py +0 -31
- nautobot/users/api/nested_serializers.py +0 -67
- nautobot/virtualization/api/nested_serializers.py +0 -65
- /nautobot/extras/{tests/example_jobs → test_jobs}/__init__.py +0 -0
- /nautobot/{dcim/models/sites.py → ipam/management/__init__.py} +0 -0
- {nautobot-2.0.0a3.dist-info → nautobot-2.0.0b1.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.0.0a3.dist-info → nautobot-2.0.0b1.dist-info}/entry_points.txt +0 -0
|
@@ -2,192 +2,42 @@
|
|
|
2
2
|
|
|
3
3
|
## Dependency Changes
|
|
4
4
|
|
|
5
|
+
- Nautobot no longer uses or supports the use of `django-cryptography`.
|
|
5
6
|
- Nautobot no longer uses or supports the use of `django-mptt`.
|
|
6
7
|
- Nautobot no longer uses or supports the use of `django-rq`.
|
|
7
8
|
|
|
8
9
|
## Database (ORM) Changes
|
|
9
10
|
|
|
10
|
-
### Database Behavior Changes
|
|
11
|
+
### Database Field Behavior Changes
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
| ScheduledJob | `queue` | No longer accepts `null` values, use `""` instead |
|
|
20
|
-
| Webhook | `ca_file_path` | No longer accepts `null` values, use `""` instead |
|
|
13
|
+
Most of the database field behavior changes in Nautobot 2.0 fall into the following general categories:
|
|
14
|
+
|
|
15
|
+
1. The `created` field on models has changed from a date only ("2023-04-06") to being a date/time ("2023-04-06T19:57:45.320232Z")
|
|
16
|
+
2. Various models that had a required `site` field and an optional `location` field now have a required `location` field.
|
|
17
|
+
|
|
18
|
+
??? info "Full table of database field behavior changes"
|
|
19
|
+
{data-table installation/tables/v2-database-behavior-changes.yaml}
|
|
21
20
|
|
|
22
21
|
### Renamed Database Fields
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
| | `poweroutlet` | `power_outlets` |
|
|
32
|
-
| | `powerport` | `power_ports` |
|
|
33
|
-
| Circuit | `termination_a` | `circuit_termination_a` |
|
|
34
|
-
| | `termination_z` | `circuit_termination_z` |
|
|
35
|
-
| | `terminations` | `circuit_terminations` |
|
|
36
|
-
| | `type` | `circuit_type` |
|
|
37
|
-
| Cluster | `group` | `cluster_group` |
|
|
38
|
-
| | `type` | `cluster_type` |
|
|
39
|
-
| ConfigContextSchema | `schema` | `config_context_schema` |
|
|
40
|
-
| | `device_set` | `devices` |
|
|
41
|
-
| | `virtualmachine_set` | `virtual_machines` |
|
|
42
|
-
| ContentType | `computedfield_set` | `computed_fields` |
|
|
43
|
-
| | `configcontext_set` | `config_contexts` |
|
|
44
|
-
| | `configcontextschema_set` | `config_context_schemas` |
|
|
45
|
-
| | `customlink_set` | `custom_links` |
|
|
46
|
-
| | `dcim_device_related` | `devices` |
|
|
47
|
-
| | `dynamicgroup_set` | `dynamic_groups` |
|
|
48
|
-
| | `exporttemplate_set` | `export_templates` |
|
|
49
|
-
| | `imageattachment_set` | `image_attachments` |
|
|
50
|
-
| | `note_set` | `notes` |
|
|
51
|
-
| | `virtualization_virtualmachine_related` | `virtual_machines` |
|
|
52
|
-
| CustomFieldChoice | `field` | `custom_field` |
|
|
53
|
-
| CustomField | `choices` | `custom_field_choices` |
|
|
54
|
-
| | `slug` | `key` |
|
|
55
|
-
| Device | `consoleports` | `console_ports` |
|
|
56
|
-
| | `consoleserverports` | `console_server_ports` |
|
|
57
|
-
| | `devicebays` | `device_bays` |
|
|
58
|
-
| | `device_role` | `role` |
|
|
59
|
-
| | `frontports` | `front_ports` |
|
|
60
|
-
| | `inventoryitems` | `inventory_items` |
|
|
61
|
-
| | `local_context_data` | `local_config_context_data` |
|
|
62
|
-
| | `local_context_data_owner_content_type` | `local_config_context_data_owner_content_type` |
|
|
63
|
-
| | `local_context_data_owner_object_id` | `local_config_context_data_owner_object_id` |
|
|
64
|
-
| | `local_context_schema` | `local_config_context_schema` |
|
|
65
|
-
| | `poweroutlets` | `power_outlets` |
|
|
66
|
-
| | `powerports` | `power_ports` |
|
|
67
|
-
| | `rearports` | `rear_ports` |
|
|
68
|
-
| DeviceRedundancyGroup | `members` | `devices` |
|
|
69
|
-
| DeviceType | `consoleporttemplates` | `console_port_templates` |
|
|
70
|
-
| | `consoleserverporttemplates` | `console_server_port_templates` |
|
|
71
|
-
| | `devicebaytemplates` | `device_bay_templates` |
|
|
72
|
-
| | `frontporttemplates` | `front_port_templates` |
|
|
73
|
-
| | `interfacetemplates` | `interface_templates` |
|
|
74
|
-
| | `instances` | `devices` |
|
|
75
|
-
| | `poweroutlettemplates` | `power_outlet_templates` |
|
|
76
|
-
| | `powerporttemplates` | `power_port_templates` |
|
|
77
|
-
| | `rearporttemplates` | `rear_port_templates` |
|
|
78
|
-
| FrontPortTemplate | `rear_port` | `rear_port_template` |
|
|
79
|
-
| InventoryItem | `child_items` | `children` |
|
|
80
|
-
| | `level` | `tree_depth` |
|
|
81
|
-
| Job | `job_hook` | `job_hooks` |
|
|
82
|
-
| | `results` | `job_results` |
|
|
83
|
-
| JobResult | `logs` | `job_log_entries` |
|
|
84
|
-
| | `schedule` | `scheduled_job` |
|
|
85
|
-
| Location | `powerpanels` | `power_panels` |
|
|
86
|
-
| PowerOutletTemplate | `power_port` | `power_port_template` |
|
|
87
|
-
| PowerPanel | `powerfeeds` | `power_feeds` |
|
|
88
|
-
| PowerPort | `poweroutlets` | `power_outlets` |
|
|
89
|
-
| PowerPortTemplate | `poweroutlet_templates` | `power_outlet_templates` |
|
|
90
|
-
| Rack | `group` | `rack_group` |
|
|
91
|
-
| | `powerfeed_set` | `power_feeds` |
|
|
92
|
-
| | `reservations` | `rack_reservations` |
|
|
93
|
-
| RackGroup | `level` | `tree_depth` |
|
|
94
|
-
| | `powerpanel_set` | `power_panels` |
|
|
95
|
-
| RearPort | `frontports` | `front_ports` |
|
|
96
|
-
| RearPortTemplate | `frontport_templates` | `front_port_templates` |
|
|
97
|
-
| Region | `level` | `tree_depth` |
|
|
98
|
-
| Relationship | `associations` | `relationship_associations` |
|
|
99
|
-
| Secret | `groups` | `secrets_groups` |
|
|
100
|
-
| | `secretsgroupassociation_set` | `secrets_group_associations` |
|
|
101
|
-
| RIR | `aggregates` | [`prefixes`](#aggregate-migrated-to-prefix) |
|
|
102
|
-
| SecretsGroup | `device_set` | `devices` |
|
|
103
|
-
| | `deviceredundancygroup_set` | `device_redundancy_groups` |
|
|
104
|
-
| | `gitrepository_set` | `git_repositories` |
|
|
105
|
-
| | `secretsgroupassociation_set` | `secrets_group_associations` |
|
|
106
|
-
| SecretsGroupAssociation | `group` | `secrets_group` |
|
|
107
|
-
| Service | `ipaddresses` | `ip_addresses` |
|
|
108
|
-
| Status | `circuits_circuit_related` | `circuits` |
|
|
109
|
-
| | `dcim_cable_related` | `cables` |
|
|
110
|
-
| | `dcim_device_related` | `devices` |
|
|
111
|
-
| | `dcim_deviceredundancygroup_related` | `device_redundancy_groups` |
|
|
112
|
-
| | `dcim_interface_related` | `interfaces` |
|
|
113
|
-
| | `dcim_location_related` | `locations` |
|
|
114
|
-
| | `dcim_powerfeed_related` | `power_feeds` |
|
|
115
|
-
| | `dcim_rack_related` | `racks` |
|
|
116
|
-
| | `ipam_ipaddress_related` | `ip_addresses` |
|
|
117
|
-
| | `ipam_prefix_related` | `prefixes` |
|
|
118
|
-
| | `ipam_vlan_related` | `vlans` |
|
|
119
|
-
| | `virtualization_virtualmachine_related` | `virtual_machines` |
|
|
120
|
-
| | `virtualization_vminterface_related` | `vm_interfaces` |
|
|
121
|
-
| Tenant | `group` | `tenant_group` |
|
|
122
|
-
| | `rackreservations` | `rack_reservations` |
|
|
123
|
-
| TenantGroup | `level` | `tree_depth` |
|
|
124
|
-
| User | `changes` | `object_changes` |
|
|
125
|
-
| | `note` | `notes` |
|
|
126
|
-
| | `rackreservation_set` | `rack_reservations` |
|
|
127
|
-
| VirtualMachine | `local_context_data` | `local_config_context_data` |
|
|
128
|
-
| | `local_context_data_owner_content_type` | `local_config_context_data_owner_content_type` |
|
|
129
|
-
| | `local_context_data_owner_object_id` | `local_config_context_data_owner_object_id` |
|
|
130
|
-
| | `local_context_schema` | `local_config_context_schema` |
|
|
131
|
-
| VLAN | `group` | `vlan_group` |
|
|
23
|
+
Most renamed database fields in Nautobot 2.0 fall into the following general categories:
|
|
24
|
+
|
|
25
|
+
1. Renaming of foreign keys and reverse relations to more consistently and specifically match the related model name or plural name (for example, `Circuit.terminations` to `Circuit.circuit_terminations`, `Rack.group` to `Rack.rack_group`)
|
|
26
|
+
2. Renaming of tree model fields for consistency and due to the change from `django-mptt` to `django-tree-queries` (for example, `InventoryItem.child_items` to `InventoryItem.children` and `InventoryItem.level` to `InventoryItem.tree_depth`)
|
|
27
|
+
|
|
28
|
+
??? info "Full table of renamed database fields"
|
|
29
|
+
{data-table installation/tables/v2-database-renamed-fields.yaml}
|
|
132
30
|
|
|
133
31
|
### Removed Database Fields
|
|
134
32
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
| | `regions` |
|
|
144
|
-
| CustomLink | `slug` |
|
|
145
|
-
| | `regions` |
|
|
146
|
-
| CustomField | `name` |
|
|
147
|
-
| Device | `site` |
|
|
148
|
-
| DeviceRedundancyGroup | `slug` |
|
|
149
|
-
| DynamicGroup | `slug` |
|
|
150
|
-
| GitRepository | `_token` |
|
|
151
|
-
| | `username` |
|
|
152
|
-
| GraphQLQuery | `slug` |
|
|
153
|
-
| | `username` |
|
|
154
|
-
| InventoryItem | `lft` |
|
|
155
|
-
| | `rght` |
|
|
156
|
-
| | `tree_id` |
|
|
157
|
-
| IPAddress | `vrf` |
|
|
158
|
-
| JobHook | `slug` |
|
|
159
|
-
| Location | `site` |
|
|
160
|
-
| Manufacturer | `slug` |
|
|
161
|
-
| Platform | `slug` |
|
|
162
|
-
| Provider | `slug` |
|
|
163
|
-
| PowerFeed | `site` |
|
|
164
|
-
| PowerPanel | `site` |
|
|
165
|
-
| Prefix | `is_pool` |
|
|
166
|
-
| | `site` |
|
|
167
|
-
| Rack | `site` |
|
|
168
|
-
| RackGroup | `lft` |
|
|
169
|
-
| | `rght` |
|
|
170
|
-
| | `tree_id` |
|
|
171
|
-
| Region | `lft` |
|
|
172
|
-
| | `rght` |
|
|
173
|
-
| | `tree_id` |
|
|
174
|
-
| RIR | `slug` |
|
|
175
|
-
| RelationshipAssociation | `slug` |
|
|
176
|
-
| Role | `slug` |
|
|
177
|
-
| RouteTarget | `slug` |
|
|
178
|
-
| Secret | `slug` |
|
|
179
|
-
| SecretsGroup | `slug` |
|
|
180
|
-
| SecretsGroupAssociation | `slug` |
|
|
181
|
-
| Status | `slug` |
|
|
182
|
-
| Tenant | `slug` |
|
|
183
|
-
| TenantGroup | `lft` |
|
|
184
|
-
| | `rght` |
|
|
185
|
-
| | `slug` |
|
|
186
|
-
| | `tree_id` |
|
|
187
|
-
| VLAN | `site` |
|
|
188
|
-
| VLANGroup | `site` |
|
|
189
|
-
| Webhook | `slug` |
|
|
190
|
-
| VRF | `enforce_unique` |
|
|
33
|
+
Most removed database fields in Nautobot 2.0 fall into the following general categories:
|
|
34
|
+
|
|
35
|
+
1. Removal of references to removed models such as `Site` and `Region`
|
|
36
|
+
2. Removal of `slug` fields in preference to the use of autogenerated natural-key slugs.
|
|
37
|
+
3. Removal of `django-mptt` internal fields (`lft`, `rght`, `tree_id`)
|
|
38
|
+
|
|
39
|
+
??? info "Full table of removed database fields"
|
|
40
|
+
{data-table installation/tables/v2-database-removed-fields.yaml}
|
|
191
41
|
|
|
192
42
|
### Replaced Models
|
|
193
43
|
|
|
@@ -253,113 +103,34 @@ The `ipam.IPAddress` model has been modified to have a foreign key to `ipam.Pref
|
|
|
253
103
|
|
|
254
104
|
### API Behavior Changes
|
|
255
105
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
| Interface | `status` | Now uses a nested Status serializer, rather than `{"value": "<slug>", "label": "<name>"}` |
|
|
265
|
-
| IPAddress | `role` | `/ipam/ip-addresses/` endpoint now uses role nested serializer for the role field, rather than a string. |
|
|
266
|
-
| | `status` | Now uses a nested Status serializer, rather than `{"value": "<slug>", "label": "<name>"}` |
|
|
267
|
-
| Location | `status` | Now uses a nested Status serializer, rather than `{"value": "<slug>", "label": "<name>"}` |
|
|
268
|
-
| PowerFeed | `status` | Now uses a nested Status serializer, rather than `{"value": "<slug>", "label": "<name>"}` |
|
|
269
|
-
| PowerPanel | `location` | Now `location` has changed to a required field on this model Serializer |
|
|
270
|
-
| Prefix | `status` | Now uses a nested Status serializer, rather than `{"value": "<slug>", "label": "<name>"}` |
|
|
271
|
-
| Rack | `location` | Now `location` has changed to a required field on this model Serializer |
|
|
272
|
-
| | `status` | Now uses a nested Status serializer, rather than `{"value": "<slug>", "label": "<name>"}` |
|
|
273
|
-
| RackGroup | `location` | Now `location` has changed to a required field on this model Serializer |
|
|
274
|
-
| | `rack_count` | Now only counts Racks directly belonging to this RackGroup, not those belonging to its descendants. |
|
|
275
|
-
| Region | `site_count` | Now only counts Sites directly belonging to this Region, not those belonging to its descendants. |
|
|
276
|
-
| Site | `status` | Now uses a nested Status serializer, rather than `{"value": "<slug>", "label": "<name>"}` |
|
|
277
|
-
| TenantGroup | `tenant_count` | Now only counts Tenants directly belonging to this TenantGroup, not those belonging to its descendants. |
|
|
278
|
-
| VirtualMachine | `status` | Now uses a nested Status serializer, rather than `{"value": "<slug>", "label": "<name>"}` |
|
|
279
|
-
| VLAN | `status` | Now uses a nested Status serializer, rather than `{"value": "<slug>", "label": "<name>"}` |
|
|
280
|
-
| VMInterface | `status` | Now uses a nested Status serializer, rather than `{"value": "<slug>", "label": "<name>"}` |
|
|
106
|
+
Most of the API behavior changes in Nautobot 2.0 fall into the following general categories:
|
|
107
|
+
|
|
108
|
+
1. The `created` field on most models has changed from a date only ("2023-04-06") to being a date/time ("2023-04-06T19:57:45.320232Z")
|
|
109
|
+
2. The `status` fields on various models has changed from a pseudo-enum value (containing a "value" and a "label") to referencing the related Status object in full, similar to other foreign-key fields.
|
|
110
|
+
3. Various models that had a required `site` field and an optional `location` field now have a required `location` field.
|
|
111
|
+
|
|
112
|
+
??? info "Full table of API behavior changes"
|
|
113
|
+
{data-table installation/tables/v2-api-behavior-changes.yaml}
|
|
281
114
|
|
|
282
115
|
### Renamed Serializer Fields
|
|
283
116
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
| | `type` | `cluster_type` |
|
|
292
|
-
| CustomField | `slug` | `key` |
|
|
293
|
-
| CustomFieldChoice | `field` | `custom_field` |
|
|
294
|
-
| Device | `device_role` | `role` |
|
|
295
|
-
| | `local_context_data` | `local_config_context_data` |
|
|
296
|
-
| | `local_context_schema` | `local_config_context_schema` |
|
|
297
|
-
| FrontPortTemplate | `rear_port` | `rear_port_template` |
|
|
298
|
-
| Interface | `count_ipaddresses` | `ip_address_count` |
|
|
299
|
-
| IPAddress | `family` | `ip_version` |
|
|
300
|
-
| InventoryItem | `_depth` | `tree_depth` |
|
|
301
|
-
| Location | `virtualmachine_count` | `virtual_machine_count` |
|
|
302
|
-
| Manufacturer | `devicetype_count` | `device_type_count` |
|
|
303
|
-
| | `inventoryitem_count` | `inventory_item_count` |
|
|
304
|
-
| Platform | `virtualmachine_count` | `virtual_machine_count` |
|
|
305
|
-
| Prefix | `family` | `ip_version` |
|
|
306
|
-
| PowerOutletTemplate | `power_port` | `power_port_template` |
|
|
307
|
-
| PowerPanel | `powerfeed_count` | `power_feed_count` |
|
|
308
|
-
| Rack | `group` | `rack_group` |
|
|
309
|
-
| | `powerfeed_count` | `power_feed_count` |
|
|
310
|
-
| JobResult | `schedule` | `scheduled_job` |
|
|
311
|
-
| RackGroup | `_depth` | `tree_depth` |
|
|
312
|
-
| Region | `_depth` | `tree_depth` |
|
|
313
|
-
| SecretsGroupAssociation | `group` | `secrets_group` |
|
|
314
|
-
| Service | `ipaddresses` | `ip_addresses` |
|
|
315
|
-
| Tenant | `group` | `tenant_group` |
|
|
316
|
-
| TenantGroup | `_depth` | `tree_depth` |
|
|
317
|
-
| VirtualMachine | `local_context_data` | `local_config_context_data` |
|
|
318
|
-
| | `local_context_schema` | `local_config_context_schema` |
|
|
319
|
-
| VLAN | `group` | `vlan_group` |
|
|
117
|
+
Most renamed API fields in Nautobot 2.0 fall into the following general categories:
|
|
118
|
+
|
|
119
|
+
1. Renaming of foreign keys and reverse relations to more consistently and specifically match the related model name or plural name (for example, `Circuit.type` to `Circuit.circuit_type`, `Interface.count_ipaddresses` to `Interface.ip_address_count`)
|
|
120
|
+
2. Renaming of tree model fields for consistency and due to the change from `django-mptt` to `django-tree-queries` (for example, `InventoryItem._depth` to `InventoryItem.tree_depth`)
|
|
121
|
+
|
|
122
|
+
??? info "Full table of renamed API fields"
|
|
123
|
+
{data-table installation/tables/v2-api-renamed-fields.yaml}
|
|
320
124
|
|
|
321
125
|
### Removed Serializer Fields
|
|
322
126
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
| | `sites` | `Site` and `Region` models are replaced by `Location` |
|
|
331
|
-
| `/dcim/device-redundancy-groups/` | `slug` | `slug` field no longer supported |
|
|
332
|
-
| `/dcim/devices/` | `site` | `Site` and `Region` models are replaced by `Location` |
|
|
333
|
-
| `/dcim/locations/` | `site` | `Site` and `Region` models are replaced by `Location` |
|
|
334
|
-
| `/dcim/manufacturers/` | `slug` | `slug` field no longer supported |
|
|
335
|
-
| `/dcim/platforms/` | `slug` | `slug` field no longer supported |
|
|
336
|
-
| `/dcim/power-feeds/` | `site` | `Site` and `Region` models are replaced by `Location` |
|
|
337
|
-
| `/dcim/power-panels/` | `site` | `Site` and `Region` models are replaced by `Location` |
|
|
338
|
-
| `/dcim/racks/` | `site` | `Site` and `Region` models are replaced by `Location` |
|
|
339
|
-
| `/dcim/rack-groups/` | `site` | `Site` and `Region` models are replaced by `Location` |
|
|
340
|
-
| `/extras/custom-links/` | `slug` | `slug` field no longer supported |
|
|
341
|
-
| `/extras/dynamic-groups/` | `slug` | `slug` field no longer supported |
|
|
342
|
-
| `/extras/graphql-queries/` | `slug` | `slug` field no longer supported |
|
|
343
|
-
| `/extras/job-hooks/` | `slug` | `slug` field no longer supported |
|
|
344
|
-
| `/extras/relationship-associations/` | `slug` | `slug` field no longer supported |
|
|
345
|
-
| `/extras/roles/` | `slug` | `slug` field no longer supported |
|
|
346
|
-
| `/extras/secrets/` | `slug` | `slug` field no longer supported |
|
|
347
|
-
| `/extras/secrets-groups/` | `slug` | `slug` field no longer supported |
|
|
348
|
-
| `/extras/statuses/` | `slug` | `slug` field no longer supported |
|
|
349
|
-
| `/extras/webhooks/` | `slug` | `slug` field no longer supported |
|
|
350
|
-
| `/ipam/prefixes/` | `is_pool` | Functionality replaced by `type` field |
|
|
351
|
-
| | `site` | `Site` and `Region` models are replaced by `Location` |
|
|
352
|
-
| `/ipam/ip-addresses/` | `vrf` | VRFs are now inherited from parent `Prefix` |
|
|
353
|
-
| `/ipam/rirs/` | `slug` | `slug` field no longer supported |
|
|
354
|
-
| `/ipam/route-targets/` | `slug` | `slug` field no longer supported |
|
|
355
|
-
| `/ipam/vlans/` | `site` | `Site` and `Region` models are replaced by `Location` |
|
|
356
|
-
| `/ipam/vlangroups/` | `site` | `Site` and `Region` models are replaced by `Location` |
|
|
357
|
-
| `/ipam/vrfs/` | `enforce_unique` | VRFs are no longer a boundary of IP uniqueness |
|
|
358
|
-
| `/virtualization/clusters/` | `site` | `Site` and `Region` models are replaced by `Location` |
|
|
359
|
-
| `/tenancy/tenants/` | `slug` | `slug` field no longer supported |
|
|
360
|
-
| `/tenancy/tenant-groups/` | `slug` | `slug` field no longer supported |
|
|
361
|
-
| `/virtualization/cluster-groups/` | `slug` | `slug` field no longer supported |
|
|
362
|
-
| `/virtualization/cluster-types/` | `slug` | `slug` field no longer supported |
|
|
127
|
+
Most removed database fields in Nautobot 2.0 fall into the following general categories:
|
|
128
|
+
|
|
129
|
+
1. Removal of references to removed models such as `Site` and `Region`
|
|
130
|
+
2. Removal of `slug` fields in preference to the use of autogenerated natural-key slugs.
|
|
131
|
+
|
|
132
|
+
??? info "Full table of removed API fields"
|
|
133
|
+
{data-table installation/tables/v2-api-removed-fields.yaml}
|
|
363
134
|
|
|
364
135
|
### Removed 1.X Version Endpoints and Serializer Representations
|
|
365
136
|
|
|
@@ -377,504 +148,97 @@ These endpoints `/ipam/roles/`, `/dcim/rack-roles/` and `/dcim/device-roles/` ar
|
|
|
377
148
|
| `/dcim/rack-roles/` | `/extras/roles/` |
|
|
378
149
|
| `/ipam/roles/` | `/extras/roles/` |
|
|
379
150
|
|
|
151
|
+
### API Query Parameters Changes
|
|
152
|
+
|
|
153
|
+
Nautobot 2.0 removes the `?brief` query parameter and adds support for the `?depth` query parameter. As a result, the ability to specify `brief_mode` in `DynamicModelChoiceField`, `DynamicModelMultipleChoiceField`, and `MultiMatchModelMultipleChoiceField` has also been removed. For every occurrence of the aforementioned fields where you have `brief_mode` set to `True/False` (e.g. `brief_mode=True`), please remove the statement, leaving other occurrences of the fields where you do not have `brief_mode` specified as they are.
|
|
154
|
+
Please see the [documentation on the `?depth` query parameter](../rest-api/overview.md/#depth-query-parameter) for more information.
|
|
155
|
+
|
|
380
156
|
## UI, GraphQL, and REST API Filter Changes
|
|
381
157
|
|
|
158
|
+
### Removed Changelog URL from View Context
|
|
159
|
+
|
|
160
|
+
`changelog_url` is no longer provided in the `ObjectView` context. To get a model instance's changelog URL, you can retrieve it from the instance itself if it supports it: `model_instance.get_changelog_url()`.
|
|
161
|
+
|
|
382
162
|
### Renamed Filter Fields
|
|
383
163
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
| Device | `cluster_id` | `cluster` | `/dcim/devices/?cluster=<uuid/slug>` |
|
|
394
|
-
| | `device_type_id` | `device_type` | `/dcim/devices/?device_type=<uuid/slug>` |
|
|
395
|
-
| | `local_context_data` | `local_config_context_data` | `/dcim/devices/?local_config_context_data=True/False` |
|
|
396
|
-
| | `local_context_schema_id` | `local_config_context_schema_id` | `/dcim/devices/?local_config_context_schema_id=<uuid>` |
|
|
397
|
-
| | `local_context_schema` | `local_config_context_schema` | `/dcim/devices/?local_config_context_schema=<slug>` |
|
|
398
|
-
| | `rack_group_id` | `rack_group` | `/dcim/devices/?rack_group=<uuid/slug>` |
|
|
399
|
-
| | `rack_id` | `rack` | `/dcim/devices/?rack=<uuid/slug>` |
|
|
400
|
-
| | `tag` | `tags` | `/dcim/devices/?tags=<uuid/slug>` |
|
|
401
|
-
| | `virtual_chassis_id` | `virtual_chassis` | `/dcim/devices/?virtual_chassis=<uuid/slug>` |
|
|
402
|
-
| DeviceBay | `tag` | `tags` | `/dcim/device-bays/?tags=<uuid/slug>` |
|
|
403
|
-
| DeviceRedundancyGroup | `tag` | `tags` | `/dcim/device-redundancy-groups/?tag=<uuid/slug>` |
|
|
404
|
-
| DeviceType | `has_instances` | `has_devices` | `/dcim/device-types/?has_devices=True/False` |
|
|
405
|
-
| | `instances` | `devices` | `/dcim/device-types/?devices=<uuid>` |
|
|
406
|
-
| | `tag` | `tags` | `/dcim/device-types/?tags=<uuid/slug>` |
|
|
407
|
-
| FrontPort | `cabled` | `has_cable` | `/dcim/front-ports/?has_cable=True/False` |
|
|
408
|
-
| | `tag` | `tags` | `/dcim/front-ports/?tags=<uuid/slug>` |
|
|
409
|
-
| GitRepository | `tag` | `tags` | `/extras/git-repositories/?tags=<uuid/slug>` |
|
|
410
|
-
| Interface | `cabled` | `has_cable` | `/dcim/interfaces/?has_cable=True/False` |
|
|
411
|
-
| InventoryItem | `child_items` | `children` | `/dcim/inventory-items/?children=<uuid/name>` |
|
|
412
|
-
| | `has_child_items` | `has_children` | `/dcim/inventory-items/?has_children=True/False` |
|
|
413
|
-
| | `tag` | `tags` | `/dcim/inventory-items/?tags=<uuid/slug>` |
|
|
414
|
-
| IPAddress | `family` | `ip_version` | `/ipam/ip-addresses/?ip_version=<4/6>` |
|
|
415
|
-
| | `tag` | `tags` | `/ipam/ip-addresses/?tags=<uuid/slug>` |
|
|
416
|
-
| Job | `tag` | `tags` | `/extras/jobs/?tags=<uuid/slug>` |
|
|
417
|
-
| Location | `tag` | `tags` | `/dcim/locations/?tags=uuid/slug>` |
|
|
418
|
-
| ObjectPermission | `group` | `groups` | `/users/permissions/?groups=<slug>` |
|
|
419
|
-
| | `group_id` | `groups_id` | `/users/permissions/?groups_id=<id>` |
|
|
420
|
-
| | `user` | `users` | `/users/permissions/?users=<uuid/username>` |
|
|
421
|
-
| PowerFeed | `cabled` | `has_cable` | `/dcim/power-feeds/?has_cable=True/False` |
|
|
422
|
-
| | `tag` | `tags` | `/dcim/power-feeds/?tags=<uuid/slug>` |
|
|
423
|
-
| PowerOutlet | `cabled` | `has_cable` | `/dcim/power-outlets/?has_cable=True/False` |
|
|
424
|
-
| PowerPanel | `tag` | `tags` | `/dcim/power-panels/?tags=<uuid/slug>` |
|
|
425
|
-
| PowerPort | `cabled` | `has_cable` | `/dcim/power-ports/?has_cable=True/False` |
|
|
426
|
-
| Prefix | `family` | `ip_version` | `/ipam/prefixes/?ip_version=<4/6>` |
|
|
427
|
-
| | `is_pool` | `type` | `/ipam/prefixes/?type=<container/network/pool>` |
|
|
428
|
-
| | `tag` | `tags` | `/ipam/prefixes/?tags=<uuid/slug>` |
|
|
429
|
-
| Provider | `tag` | `tags` | `/circuits/provider/?tags=<uuid/slug>` |
|
|
430
|
-
| ProviderNetwork | `tag` | `tags` | `/circuits/provider-networks/?tags=<uuid/slug>` |
|
|
431
|
-
| Rack | `group` | `rack_group` | `/dcim/racks/?rack_group=<uuid/slug>` |
|
|
432
|
-
| | `has_reservations` | `has_rack_reservations` | `/dcim/racks/?has_rack_reservations=True/False` |
|
|
433
|
-
| | `reservations` | `rack_reservations` | `/dcim/racks/?rack_reservations=<uuid>` |
|
|
434
|
-
| | `tag` | `tags` | `/dcim/racks/?tags=<uuid/slug>` |
|
|
435
|
-
| RackReservation | `group` | `rack_group` | `/dcim/rack-reservations/?rack_group=<uuid/slug>` |
|
|
436
|
-
| | `tag` | `tags` | `/dcim/rack-reservations/?tags=<uuid/slug>` |
|
|
437
|
-
| RearPort | `cabled` | `has_cable` | `/dcim/rear-ports/?has_cable=True/False` |
|
|
438
|
-
| | `tag` | `tags` | `/dcim/rear-ports/?tags=<uuid/slug>` |
|
|
439
|
-
| RouteTarget | `tag` | `tags` | `/ipam/route-targets/?tags=<uuid/slug>` |
|
|
440
|
-
| SecretsGroupAssociation | `group` | `secrets_group` | `/extras/secrets-groups-associations/?secrets_group=<uuid/slug>` |
|
|
441
|
-
| Service | `tag` | `tags` | `/ipam/services/?tags=<uuid/slug>` |
|
|
442
|
-
| Site | `tag` | `tags` | `/dcim/sites/?tags=<uuid/slug>` |
|
|
443
|
-
| Tenant | `tag` | `tags` | `/tenancy/tenants/?tags=<uuid/slug>` |
|
|
444
|
-
| User | `changes` | `object_changes` | `/users/users/?object_changes=<id>` |
|
|
445
|
-
| | `has_changes` | `has_object_changes` | `/users/users/?has_object_changes=True/False` |
|
|
446
|
-
| | `group` | `groups` | `/users/users/?groups=<slug>` |
|
|
447
|
-
| | `group_id` | `groups_id` | `/users/users/?groups_id=<id>` |
|
|
448
|
-
| VirtualMachine | `local_context_data` | `local_config_context_data` | `/virtualization/virtual-machines/?local_config_context_data=True/False` |
|
|
449
|
-
| | `local_context_schema_id` | `local_config_context_schema_id` | `/virtualization/virtual-machines/?local_config_context_schema_id=<uuid>` |
|
|
450
|
-
| | `local_context_schema` | `local_config_context_schema` | `/virtualization/virtual-machines/?local_config_context_schema=<slug>` |
|
|
451
|
-
| | `tag` | `tags` | `/virtualization/virtual-machines/?tags=<uuid/slug>` |
|
|
452
|
-
| VLAN | `tag` | `tags` | `/ipam/vlans/?tags=<uuid/slug>` |
|
|
453
|
-
| VMInterface | `tag` | `tags` | `/virtualization/interfaces/?tags=<uuid/slug>` |
|
|
454
|
-
| VRF | `tag` | `tags` | `/ipam/vrfs/?tags=<uuid/slug>` |
|
|
164
|
+
Most renamed filter fields in Nautobot 2.0 fall into the following general categories:
|
|
165
|
+
|
|
166
|
+
1. The `tag` filter is renamed to `tags` on all models supporting Tags.
|
|
167
|
+
2. Renames to match renamed model/serializer fields as described earlier in this document.
|
|
168
|
+
3. Related membership filters are renamed to `has_<related>` throughout, for example `ConsolePort.cabled` is renamed to `ConsolePort.has_cable`.
|
|
169
|
+
4. Most `<related>_id` filters have been merged into the corresponding `<related>` filter (see ["Enhanced Filter Fields"](#enhanced-filter-fields) below).
|
|
170
|
+
|
|
171
|
+
??? info "Full table of renamed filter fields"
|
|
172
|
+
{data-table installation/tables/v2-filters-renamed-fields.yaml}
|
|
455
173
|
|
|
456
174
|
### Enhanced Filter Fields
|
|
457
175
|
|
|
458
|
-
Below is a table documenting [enhanced filter field changes](../release-notes/version-2.0.md#enhanced-filter-fields-2804) in
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
| | `provider` | Enhanced to support primary key UUIDs in addition to names | `/circuits/circuits/?provider=<uuid/name>` |
|
|
466
|
-
| | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/circuits/circuits/?tenant=<uuid/name>` |
|
|
467
|
-
| | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/circuits/circuits/?tenant_group=<uuid/name>` |
|
|
468
|
-
| Cluster | `cluster_group` | Enhanced to support primary key UUIDs in addition to names | `/virtualization/clusters/?cluster_group=<uuid/name>` |
|
|
469
|
-
| | `cluster_type` | Enhanced to support primary key UUIDs in addition to names | `/virtualization/clusters/?cluster_type=<uuid/name>` |
|
|
470
|
-
| | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/virtualization/clusters/?tenant=<uuid/name>` |
|
|
471
|
-
| | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/virtualization/clusters/?tenant_group=<uuid/name>` |
|
|
472
|
-
| ConfigContext | `cluster_group` | Enhanced to support primary key UUIDs in addition to names | `/extras/config-contexts/?cluster_group=<uuid/name>` |
|
|
473
|
-
| | `device_redundancy_group` | Enhanced to support primary key UUIDs in addition to names | `/extras/config-contexts/?device_redundancy_group=<uuid/name>` |
|
|
474
|
-
| | `platform` | Enhanced to support primary key UUIDs in addition to names | `/extras/config-contexts/?platform=<uuid/name>` |
|
|
475
|
-
| | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/extras/config-contexts/?tenant=<uuid/name>` |
|
|
476
|
-
| | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/extras/config-contexts/?tenant_group=<uuid/name>` |
|
|
477
|
-
| | `dynamic_groups` | Enhanced to support primary key UUIDs in addition to names | `/extras/config-contexts/?dynamic_groups=<uuid/name>` |
|
|
478
|
-
| ConsolePort | `device` | Enhanced to support primary key UUIDs in addition to names | `/dcim/console-ports/?device=<uuid/name>` |
|
|
479
|
-
| ConsoleServerPort | `device` | Enhanced to support primary key UUIDs in addition to names | `/dcim/console-server-ports/?device=<uuid/name>` |
|
|
480
|
-
| Device | `cluster_id` | Enhanced to support primary key UUIDs in addition to slugs | `/dcim/devices/?cluster=<uuid/slug>` |
|
|
481
|
-
| | `device_type_id` | Enhanced to support primary key UUIDs in addition to slugs | `/dcim/devices/?device_type=<uuid/slug>` |
|
|
482
|
-
| | `device_redundancy_group` | Enhanced to support primary key UUIDs in addition to names | `/dcim/devices/?device_redundancy_group=<uuid/name>` |
|
|
483
|
-
| | `manufacturer` | Enhanced to support primary key UUIDs in addition to names | `/dcim/devices/?manufacturer=<uuid/name>` |
|
|
484
|
-
| | `platform` | Enhanced to support primary key UUIDs in addition to names | `/dcim/devices/?platform=<uuid/name>` |
|
|
485
|
-
| | `role` | Enhanced to support primary key UUIDs in addition to names | `/dcim/devices/?role=<uuid/name>` |
|
|
486
|
-
| | `rack_id` | Enhanced to support primary key UUIDs in addition to slugs | `/dcim/devices/?rack=<uuid/slug>` |
|
|
487
|
-
| | `rack_group_id` | Enhanced to support primary key UUIDs in addition to slugs | `/dcim/devices/?rack_group=<uuid/slug>` |
|
|
488
|
-
| | `serial` | Enhanced to permit filtering on multiple values | `/dcim/devices/?serial=<value>&serial=<value>...` |
|
|
489
|
-
| | `secrets_group` | Enhanced to support primary key UUIDs in addition to names | `/dcim/devices/?secrets_group=<uuid/name>` |
|
|
490
|
-
| | `virtual_chassis_id` | Enhanced to support primary key UUIDs in addition to slugs | `/dcim/devices/?virtual_chassis=<uuid/slug>` |
|
|
491
|
-
| DeviceBay | `cable` | Enhanced to support primary key UUIDs in addition to slugs | `/dcim/regions/?parent=<uuid/slug>` |
|
|
492
|
-
| | `device` | Enhanced to support primary key UUIDs in addition to names | `/dcim/device-bays/?device=<uuid/name>` |
|
|
493
|
-
| DeviceType | `manufacturer` | Enhanced to support primary key UUIDs in addition to names | `/dcim/device-types/?manufacturer=<uuid/name>` |
|
|
494
|
-
| DeviceRedundancyGroup | `secrets_group` | Enhanced to support primary key UUIDs in addition to names | `/dcim/device-redundancy-groups/?secrets_group=<uuid/name>` |
|
|
495
|
-
| DynamicGroupMembership | `group` | Enhanced to support primary key UUIDs in addition to names | `/extras/dynamic-froup-membership/?group=<uuid/name>` |
|
|
496
|
-
| | `parent_group` | Enhanced to support primary key UUIDs in addition to names | `/extras/dynamic-froup-membership/?parent_group=<uuid/name>` |
|
|
497
|
-
| FrontPort | `device` | Enhanced to support primary key UUIDs in addition to names | `/dcim/front-ports/?device=<uuid/name>` |
|
|
498
|
-
| GitRepository | `secrets_group` | Enhanced to support primary key UUIDs in addition to names | `/extras/git-repository/?secrets_group=<uuid/name>` |
|
|
499
|
-
| Interface | `device` | Enhanced to support primary key UUIDs in addition to names | `/dcim/interfaces/?device=<uuid/name>` |
|
|
500
|
-
| IPAddress | `rir` | Enhanced to support primary key UUIDs in addition to names | `/ipam/ip-addresses/?rir=<uuid/name>` |
|
|
501
|
-
| | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/ipam/ip-addresses/?tenant=<uuid/name>` |
|
|
502
|
-
| | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/ipam/ip-addresses/?tenant_group=<uuid/name>` |
|
|
503
|
-
| InventoryItem | `device` | Enhanced to support primary key UUIDs in addition to name | `/dcim/inventory-items/?device=<uuid/name>` |
|
|
504
|
-
| | `manufacturer` | Enhanced to support primary key UUIDs in addition to slugs | `/dcim/inventory-items/?manufacturer=<uuid/slug>` |
|
|
505
|
-
| | `serial` | Enhanced to permit filtering on multiple values | `/dcim/inventory-items/?serial=<value>&serial=<value>...` |
|
|
506
|
-
| Manufacturer | `platforms` | Enhanced to support primary key UUIDs in addition to names | `/dcim/manufacturers/?platforms=<uuid/name>` |
|
|
507
|
-
| Platform | `manufacturer` | Enhanced to support primary key UUIDs in addition to names | `/dcim/platforms/?manufacturer=<uuid/name>` |
|
|
508
|
-
| PowerOutlet | `device` | Enhanced to support primary key UUIDs in addition to names | `/dcim/power-outlets/?device=<uuid/name>` |
|
|
509
|
-
| PowerPort | `device` | Enhanced to support primary key UUIDs in addition to names | `/dcim/power-ports/?device=<uuid/name>` |
|
|
510
|
-
| Prefix | `rir` | Enhanced to support primary key UUIDs in addition to names | `/ipam/prefixes/?rir=<uuid/name>` |
|
|
511
|
-
| | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/ipam/prefixes/?tenant=<uuid/name>` |
|
|
512
|
-
| | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/ipam/prefixes/?tenant_group=<uuid/name>` |
|
|
513
|
-
| ProviderNetwork | `provider` | Enhanced to support primary key UUIDs in addition to names | `/circuits/provider-networks/?provider=<uuid/name>` |
|
|
514
|
-
| Rack | `role` | Enhanced to support primary key UUIDs in addition to slugs | `/dcim/racks/?role=<uuid/slug>` |
|
|
515
|
-
| | `serial` | Enhanced to permit filtering on multiple values | `/dcim/racks/?serial=<value>&serial=<value>...` |
|
|
516
|
-
| RackGroup | `parent` | Enhanced to support primary key UUIDs in addition to slugs | `/dcim/rack-groups/?parent=<uuid/slug>` |
|
|
517
|
-
| RackReservation | `user` | Enhanced to support primary key UUIDs in addition to slugs | `/dcim/rack-reservations/?user=<uuid/slug>` |
|
|
518
|
-
| | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/dcim/rack-reservations/?tenant=<uuid/name>` |
|
|
519
|
-
| | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/dcim/rack-reservations/?tenant_group=<uuid/name>` |
|
|
520
|
-
| RearPort | `device` | Enhanced to support primary key UUIDs in addition to names | `/dcim/rear-ports/?device=<uuid/name>` |
|
|
521
|
-
| Region | `parent` | Enhanced to support primary key UUIDs in addition to names | `/dcim/regions/?parent=<uuid/slug>` |
|
|
522
|
-
| RouteTarget | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/ipam/route-targets/?tenant=<uuid/name>` |
|
|
523
|
-
| | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/ipam/route-targets/?tenant_group=<uuid/name>` |
|
|
524
|
-
| SecretsGroupAssociation | `secrets` | Enhanced to support primary key UUIDs in addition to names | `/extras/secrets-group-association/?secrets=<uuid/name>` |
|
|
525
|
-
| | `secrets_group` | Enhanced to support primary key UUIDs in addition to names | `/extras/secrets-group-association/?secrets_group=<uuid/name>` |
|
|
526
|
-
| Tenant | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/tenancy/tenants/?tenant_group=<uuid/name>` |
|
|
527
|
-
| TenantGroup | `parent` | Enhanced to support primary key UUIDs in addition to names | `/tenancy/tenant-groups/?parent=<uuid/name>` |
|
|
528
|
-
| | `children` | Enhanced to support primary key UUIDs in addition to names | `/tenancy/tenant-groups/?children=<uuid/name>` |
|
|
529
|
-
| | `tenants` | Enhanced to support primary key UUIDs in addition to names | `/tenancy/tenant-groups/?tenants=<uuid/name>` |
|
|
530
|
-
| VirtualChassis | `master` | Enhanced to support primary key UUIDs in addition to name | `/dcim/virtual-chassis/?master=<uuid/name>` |
|
|
531
|
-
| | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/dcim/virtual-chassis/?tenant=<uuid/name>` |
|
|
532
|
-
| VirtualMachine | `cluster_group` | Enhanced to support primary key UUIDs in addition to names | `/virtualization/virtual-machines/?cluster_group=<uuid/name>` |
|
|
533
|
-
| | `cluster_type` | Enhanced to support primary key UUIDs in addition to names | `/virtualization/virtual-machines/?cluster_type=<uuid/name>` |
|
|
534
|
-
| | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/virtualization/virtual-machines/?tenant=<uuid/name>` |
|
|
535
|
-
| | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/virtualization/virtual-machines/?tenant_group=<uuid/name>` |
|
|
536
|
-
| | `platform` | Enhanced to support primary key UUIDs in addition to names | `/virtualization/virtual-machines/?platform=<uuid/name>` |
|
|
537
|
-
| VRF | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/ipam/vrfs/?tenant=<uuid/name>` |
|
|
538
|
-
| | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/ipam/vrfs/?tenant_group=<uuid/name>` |
|
|
539
|
-
| VLAN | `available_on_device` | Enhanced to permit filtering on multiple values | `/ipam/vlans/?available_on_device=<uuid>&...` |
|
|
540
|
-
| | `vlan_group` | Enhanced to support primary key UUIDs in addition to slugs | `/ipam/vlans/?vlan_group=<uuid/slug>` |
|
|
541
|
-
| | `tenant` | Enhanced to support primary key UUIDs in addition to names | `/ipam/vlans/?tenant=<uuid/name>` |
|
|
542
|
-
| | `tenant_group` | Enhanced to support primary key UUIDs in addition to names | `/ipam/vlans/?tenant_group=<uuid/name>` |
|
|
176
|
+
Below is a table documenting [enhanced filter field changes](../release-notes/version-2.0.md#enhanced-filter-fields-2804) in Nautobot 2.0. These enhancements mostly fall into the following general categories:
|
|
177
|
+
|
|
178
|
+
1. Many filters are enhanced to permit filtering by UUID _or_ by name.
|
|
179
|
+
2. Filters that previously only supported a single filter value can now filter on multiple values.
|
|
180
|
+
|
|
181
|
+
??? info "Full table of enhanced filter fields"
|
|
182
|
+
{data-table installation/tables/v2-filters-enhanced-fields.yaml}
|
|
543
183
|
|
|
544
184
|
### Corrected Filter Fields
|
|
545
185
|
|
|
546
|
-
Below is a table documenting [corrected filter field changes](../release-notes/version-2.0.md#corrected-filter-fields-2804) in
|
|
186
|
+
Below is a table documenting [corrected filter field changes](../release-notes/version-2.0.md#corrected-filter-fields-2804) in Nautobot 2.0. These corrections mostly involve filters that previously permitted filtering on related membership only (`/api/dcim/devices/?console_ports=True`) and have now been corrected into filters for related membership (`/api/dcim/devices/?has_console_ports=True`) as well as by actual related objects (`/api/dcim/devices/?console_ports=<UUID>`).
|
|
547
187
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
| CustomFieldChoice | `custom_field` | `/extras/custom-field-choices/?custom_field=<uuid/name>` | `/extras/custom-field-choices/?custom_field=<uuid/key>` |
|
|
551
|
-
| Device | `console_ports` | `/dcim/devices/?console_ports=True` | `/dcim/devices/?console_ports=<uuid>` or `?has_console_ports=<True/False>` |
|
|
552
|
-
| | `console_server_ports` | `/dcim/devices/?console_server_ports=True` | `/dcim/devices/?console_server_ports=<uuid>` or `?has_console_server_ports=<True/False>` |
|
|
553
|
-
| | `device_bays` | `/dcim/devices/?device_bays=True` | `/dcim/devices/?device_bays=<uuid>` or `?has_device_bays=<True/False>` |
|
|
554
|
-
| | `front_ports` | `/dcim/devices/?front_ports=True` | `/dcim/devices/?front_ports=<uuid>` or `?has_front_ports=<True/False>` |
|
|
555
|
-
| | `interfaces` | `/dcim/devices/?interfaces=True` | `/dcim/devices/?interfaces=<uuid>` or `?has_interfaces=<True/False>` |
|
|
556
|
-
| | `power_ports` | `/dcim/devices/?power_ports=True` | `/dcim/devices/?power_ports=<uuid>` or `?has_power_ports=<True/False>` |
|
|
557
|
-
| | `power_outlets` | `/dcim/devices/?power_outlets=True` | `/dcim/devices/?power_outlets=<uuid>` or `?has_power_outlets=<True/False>` |
|
|
558
|
-
| | `rear_ports` | `/dcim/devices/?rear_ports=True` | `/dcim/devices/?rear_ports=<uuid>` or `?has_rear_ports=<True/False>` |
|
|
188
|
+
??? info "Full table of corrected filter fields"
|
|
189
|
+
{data-table installation/tables/v2-filters-corrected-fields.yaml}
|
|
559
190
|
|
|
560
191
|
### Removed Filter Fields
|
|
561
192
|
|
|
562
193
|
Below is a table documenting [removed filter field changes](../release-notes/version-2.0.md#removed-filter-fields-2804) in v2.x.
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
| Aggregate | `tenant_group_id` | |
|
|
572
|
-
| Circuit | `provider_id` | |
|
|
573
|
-
| | `provider_network_id` | |
|
|
574
|
-
| | `region` | |
|
|
575
|
-
| | `region_id` | |
|
|
576
|
-
| | `site` | |
|
|
577
|
-
| | `site_id` | |
|
|
578
|
-
| | `tenant_group_id` | |
|
|
579
|
-
| | `type_id` | instead of `/circuits/circuits/?type_id=<uuid>`, use `circuit_type=<uuid>` |
|
|
580
|
-
| CircuitTermination | `circuit_id` | |
|
|
581
|
-
| | `provider_network_id` | |
|
|
582
|
-
| | `region_id` | |
|
|
583
|
-
| | `region` | |
|
|
584
|
-
| | `site` | |
|
|
585
|
-
| | `site_id` | |
|
|
586
|
-
| CircuitType | `slug` | |
|
|
587
|
-
| Cluster | `region` | |
|
|
588
|
-
| | `region_id` | |
|
|
589
|
-
| | `site` | |
|
|
590
|
-
| | `site_id` | |
|
|
591
|
-
| | `tenant_group_id` | |
|
|
592
|
-
| ClusterGroup | `slug` | |
|
|
593
|
-
| ClusterType | `slug` | |
|
|
594
|
-
| ConfigContext | `region` | |
|
|
595
|
-
| | `region_id` | |
|
|
596
|
-
| | `role_id` | |
|
|
597
|
-
| | `site` | |
|
|
598
|
-
| | `site_id` | |
|
|
599
|
-
| ConsolePort | `device_id` | |
|
|
600
|
-
| | `region` | |
|
|
601
|
-
| | `region_id` | |
|
|
602
|
-
| | `site` | |
|
|
603
|
-
| | `site_id` | |
|
|
604
|
-
| ConsoleServerPort | `device_id` | |
|
|
605
|
-
| | `region` | |
|
|
606
|
-
| | `region_id` | |
|
|
607
|
-
| | `site` | |
|
|
608
|
-
| | `site_id` | |
|
|
609
|
-
| CustomFieldChoice | `field_id` | instead of `/extras/custom-field-choices/?field_id=<uuid>`, use `custom_field=<uuid>` |
|
|
610
|
-
| CustomLink | `slug` | |
|
|
611
|
-
| Device | `manufacturer_id` | |
|
|
612
|
-
| | `model` | instead of `/dcim/devices/?model=<uuid>`, use `device_type=<uuid>` |
|
|
613
|
-
| | `pass_through_ports` | instead of `/dcim/devices/?pass_through_ports=<bool>`, use `has_front_ports`/`has_rear_ports` |
|
|
614
|
-
| | `platform_id` | |
|
|
615
|
-
| | `region` | |
|
|
616
|
-
| | `region_id` | |
|
|
617
|
-
| | `role_id` | |
|
|
618
|
-
| | `secrets_group_id` | |
|
|
619
|
-
| | `site` | |
|
|
620
|
-
| | `site_id` | |
|
|
621
|
-
| | `tenant_group_id` | |
|
|
622
|
-
| DeviceBay | `device_id` | |
|
|
623
|
-
| | `region` | |
|
|
624
|
-
| | `region_id` | |
|
|
625
|
-
| | `site` | |
|
|
626
|
-
| | `site_id` | |
|
|
627
|
-
| DeviceType | `manufacturer_id` | |
|
|
628
|
-
| DeviceRedundancyGroup | `slug` | |
|
|
629
|
-
| DynamicGroup | `slug` | |
|
|
630
|
-
| FrontPort | `device_id` | |
|
|
631
|
-
| | `region` | |
|
|
632
|
-
| | `region_id` | |
|
|
633
|
-
| | `site` | |
|
|
634
|
-
| | `site_id` | |
|
|
635
|
-
| GraphQLQuery | `slug` | |
|
|
636
|
-
| Interface | `bridge_id` | |
|
|
637
|
-
| | `device_id` | |
|
|
638
|
-
| | `lag_id` | |
|
|
639
|
-
| | `parent_interface_id` | |
|
|
640
|
-
| | `region` | |
|
|
641
|
-
| | `region_id` | |
|
|
642
|
-
| | `site` | |
|
|
643
|
-
| | `site_id` | |
|
|
644
|
-
| InventoryItem | `device_id` | |
|
|
645
|
-
| | `manufacturer_id` | |
|
|
646
|
-
| | `parent_id` | |
|
|
647
|
-
| | `region` | |
|
|
648
|
-
| | `region_id` | |
|
|
649
|
-
| | `site` | |
|
|
650
|
-
| | `site_id` | |
|
|
651
|
-
| IPAddress | `tenant_group_id` | |
|
|
652
|
-
| JobHook | `slug` | |
|
|
653
|
-
| Location | `tenant_group_id` | |
|
|
654
|
-
| | `region` | |
|
|
655
|
-
| | `region_id` | |
|
|
656
|
-
| | `site` | |
|
|
657
|
-
| | `site_id` | |
|
|
658
|
-
| Manufacturer | `slug` | |
|
|
659
|
-
| ObjectPermission | `user_id` | instead of `/users/permissions/?user_id=<uuid>`, use `users=<uuid>` |
|
|
660
|
-
| | `region_id` | |
|
|
661
|
-
| | `site` | |
|
|
662
|
-
| | `site_id` | |
|
|
663
|
-
| Platform | `slug` | |
|
|
664
|
-
| Provider | `region` | |
|
|
665
|
-
| | `slug` | |
|
|
666
|
-
| ProviderNetwork | `provider_id` | |
|
|
667
|
-
| Platform | `manufacturer_id` | |
|
|
668
|
-
| PowerOutlet | `device_id` | |
|
|
669
|
-
| | `region` | |
|
|
670
|
-
| | `region_id` | |
|
|
671
|
-
| | `site` | |
|
|
672
|
-
| | `site_id` | |
|
|
673
|
-
| PowerFeed | `power_panel_id` | |
|
|
674
|
-
| | `rack_id` | |
|
|
675
|
-
| | `region` | |
|
|
676
|
-
| | `region_id` | |
|
|
677
|
-
| | `site` | |
|
|
678
|
-
| | `site_id` | |
|
|
679
|
-
| PowerPanel | `rack_group_id` | |
|
|
680
|
-
| | `region` | |
|
|
681
|
-
| | `region_id` | |
|
|
682
|
-
| | `site` | |
|
|
683
|
-
| | `site_id` | |
|
|
684
|
-
| PowerPort | `device_id` | |
|
|
685
|
-
| | `region` | |
|
|
686
|
-
| | `region_id` | |
|
|
687
|
-
| | `site` | |
|
|
688
|
-
| | `site_id` | |
|
|
689
|
-
| Prefix | `region` | |
|
|
690
|
-
| | `region_id` | |
|
|
691
|
-
| | `site` | |
|
|
692
|
-
| | `site_id` | |
|
|
693
|
-
| | `tenant_group_id` | |
|
|
694
|
-
| Rack | `group_id` | |
|
|
695
|
-
| | `region` | |
|
|
696
|
-
| | `region_id` | |
|
|
697
|
-
| | `role_id` | |
|
|
698
|
-
| | `site` | |
|
|
699
|
-
| | `site_id` | |
|
|
700
|
-
| | `tenant_group_id` | |
|
|
701
|
-
| RackGroup | `parent_id` | |
|
|
702
|
-
| | `region` | |
|
|
703
|
-
| | `region_id` | |
|
|
704
|
-
| | `site` | |
|
|
705
|
-
| | `site_id` | |
|
|
706
|
-
| RackReservation | `group_id` | |
|
|
707
|
-
| | `rack_id` | |
|
|
708
|
-
| | `site` | |
|
|
709
|
-
| | `site_id` | |
|
|
710
|
-
| | `tenant_group_id` | |
|
|
711
|
-
| | `user_id` | |
|
|
712
|
-
| RearPort | `device_id` | |
|
|
713
|
-
| | `region` | |
|
|
714
|
-
| | `region_id` | |
|
|
715
|
-
| | `site` | |
|
|
716
|
-
| | `site_id` | |
|
|
717
|
-
| Region | `parent_id` | |
|
|
718
|
-
| RelationshipAssociation | `slug` | |
|
|
719
|
-
| RIR | `slug` | |
|
|
720
|
-
| RouteTarget | `slug` | |
|
|
721
|
-
| RouteTarget | `tenant_group_id` | |
|
|
722
|
-
| Role | `slug` | |
|
|
723
|
-
| Secret | `slug` | |
|
|
724
|
-
| SecretsGroup | `slug` | |
|
|
725
|
-
| SecretsGroupAssociation | `group_id` | instead of `/extras/secrets-groups-associations/?group_id=<uuid>`, use `secrets_group=<uuid>` |
|
|
726
|
-
| | `slug` | |
|
|
727
|
-
| Status | `slug` | |
|
|
728
|
-
| Site | `region` | |
|
|
729
|
-
| | `region_id` | |
|
|
730
|
-
| | `tenant_group_id` | |
|
|
731
|
-
| Tenant | `aggregates` | |
|
|
732
|
-
| | `group_id` | |
|
|
733
|
-
| | `has_aggregates` | |
|
|
734
|
-
| | `has_sites` | |
|
|
735
|
-
| | `sites` | |
|
|
736
|
-
| | `slug` | |
|
|
737
|
-
| TenantGroup | `parent_id` | |
|
|
738
|
-
| | `slug` | |
|
|
739
|
-
| VirtualChassis | `master_id` | |
|
|
740
|
-
| | `region` | |
|
|
741
|
-
| | `region_id` | |
|
|
742
|
-
| | `site` | |
|
|
743
|
-
| | `site_id` | |
|
|
744
|
-
| | `tenant_id` | |
|
|
745
|
-
| VirtualMachine | `tenant_group_id` | |
|
|
746
|
-
| VLANGroup | `region` | |
|
|
747
|
-
| | `region_id` | |
|
|
748
|
-
| | `site` | |
|
|
749
|
-
| | `site_id` | |
|
|
750
|
-
| VLAN | `group_id` | |
|
|
751
|
-
| | `group` | instead of `/ipam/vlans/?group=<slug>`, use `vlan_group=<slug>` |
|
|
752
|
-
| | `region` | |
|
|
753
|
-
| | `region_id` | |
|
|
754
|
-
| | `site` | |
|
|
755
|
-
| | `site_id` | |
|
|
756
|
-
| | `tenant_group_id` | |
|
|
757
|
-
| VMInterface | `bridge_id` | |
|
|
758
|
-
| | `parent_interface_id` | |
|
|
759
|
-
| VRF | `tenant_group_id` | |
|
|
760
|
-
| Webhook | `slug` | |
|
|
194
|
+
Most removed database fields in Nautobot 2.0 fall into the following general categories:
|
|
195
|
+
|
|
196
|
+
1. Removal of `*_id=<uuid>` filters as they have have been merged into filters that support both uuid and name/slug (for example, instead of `/api/circuits/circuits/?provider_id=<UUID>`, use `/api/circuits/circuits/?provider=<uuid>`).
|
|
197
|
+
2. Removal of filtering on removed models such as `Region` and `Site`. (Use `location` filters instead.)
|
|
198
|
+
3. Removal of `slug` filters from models that no longer have a `slug` field.
|
|
199
|
+
|
|
200
|
+
??? info "Full table of removed filter fields"
|
|
201
|
+
{data-table installation/tables/v2-filters-removed-fields.yaml}
|
|
761
202
|
|
|
762
203
|
## Python Code Location Changes
|
|
763
204
|
|
|
764
|
-
The below is mostly relevant only to authors of Jobs and Nautobot Apps. End users should not be impacted by the changes in this section.
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
| `nautobot.utilities.choices` | `*` | `nautobot.core.choices` |
|
|
778
|
-
| `nautobot.utilities.config` | `*` | `nautobot.core.utils.config` |
|
|
779
|
-
| `nautobot.utilities.constants` | `*` | `nautobot.core.constants` |
|
|
780
|
-
| `nautobot.utilities.deprecation` | `*` | `nautobot.core.utils.deprecation` |
|
|
781
|
-
| `nautobot.utilities.error_handlers` | `*` | `nautobot.core.views.utils` |
|
|
782
|
-
| `nautobot.utilities.exceptions` | `*` | `nautobot.core.exceptions` |
|
|
783
|
-
| `nautobot.utilities.factory` | `*` | `nautobot.core.factory` |
|
|
784
|
-
| `nautobot.utilities.fields` | `*` | `nautobot.core.models.fields` |
|
|
785
|
-
| `nautobot.utilities.filters` | `*` | `nautobot.core.filters` |
|
|
786
|
-
| `nautobot.utilities.forms` | `*` | `nautobot.core.forms` |
|
|
787
|
-
| `nautobot.utilities.git` | `*` | `nautobot.core.utils.git` |
|
|
788
|
-
| `nautobot.utilities.logging` | `*` | `nautobot.core.utils.logging` |
|
|
789
|
-
| `nautobot.utilities.management` | `*` | `nautobot.core.management` |
|
|
790
|
-
| `nautobot.utilities.ordering` | `*` | `nautobot.core.utils.ordering` |
|
|
791
|
-
| `nautobot.utilities.paginator` | `*` | `nautobot.core.views.paginator` |
|
|
792
|
-
| `nautobot.utilities.permissions` | `*` | `nautobot.core.utils.permissions` |
|
|
793
|
-
| `nautobot.utilities.query_functions` | `*` | `nautobot.core.models.query_functions` |
|
|
794
|
-
| `nautobot.utilities.querysets` | `*` | `nautobot.core.models.querysets` |
|
|
795
|
-
| `nautobot.utilities.tables` | `*` | `nautobot.core.tables` |
|
|
796
|
-
| `nautobot.utilities.tasks` | `*` | `nautobot.core.tasks` |
|
|
797
|
-
| `nautobot.utilities.templatetags` | `*` | `nautobot.core.templatetags` |
|
|
798
|
-
| `nautobot.utilities.testing` | `*` | `nautobot.core.testing` |
|
|
799
|
-
| `nautobot.utilities.tree_queries` | `*` | `nautobot.core.models.tree_queries` |
|
|
800
|
-
| `nautobot.utilities.utils` | `array_to_string` | `nautobot.core.models.utils` |
|
|
801
|
-
| | `convert_querydict_to_factory_formset_acceptable_querydict` | `nautobot.core.utils.requests` |
|
|
802
|
-
| | `copy_safe_request` | `nautobot.core.utils.requests` |
|
|
803
|
-
| | `count_related` | `nautobot.core.models.querysets` |
|
|
804
|
-
| | `csv_format` | `nautobot.core.views.utils` |
|
|
805
|
-
| | `deepmerge` | `nautobot.core.utils.data` |
|
|
806
|
-
| | `dict_to_filter_params` | `nautobot.core.api.utils` |
|
|
807
|
-
| | `dynamic_import` | `nautobot.core.api.utils` |
|
|
808
|
-
| | `ensure_content_type_and_field_name_inquery_params` | `nautobot.core.utils.requests` |
|
|
809
|
-
| | `flatten_dict` | `nautobot.core.utils.data` |
|
|
810
|
-
| | `flatten_iterable` | `nautobot.core.utils.data` |
|
|
811
|
-
| | `foreground_color` | `nautobot.core.utils.color` |
|
|
812
|
-
| | `get_all_lookup_expr_for_field` | `nautobot.core.utils.filtering` |
|
|
813
|
-
| | `get_api_version_serializer` | `nautobot.core.api.utils` |
|
|
814
|
-
| | `get_changes_for_model` | `nautobot.core.utils.lookup` |
|
|
815
|
-
| | `get_filterset_field` | `nautobot.core.utils.filtering` |
|
|
816
|
-
| | `get_filterset_for_model` | `nautobot.core.utils.lookup` |
|
|
817
|
-
| | `get_filterable_params_from_filter_params` | `nautobot.core.utils.requests` |
|
|
818
|
-
| | `get_form_for_model` | `nautobot.core.utils.lookup` |
|
|
819
|
-
| | `get_model_from_name` | `nautobot.core.utils.lookup` |
|
|
820
|
-
| | `get_related_class_for_model` | `nautobot.core.utils.lookup` |
|
|
821
|
-
| | `get_route_for_model` | `nautobot.core.utils.lookup` |
|
|
822
|
-
| | `get_table_for_model` | `nautobot.core.utils.lookup` |
|
|
823
|
-
| | `hex_to_rgb` | `nautobot.core.utils.color` |
|
|
824
|
-
| | `is_taggable` | `nautobot.core.models.utils` |
|
|
825
|
-
| | `is_uuid` | `nautobot.core.utils.data` |
|
|
826
|
-
| | `lighten_color` | `nautobot.core.utils.color` |
|
|
827
|
-
| | `normalize_querydict` | `nautobot.core.utils.requests` |
|
|
828
|
-
| | `prepare_cloned_fields` | `nautobot.core.views.utils` |
|
|
829
|
-
| | `pretty_print_query` | `nautobot.core.models.utils` |
|
|
830
|
-
| | `render_jinja2` | `nautobot.core.utils.data` |
|
|
831
|
-
| | `rgb_to_hex` | `nautobot.core.utils.color` |
|
|
832
|
-
| | `SerializerForAPIVersions` | `nautobot.core.api.utils` |
|
|
833
|
-
| | `serialize_object` | `nautobot.core.models.utils` |
|
|
834
|
-
| | `serialize_object_v2` | `nautobot.core.models.utils` |
|
|
835
|
-
| | `shallow_compare_dict` | `nautobot.core.utils.data` |
|
|
836
|
-
| | `slugify_dots_to_dashes` | `nautobot.core.models.fields` |
|
|
837
|
-
| | `slugify_dashes_to_underscores` | `nautobot.core.models.fields` |
|
|
838
|
-
| | `to_meters` | `nautobot.core.utils.data` |
|
|
839
|
-
| | `UtilizationData` | `nautobot.core.utils.data` |
|
|
840
|
-
| | `versioned_serializer_selector` | `nautobot.core.api.utils` |
|
|
841
|
-
| `nautobot.utilities.validators` | `*` | `nautobot.core.models.validators` |
|
|
842
|
-
| `nautobot.utilities.views` | `*` | `nautobot.core.views.mixins` |
|
|
205
|
+
The below is mostly relevant only to authors of Jobs and Nautobot Apps. End users should not be impacted by the changes in this section. Most changes in code location arise from the merging of the `nautobot.utilities` module into the `nautobot.core` module.
|
|
206
|
+
|
|
207
|
+
??? info "Full table of code location changes"
|
|
208
|
+
{data-table installation/tables/v2-code-location-changes.yaml}
|
|
209
|
+
|
|
210
|
+
## Removed Python Code
|
|
211
|
+
|
|
212
|
+
- Because of the replacement of the `?brief` REST API query parameter with `?depth` and the removal of all `Nested*Serializers`, some of the classes and mixins are removed because they are no longer needed.
|
|
213
|
+
- In the redesigned UI of Nautobot 2.0, menu items may no longer contain buttons, and so the `NavMenuButton` class and its subclasses have been removed as they are no longer needed/supported.
|
|
214
|
+
- With the reimplementation of CSV import and export, `CSVForm` classes are generally no longer needed, and so a number of mixins have been removed.
|
|
215
|
+
|
|
216
|
+
??? info "Full table of code removals"
|
|
217
|
+
{data-table installation/tables/v2-code-removals.yaml}
|
|
843
218
|
|
|
844
219
|
## Git Data Source Changes
|
|
845
220
|
|
|
846
221
|
The Configuration Contexts Metadata key `schema` has been replaced with `config_context_schema`. This means that any `schema` references in your git repository's data must be updated to reflect this change.
|
|
847
222
|
|
|
223
|
+
`GitRepository` sync operations are now Jobs. As a result, when creating a new `GitRepository` it **is not automatically synchronized**. A `GitRepository.sync()` method has been implemented that will execute the sync job on a worker and return the `JobResult` for the operation. This method takes `dry_run` and `user` arguments. The `dry_run` argument defaults to `False`; if set to `True` will cause the sync to dry-run. The `user` argument is required if a sync is performed.
|
|
224
|
+
|
|
225
|
+
Additionally, the `GitRepository.save()` method no longer takes a `trigger_resync=<True|False>` argument as it is no longer required. The act of creating a new `GitRepository` no longer has side effects.
|
|
226
|
+
|
|
227
|
+
Below is a table documenting changes in names for Git-related Jobs. There should NOT be a need to ever manually execute the jobs due to the addition of `GitRepository.sync()`, but this is being provided for clarity.
|
|
228
|
+
|
|
229
|
+
| Old Job Location | New Job Location |
|
|
230
|
+
|------------------------------------------------------------------------|------------------------------------------|
|
|
231
|
+
| `nautobot.extras.datasources.git.pull_git_repository_and_refresh_data` | `nautobot.core.jobs.GitRepositorySync` |
|
|
232
|
+
| `nautobot.extras.datasources.git.git_repository_diff_origin_and_local` | `nautobot.core.jobs.GitRepositoryDryRun` |
|
|
233
|
+
|
|
848
234
|
## Logging Changes
|
|
849
235
|
|
|
850
|
-
Where applicable, `logging.getLogger("
|
|
236
|
+
Where applicable, `logging.getLogger("some_arbitrary_name")` is replaced with `logging.getLogger(__name__)` or `logging.getLogger(__name__ + ".SpecificFeature")`.
|
|
851
237
|
|
|
852
238
|
Below is a table documenting changes in logger names that could potentially affect existing deployments with expectations around specific logger names used for specific purposes.
|
|
853
239
|
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
| `nautobot.authentication` | `nautobot.core.authentication` |
|
|
857
|
-
| `nautobot.datasources.git` | `nautobot.extras.datasources.git` |
|
|
858
|
-
| `nautobot.datasources.utils` | `nautobot.extras.datasources.utils` |
|
|
859
|
-
| `nautobot.dcim.cable` | `nautobot.dcim.signals.cable` |
|
|
860
|
-
| `nautobot.graphql.generators` | `nautobot.core.graphql.generators` |
|
|
861
|
-
| `nautobot.graphql.schema` | `nautobot.core.graphql.schema` |
|
|
862
|
-
| `nautobot.jobs` | `nautobot.extras.jobs` |
|
|
863
|
-
| `nautobot.jobs.*` | `nautobot.extras.jobs.*` |
|
|
864
|
-
| `nautobot.releases` | `nautobot.core.releases` |
|
|
865
|
-
| `nautobot.releases` | `nautobot.utilities.tasks` |
|
|
866
|
-
| `nautobot.plugins` | `nautobot.extras.templatetags.plugins` |
|
|
867
|
-
| `nautobot.plugins` | `nautobot.extras.plugins.utils` |
|
|
868
|
-
| `nautobot.views.ObjectEditView` | `nautobot.core.views.generic.ObjectEditView` |
|
|
869
|
-
| `nautobot.views.ObjectDeleteView` | `nautobot.core.views.generic.ObjectDeleteView` |
|
|
870
|
-
| `nautobot.views.BulkCreateView` | `nautobot.core.views.generic.BulkCreateView` |
|
|
871
|
-
| `nautobot.views.ObjectImportView` | `nautobot.core.views.generic.ObjectImportView` |
|
|
872
|
-
| `nautobot.views.BulkImportView` | `nautobot.core.views.generic.BulkImportView` |
|
|
873
|
-
| `nautobot.views.BulkEditView` | `nautobot.core.views.generic.BulkEditView` |
|
|
874
|
-
| `nautobot.views.BulkRenameView` | `nautobot.core.views.generic.BulkRenameView` |
|
|
875
|
-
| `nautobot.views.BulkDeleteView` | `nautobot.core.views.generic.BulkDeleteView` |
|
|
876
|
-
| `nautobot.views.ComponentCreateView` | `nautobot.core.views.generic.ComponentCreateView` |
|
|
877
|
-
| `nautobot.views.BulkComponentCreateView` | `nautobot.core.views.generic.BulkComponentCreateView` |
|
|
240
|
+
??? info "Full table of logger name changes"
|
|
241
|
+
{data-table installation/tables/v2-logging-renamed-loggers.yaml}
|
|
878
242
|
|
|
879
243
|
## Job Database Model Changes
|
|
880
244
|
|
|
@@ -893,7 +257,66 @@ The Job `name` field has been changed to a unique field and the `name` + `groupi
|
|
|
893
257
|
|
|
894
258
|
These jobs would be named `Sample job` and `Sample job (2)`
|
|
895
259
|
|
|
896
|
-
The Job `slug`
|
|
260
|
+
The Job `slug`, `source` and `git_repository` fields have been removed. The Job `module_name` field will automatically be updated, for Jobs derived from a Git repository, from `<submodule_name>` to `<git_repository_slug>.jobs.<submodule_name>`. This also changes the secondary uniqueness constraint for Jobs to simply `[module_name, job_class_name]`.
|
|
261
|
+
|
|
262
|
+
The Job `class_path` attribute has been simplified correspondingly, to simply `<module>.<ClassName>` instead of the former `<source>/<module>/<ClassName>`. For example, the Nautobot Golden Config backup job's `class_path` will change from `plugins/nautobot_golden_config.jobs/BackupJob` to `nautobot_golden_config.jobs.BackupJob`.
|
|
263
|
+
|
|
264
|
+
The Job `commit_default` field has been renamed to `dryrun_default` and the default value has been changed from `True` to `False`. This change is a result of the fundamental job changes mentioned in the [Job Changes](#job-changes) section below.
|
|
265
|
+
|
|
266
|
+
## JobResult Database Model Changes
|
|
267
|
+
|
|
268
|
+
The `JobResult` objects for which results from Job executions are stored are now automatically managed. Therefore job authors must never manipulate or `save()` these objects as they are now used internally for all state transitions and saving the objects yourself could interfere with and cause Job execution to fail or cause data loss.
|
|
269
|
+
|
|
270
|
+
Therefore all code that is calling `JobResult.set_status()` (which has been removed) or `JobResult.save()` must be removed.
|
|
271
|
+
|
|
272
|
+
## Job Changes
|
|
273
|
+
|
|
274
|
+
### Fundamental Changes
|
|
275
|
+
|
|
276
|
+
The `BaseJob` class is now a subclass of Celery's `Task` class. Some fundamental changes to the job's methods and signatures were required to support this change:
|
|
277
|
+
|
|
278
|
+
- The `test_*` and `post_run` methods for backwards compatibility to NetBox scripts and reports were removed. Celery implements `before_start`, `on_success`, `on_retry`, `on_failure`, and `after_return` methods that can be used by job authors to perform similar functions.
|
|
279
|
+
|
|
280
|
+
!!! important
|
|
281
|
+
Be sure to call the `super()` method when overloading any of the job's `before_start`, `on_success`, `on_retry`, `on_failure`, or `after_return` methods
|
|
282
|
+
|
|
283
|
+
- The run method signature is now customizable by the job author. This means that the `data` and `commit` arguments are no longer passed to the job by default and the job's run method signature should match the the job's input variables.
|
|
897
284
|
|
|
898
285
|
!!! example
|
|
899
|
-
|
|
286
|
+
```py
|
|
287
|
+
class ExampleJob(Job):
|
|
288
|
+
var1 = StringVar()
|
|
289
|
+
var2 = IntegerVar(required=True)
|
|
290
|
+
var3 = BooleanVar()
|
|
291
|
+
var4 = ObjectVar(model=Role)
|
|
292
|
+
|
|
293
|
+
def run(self, var1, var2, var3, var4):
|
|
294
|
+
...
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Database Transactions
|
|
298
|
+
|
|
299
|
+
Nautobot no longer wraps the job `run` method in an atomic database transaction. As a result, jobs that need to roll back database changes will have to decorate the run method with `@transaction.atomic` or use the `with transaction.atomic()` context manager in the job code.
|
|
300
|
+
|
|
301
|
+
With the removal of the atomic transaction, the `commit` flag has been removed. The ability to bypass job approval on dryrun can be achieved by using an optional `dryrun` argument. Job authors who wish to allow users to bypass approval when the `dryrun` flag is set should set a `dryrun` attribute with a value of `DryRunVar()` on their job class. `DryRunVar` can be imported from `nautobot.extras.jobs`.
|
|
302
|
+
|
|
303
|
+
!!! example
|
|
304
|
+
```py
|
|
305
|
+
from nautobot.extras.jobs import DryRunVar, Job
|
|
306
|
+
|
|
307
|
+
class ExampleJob(Job):
|
|
308
|
+
dryrun = DryRunVar()
|
|
309
|
+
|
|
310
|
+
def run(self, dryrun):
|
|
311
|
+
...
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
A new `supports_dryrun` field has been added to the `Job` model and `Job` class that returns true if the `Job` class implements the `dryrun = DryRunVar()` attribute. This is used to determine if jobs that require approval can be dry run without prior approval.
|
|
315
|
+
|
|
316
|
+
The `commit_default` job field has been renamed to `dryrun_default` and the default value has been changed from `True` to `False`.
|
|
317
|
+
|
|
318
|
+
!!! important
|
|
319
|
+
The `read_only` job field no longer changes the behavior of Nautobot core and is left to the job author to decide whether their job is read only.
|
|
320
|
+
|
|
321
|
+
!!! important
|
|
322
|
+
Nautobot no longer enforces any job behavior when dryrun is set. It is now the job author's responsibility to define and enforce the execution of a "dry run".
|