nautobot 2.4.0b1__py3-none-any.whl → 2.4.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of nautobot might be problematic. Click here for more details.
- nautobot/apps/__init__.py +1 -1
- nautobot/apps/api.py +8 -8
- nautobot/apps/change_logging.py +2 -2
- nautobot/apps/choices.py +4 -4
- nautobot/apps/events.py +3 -3
- nautobot/apps/factory.py +2 -2
- nautobot/apps/filters.py +1 -1
- nautobot/apps/forms.py +20 -20
- nautobot/apps/graphql.py +2 -2
- nautobot/apps/jobs.py +8 -8
- nautobot/apps/models.py +19 -19
- nautobot/apps/tables.py +1 -1
- nautobot/apps/testing.py +10 -10
- nautobot/apps/ui.py +2 -2
- nautobot/apps/utils.py +7 -7
- nautobot/apps/views.py +7 -7
- nautobot/circuits/api/serializers.py +1 -0
- nautobot/circuits/api/views.py +4 -8
- nautobot/circuits/tables.py +2 -1
- nautobot/circuits/templates/circuits/circuit_create.html +1 -7
- nautobot/circuits/views.py +3 -3
- nautobot/cloud/api/views.py +6 -10
- nautobot/cloud/models.py +1 -1
- nautobot/cloud/views.py +0 -16
- nautobot/core/api/constants.py +11 -0
- nautobot/core/api/fields.py +5 -5
- nautobot/core/api/filter_backends.py +3 -9
- nautobot/core/api/schema.py +13 -2
- nautobot/core/api/serializers.py +40 -34
- nautobot/core/api/views.py +56 -4
- nautobot/core/celery/log.py +4 -4
- nautobot/core/celery/schedulers.py +2 -2
- nautobot/core/choices.py +2 -2
- nautobot/core/events/__init__.py +3 -3
- nautobot/core/filters.py +67 -35
- nautobot/core/forms/__init__.py +19 -19
- nautobot/core/forms/fields.py +14 -11
- nautobot/core/forms/forms.py +33 -2
- nautobot/core/graphql/types.py +1 -1
- nautobot/core/jobs/__init__.py +28 -7
- nautobot/core/jobs/bulk_actions.py +285 -0
- nautobot/core/jobs/cleanup.py +48 -12
- nautobot/core/jobs/groups.py +1 -1
- nautobot/core/management/commands/validate_models.py +1 -1
- nautobot/core/models/__init__.py +3 -1
- nautobot/core/models/query_functions.py +2 -2
- nautobot/core/models/tree_queries.py +6 -3
- nautobot/core/settings.py +29 -2
- nautobot/core/settings.yaml +21 -0
- nautobot/core/tables.py +79 -61
- nautobot/core/templates/about.html +67 -0
- nautobot/core/templates/inc/media.html +3 -0
- nautobot/core/templates/inc/nav_menu.html +1 -0
- nautobot/core/templates/inc/tenancy_form_panel.html +9 -0
- nautobot/core/templates/inc/tenant_table_row.html +11 -0
- nautobot/core/templates/nautobot_config.py.j2 +13 -0
- nautobot/core/templates/search.html +7 -0
- nautobot/core/templates/utilities/render_jinja2.html +1 -1
- nautobot/core/templates/utilities/templatetags/tag.html +1 -1
- nautobot/core/templates/utilities/theme_preview.html +7 -0
- nautobot/core/templatetags/helpers.py +11 -2
- nautobot/core/testing/__init__.py +8 -8
- nautobot/core/testing/api.py +170 -15
- nautobot/core/testing/filters.py +45 -10
- nautobot/core/testing/forms.py +2 -0
- nautobot/core/testing/integration.py +86 -4
- nautobot/core/testing/mixins.py +7 -2
- nautobot/core/testing/views.py +44 -29
- nautobot/core/tests/integration/test_app_home.py +0 -1
- nautobot/core/tests/integration/test_app_navbar.py +0 -1
- nautobot/core/tests/integration/test_filters.py +0 -2
- nautobot/core/tests/integration/test_home.py +0 -1
- nautobot/core/tests/integration/test_navbar.py +0 -1
- nautobot/core/tests/integration/test_view_authentication.py +1 -0
- nautobot/core/tests/runner.py +1 -1
- nautobot/core/tests/test_api.py +98 -1
- nautobot/core/tests/test_csv.py +25 -3
- nautobot/core/tests/test_filters.py +209 -246
- nautobot/core/tests/test_forms.py +1 -0
- nautobot/core/tests/test_jobs.py +460 -1
- nautobot/core/tests/test_models.py +9 -0
- nautobot/core/tests/test_settings_schema.py +7 -0
- nautobot/core/tests/test_tables.py +100 -0
- nautobot/core/tests/test_utils.py +63 -1
- nautobot/core/tests/test_views.py +30 -3
- nautobot/core/ui/nav.py +1 -0
- nautobot/core/ui/object_detail.py +15 -1
- nautobot/core/urls.py +11 -0
- nautobot/core/utils/lookup.py +11 -8
- nautobot/core/utils/querysets.py +64 -0
- nautobot/core/utils/requests.py +24 -9
- nautobot/core/views/__init__.py +42 -0
- nautobot/core/views/generic.py +131 -197
- nautobot/core/views/mixins.py +126 -38
- nautobot/core/views/renderers.py +6 -6
- nautobot/dcim/api/serializers.py +56 -64
- nautobot/dcim/api/views.py +47 -113
- nautobot/dcim/constants.py +6 -13
- nautobot/dcim/factory.py +6 -1
- nautobot/dcim/filters/__init__.py +31 -2
- nautobot/dcim/forms.py +36 -17
- nautobot/dcim/graphql/types.py +2 -2
- nautobot/dcim/migrations/0067_controllermanageddevicegroup_tenant.py +25 -0
- nautobot/dcim/models/__init__.py +1 -1
- nautobot/dcim/models/device_component_templates.py +2 -2
- nautobot/dcim/models/device_components.py +22 -20
- nautobot/dcim/models/devices.py +10 -1
- nautobot/dcim/models/locations.py +3 -3
- nautobot/dcim/models/power.py +6 -5
- nautobot/dcim/models/racks.py +4 -4
- nautobot/dcim/tables/__init__.py +3 -3
- nautobot/dcim/tables/devices.py +7 -5
- nautobot/dcim/tables/devicetypes.py +2 -2
- nautobot/dcim/tables/racks.py +1 -1
- nautobot/dcim/templates/dcim/controller_create.html +1 -7
- nautobot/dcim/templates/dcim/controller_retrieve.html +1 -9
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_create.html +2 -0
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +5 -0
- nautobot/dcim/templates/dcim/device.html +1 -9
- nautobot/dcim/templates/dcim/device_edit.html +36 -37
- nautobot/dcim/templates/dcim/location.html +1 -9
- nautobot/dcim/templates/dcim/location_edit.html +1 -7
- nautobot/dcim/templates/dcim/rack.html +1 -9
- nautobot/dcim/templates/dcim/rack_edit.html +1 -7
- nautobot/dcim/templates/dcim/rackreservation.html +1 -9
- nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +1 -9
- nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +1 -7
- nautobot/dcim/tests/integration/test_controller.py +62 -0
- nautobot/dcim/tests/integration/test_controller_managed_device_group.py +71 -0
- nautobot/dcim/tests/integration/test_device_bulk_delete.py +189 -0
- nautobot/dcim/tests/integration/test_device_bulk_edit.py +181 -0
- nautobot/dcim/tests/test_api.py +16 -5
- nautobot/dcim/tests/test_filters.py +33 -0
- nautobot/dcim/tests/test_forms.py +51 -2
- nautobot/dcim/tests/test_graphql.py +52 -0
- nautobot/dcim/tests/test_jobs.py +118 -0
- nautobot/dcim/tests/test_models.py +52 -9
- nautobot/dcim/tests/test_views.py +21 -83
- nautobot/dcim/views.py +1 -13
- nautobot/extras/api/customfields.py +2 -2
- nautobot/extras/api/serializers.py +90 -85
- nautobot/extras/api/views.py +22 -27
- nautobot/extras/constants.py +2 -0
- nautobot/extras/filters/__init__.py +8 -6
- nautobot/extras/forms/base.py +2 -2
- nautobot/extras/forms/forms.py +139 -31
- nautobot/extras/forms/mixins.py +14 -6
- nautobot/extras/group_sync.py +3 -3
- nautobot/extras/health_checks.py +1 -2
- nautobot/extras/jobs.py +85 -18
- nautobot/extras/managers.py +3 -1
- nautobot/extras/migrations/0018_joblog_data_migration.py +7 -9
- nautobot/extras/migrations/0120_job_is_singleton_job_is_singleton_override.py +22 -0
- nautobot/extras/migrations/0121_alter_team_contacts.py +17 -0
- nautobot/extras/models/__init__.py +1 -1
- nautobot/extras/models/contacts.py +1 -1
- nautobot/extras/models/customfields.py +12 -11
- nautobot/extras/models/groups.py +11 -9
- nautobot/extras/models/jobs.py +23 -4
- nautobot/extras/models/models.py +2 -2
- nautobot/extras/plugins/__init__.py +13 -2
- nautobot/extras/plugins/marketplace_manifest.yml +84 -79
- nautobot/extras/plugins/tables.py +16 -14
- nautobot/extras/plugins/views.py +65 -69
- nautobot/extras/registry.py +1 -1
- nautobot/extras/secrets/__init__.py +2 -2
- nautobot/extras/tables.py +7 -5
- nautobot/extras/templates/extras/dynamicgroup.html +1 -9
- nautobot/extras/templates/extras/job_detail.html +16 -0
- nautobot/extras/templates/extras/job_edit.html +1 -0
- nautobot/extras/templates/extras/jobqueue_retrieve.html +1 -9
- nautobot/extras/templates/extras/marketplace.html +29 -11
- nautobot/extras/templates/extras/plugin_detail.html +32 -15
- nautobot/extras/templates/extras/plugins_tiles.html +21 -10
- nautobot/extras/templatetags/job_buttons.py +4 -4
- nautobot/extras/test_jobs/api_test_job.py +1 -1
- nautobot/extras/test_jobs/atomic_transaction.py +2 -2
- nautobot/extras/test_jobs/dry_run.py +1 -1
- nautobot/extras/test_jobs/fail.py +5 -5
- nautobot/extras/test_jobs/file_output.py +1 -1
- nautobot/extras/test_jobs/file_upload_fail.py +1 -1
- nautobot/extras/test_jobs/file_upload_pass.py +1 -1
- nautobot/extras/test_jobs/ipaddress_vars.py +3 -1
- nautobot/extras/test_jobs/jobs_module/jobs_submodule/jobs.py +1 -1
- nautobot/extras/test_jobs/location_with_custom_field.py +1 -1
- nautobot/extras/test_jobs/log_redaction.py +1 -1
- nautobot/extras/test_jobs/log_skip_db_logging.py +1 -1
- nautobot/extras/test_jobs/modify_db.py +1 -1
- nautobot/extras/test_jobs/object_var_optional.py +1 -1
- nautobot/extras/test_jobs/object_var_required.py +1 -1
- nautobot/extras/test_jobs/object_vars.py +1 -1
- nautobot/extras/test_jobs/pass.py +3 -3
- nautobot/extras/test_jobs/profiling.py +1 -1
- nautobot/extras/test_jobs/relative_import.py +3 -3
- nautobot/extras/test_jobs/singleton.py +16 -0
- nautobot/extras/test_jobs/soft_time_limit_greater_than_time_limit.py +1 -1
- nautobot/extras/test_jobs/task_queues.py +1 -1
- nautobot/extras/tests/integration/test_plugin_banner.py +0 -2
- nautobot/extras/tests/test_api.py +13 -13
- nautobot/extras/tests/test_customfields.py +1 -1
- nautobot/extras/tests/test_datasources.py +2 -1
- nautobot/extras/tests/test_dynamicgroups.py +1 -1
- nautobot/extras/tests/test_filters.py +6 -6
- nautobot/extras/tests/test_forms.py +33 -1
- nautobot/extras/tests/test_jobs.py +178 -32
- nautobot/extras/tests/test_models.py +16 -10
- nautobot/extras/tests/test_plugins.py +62 -9
- nautobot/extras/tests/test_relationships.py +120 -9
- nautobot/extras/tests/test_views.py +56 -194
- nautobot/extras/utils.py +3 -2
- nautobot/extras/views.py +30 -98
- nautobot/ipam/api/fields.py +3 -3
- nautobot/ipam/api/serializers.py +41 -33
- nautobot/ipam/api/views.py +68 -117
- nautobot/ipam/factory.py +1 -1
- nautobot/ipam/filters.py +3 -2
- nautobot/ipam/lookups.py +101 -62
- nautobot/ipam/models.py +66 -16
- nautobot/ipam/querysets.py +2 -2
- nautobot/ipam/tables.py +23 -7
- nautobot/ipam/templates/ipam/ipaddress.html +1 -9
- nautobot/ipam/templates/ipam/ipaddress_bulk_add.html +1 -7
- nautobot/ipam/templates/ipam/ipaddress_edit.html +1 -7
- nautobot/ipam/templates/ipam/prefix.html +1 -9
- nautobot/ipam/templates/ipam/prefix_edit.html +1 -7
- nautobot/ipam/templates/ipam/vlan.html +1 -9
- nautobot/ipam/templates/ipam/vlan_edit.html +1 -7
- nautobot/ipam/templates/ipam/vrf_edit.html +1 -7
- nautobot/ipam/tests/test_api.py +436 -3
- nautobot/ipam/tests/test_forms.py +49 -47
- nautobot/ipam/tests/test_migrations.py +30 -30
- nautobot/ipam/tests/test_models.py +95 -34
- nautobot/ipam/tests/test_querysets.py +63 -1
- nautobot/ipam/tests/test_views.py +3 -0
- nautobot/ipam/utils/__init__.py +36 -6
- nautobot/ipam/views.py +61 -87
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap-theme.min.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css +40 -2
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.css.map +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css +1 -1
- nautobot/project-static/bootstrap-3.4.1-dist/css/bootstrap.min.css.map +1 -1
- nautobot/project-static/docs/404.html +46 -4
- nautobot/project-static/docs/apps/index.html +46 -4
- nautobot/project-static/docs/apps/nautobot-apps.html +47 -6
- nautobot/project-static/docs/assets/_mkdocstrings.css +25 -1
- nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js → bundle.88dd0f4e.min.js} +2 -2
- nautobot/project-static/docs/assets/javascripts/{bundle.83f73b43.min.js.map → bundle.88dd0f4e.min.js.map} +2 -2
- nautobot/project-static/docs/code-reference/nautobot/apps/__init__.html +62 -10
- nautobot/project-static/docs/code-reference/nautobot/apps/admin.html +59 -7
- nautobot/project-static/docs/code-reference/nautobot/apps/api.html +374 -122
- nautobot/project-static/docs/code-reference/nautobot/apps/change_logging.html +90 -18
- nautobot/project-static/docs/code-reference/nautobot/apps/choices.html +95 -21
- nautobot/project-static/docs/code-reference/nautobot/apps/config.html +53 -6
- nautobot/project-static/docs/code-reference/nautobot/apps/constants.html +52 -5
- nautobot/project-static/docs/code-reference/nautobot/apps/datasources.html +79 -17
- nautobot/project-static/docs/code-reference/nautobot/apps/events.html +102 -28
- nautobot/project-static/docs/code-reference/nautobot/apps/exceptions.html +108 -21
- nautobot/project-static/docs/code-reference/nautobot/apps/factory.html +131 -38
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +239 -65
- nautobot/project-static/docs/code-reference/nautobot/apps/forms.html +581 -165
- nautobot/project-static/docs/code-reference/nautobot/apps/graphql.html +109 -36
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +453 -167
- nautobot/project-static/docs/code-reference/nautobot/apps/models.html +493 -211
- nautobot/project-static/docs/code-reference/nautobot/apps/querysets.html +60 -8
- nautobot/project-static/docs/code-reference/nautobot/apps/secrets.html +71 -15
- nautobot/project-static/docs/code-reference/nautobot/apps/tables.html +407 -55
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +620 -205
- nautobot/project-static/docs/code-reference/nautobot/apps/ui.html +858 -412
- nautobot/project-static/docs/code-reference/nautobot/apps/urls.html +59 -7
- nautobot/project-static/docs/code-reference/nautobot/apps/utils.html +448 -186
- nautobot/project-static/docs/code-reference/nautobot/apps/views.html +365 -147
- nautobot/project-static/docs/development/apps/api/configuration-view.html +46 -4
- nautobot/project-static/docs/development/apps/api/database-backend-config.html +46 -4
- nautobot/project-static/docs/development/apps/api/models/django-admin.html +46 -4
- nautobot/project-static/docs/development/apps/api/models/global-search.html +46 -4
- nautobot/project-static/docs/development/apps/api/models/graphql.html +46 -4
- nautobot/project-static/docs/development/apps/api/models/index.html +46 -4
- nautobot/project-static/docs/development/apps/api/nautobot-app-config.html +46 -4
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +46 -4
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +46 -4
- nautobot/project-static/docs/development/apps/api/platform-features/git-repository-content.html +46 -4
- nautobot/project-static/docs/development/apps/api/platform-features/index.html +46 -4
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +46 -4
- nautobot/project-static/docs/development/apps/api/platform-features/jobs.html +46 -4
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +46 -4
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +46 -4
- nautobot/project-static/docs/development/apps/api/platform-features/table-extensions.html +68 -7
- nautobot/project-static/docs/development/apps/api/platform-features/uniquely-identify-objects.html +46 -4
- nautobot/project-static/docs/development/apps/api/prometheus.html +46 -4
- nautobot/project-static/docs/development/apps/api/setup.html +46 -4
- nautobot/project-static/docs/development/apps/api/testing.html +46 -4
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +46 -4
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +46 -4
- nautobot/project-static/docs/development/apps/api/ui-extensions/index.html +46 -4
- nautobot/project-static/docs/development/apps/api/ui-extensions/navigation.html +46 -4
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +46 -4
- nautobot/project-static/docs/development/apps/api/views/base-template.html +46 -4
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +46 -4
- nautobot/project-static/docs/development/apps/api/views/django-generic-views.html +46 -4
- nautobot/project-static/docs/development/apps/api/views/help-documentation.html +46 -4
- nautobot/project-static/docs/development/apps/api/views/index.html +46 -4
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +46 -4
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +46 -4
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +46 -4
- nautobot/project-static/docs/development/apps/api/views/notes.html +46 -4
- nautobot/project-static/docs/development/apps/api/views/rest-api.html +52 -6
- nautobot/project-static/docs/development/apps/api/views/urls.html +46 -4
- nautobot/project-static/docs/development/apps/index.html +46 -4
- nautobot/project-static/docs/development/apps/migration/code-updates.html +46 -4
- nautobot/project-static/docs/development/apps/migration/dependency-updates.html +46 -4
- nautobot/project-static/docs/development/apps/migration/from-v1.html +46 -4
- nautobot/project-static/docs/development/apps/migration/model-updates/dcim.html +46 -4
- nautobot/project-static/docs/development/apps/migration/model-updates/extras.html +46 -4
- nautobot/project-static/docs/development/apps/migration/model-updates/global.html +46 -4
- nautobot/project-static/docs/development/apps/migration/model-updates/ipam.html +46 -4
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/best-practices.html +50 -8
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/custom-content.html +46 -4
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/index.html +211 -14
- nautobot/project-static/docs/development/apps/migration/ui-component-framework/migration-steps.html +46 -4
- nautobot/project-static/docs/development/apps/porting-from-netbox.html +46 -4
- nautobot/project-static/docs/development/core/application-registry.html +46 -4
- nautobot/project-static/docs/development/core/best-practices.html +46 -4
- nautobot/project-static/docs/development/core/bootstrap-ui.html +46 -4
- nautobot/project-static/docs/development/core/caching.html +46 -4
- nautobot/project-static/docs/development/core/controllers.html +46 -4
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +73 -74
- nautobot/project-static/docs/development/core/generic-views.html +46 -4
- nautobot/project-static/docs/development/core/getting-started.html +249 -224
- nautobot/project-static/docs/development/core/homepage.html +49 -7
- nautobot/project-static/docs/development/core/index.html +46 -4
- nautobot/project-static/docs/development/core/{local-k8s.html → minikube-dev-environment-for-k8s-jobs.html} +469 -168
- nautobot/project-static/docs/development/core/model-checklist.html +56 -12
- nautobot/project-static/docs/development/core/model-features.html +46 -4
- nautobot/project-static/docs/development/core/natural-keys.html +46 -4
- nautobot/project-static/docs/development/core/navigation-menu.html +46 -4
- nautobot/project-static/docs/development/core/release-checklist.html +49 -7
- nautobot/project-static/docs/development/core/role-internals.html +46 -4
- nautobot/project-static/docs/development/core/settings.html +46 -4
- nautobot/project-static/docs/development/core/style-guide.html +49 -7
- nautobot/project-static/docs/development/core/templates.html +46 -4
- nautobot/project-static/docs/development/core/testing.html +46 -4
- nautobot/project-static/docs/development/core/ui-component-framework.html +369 -273
- nautobot/project-static/docs/development/core/user-preferences.html +46 -4
- nautobot/project-static/docs/development/index.html +46 -4
- nautobot/project-static/docs/development/jobs/index.html +216 -122
- nautobot/project-static/docs/development/jobs/migration/from-v1.html +46 -4
- nautobot/project-static/docs/index.html +54 -23
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_edit_button.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_nav.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_list_view.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_add.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_queue_config.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_completed.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_nav.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_result_pending.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_job_run_form.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_nautobot_login.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_job.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_run_scheduled_job_form.png +0 -0
- nautobot/project-static/docs/media/development/core/kubernetes/k8s_scheduled_job_result.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/buttons-example.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/cluster-type-before-after-example.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/object-fields-panel-example_2.png +0 -0
- nautobot/project-static/docs/media/development/core/ui-component-framework/stats-panel-example-code.png +0 -0
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +47 -7
- nautobot/project-static/docs/overview/design_philosophy.html +46 -4
- nautobot/project-static/docs/release-notes/index.html +52 -12
- nautobot/project-static/docs/release-notes/version-1.0.html +234 -193
- nautobot/project-static/docs/release-notes/version-1.1.html +231 -190
- nautobot/project-static/docs/release-notes/version-1.2.html +306 -265
- nautobot/project-static/docs/release-notes/version-1.3.html +332 -291
- nautobot/project-static/docs/release-notes/version-1.4.html +417 -377
- nautobot/project-static/docs/release-notes/version-1.5.html +605 -566
- nautobot/project-static/docs/release-notes/version-1.6.html +904 -447
- nautobot/project-static/docs/release-notes/version-2.0.html +528 -489
- nautobot/project-static/docs/release-notes/version-2.1.html +363 -324
- nautobot/project-static/docs/release-notes/version-2.2.html +356 -317
- nautobot/project-static/docs/release-notes/version-2.3.html +997 -352
- nautobot/project-static/docs/release-notes/version-2.4.html +525 -101
- nautobot/project-static/docs/requirements.txt +2 -2
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +295 -287
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/ldap.html +46 -4
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/remote.html +46 -4
- nautobot/project-static/docs/user-guide/administration/configuration/authentication/sso.html +48 -6
- nautobot/project-static/docs/user-guide/administration/configuration/index.html +46 -4
- nautobot/project-static/docs/user-guide/administration/configuration/redis.html +46 -4
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +110 -8
- nautobot/project-static/docs/user-guide/administration/configuration/time-zones.html +46 -4
- nautobot/project-static/docs/user-guide/administration/guides/celery-queues.html +46 -4
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +46 -4
- nautobot/project-static/docs/user-guide/administration/guides/health-checks.html +46 -4
- nautobot/project-static/docs/user-guide/administration/guides/permissions.html +46 -4
- nautobot/project-static/docs/user-guide/administration/guides/prometheus-metrics.html +46 -4
- nautobot/project-static/docs/user-guide/administration/guides/replicating-nautobot.html +46 -4
- nautobot/project-static/docs/user-guide/administration/guides/request-profiling.html +46 -4
- nautobot/project-static/docs/user-guide/administration/guides/s3-django-storage.html +48 -6
- nautobot/project-static/docs/user-guide/administration/guides/selinux-troubleshooting.html +46 -4
- nautobot/project-static/docs/user-guide/administration/installation/app-install.html +46 -4
- nautobot/project-static/docs/user-guide/administration/installation/external-authentication.html +46 -4
- nautobot/project-static/docs/user-guide/administration/installation/http-server.html +66 -8
- nautobot/project-static/docs/user-guide/administration/installation/index.html +46 -4
- nautobot/project-static/docs/user-guide/administration/installation/install_system.html +47 -5
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +46 -4
- nautobot/project-static/docs/user-guide/administration/installation/services.html +46 -4
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-netbox.html +46 -4
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +46 -4
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +46 -4
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-shell.html +46 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/database-backup.html +46 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/after-you-upgrade.html +46 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/before-you-upgrade.html +46 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/for-developers.html +46 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/index.html +46 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/ipam/whats-changed.html +49 -8
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/region-and-site-data-migration-guide.html +46 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +46 -4
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuit.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittermination.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/circuittype.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/provider.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloud.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudaccount.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetwork.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudnetworkprefixassignment.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudresourcetype.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservice.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/cloud/cloudservicenetworkassignment.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/cable.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controller.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/controllermanageddevicegroup.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/device.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicefamily.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/manufacturer.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/module.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebay.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/modulebaytemplate.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/moduletype.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerfeed.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerpanel.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rack.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackgroup.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rackreservation.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareimagefile.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/softwareversion.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualchassis.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/virtualdevicecontext.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +50 -12
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/extras/contact.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/extras/team.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/namespace.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/prefix.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/rir.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/routetarget.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/service.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlangroup.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vrf.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/overview/introduction.html +49 -7
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenant.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/tenancy/tenantgroup.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/cluster.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustergroup.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/clustertype.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/virtualmachine.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/wireless/index.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/wireless/radioprofile.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/wireless/supporteddatarate.html +46 -4
- nautobot/project-static/docs/user-guide/core-data-model/wireless/wirelessnetwork.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/contacts-and-teams.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-devices.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/creating-location-types-and-locations.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/index.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/interfaces.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/ipam.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/platforms.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/search-bar.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/tenants.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/getting-started/vlans-and-vlan-groups.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/git-data-source.html +51 -7
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/central-mode.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-1.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/device-group-create-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/radio-profile-create.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/supported-data-rate-create.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-1.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-controller-create-2.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-add.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/images/wireless/wireless-network-create.png +0 -0
- nautobot/project-static/docs/user-guide/feature-guides/ip-address-merge-tool.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/relationships.html +46 -4
- nautobot/project-static/docs/user-guide/feature-guides/software-image-files-and-versions.html +49 -7
- nautobot/project-static/docs/user-guide/feature-guides/wireless-networks-and-controllers.html +9444 -0
- nautobot/project-static/docs/user-guide/index.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/change-logging.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +50 -8
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/customlink.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/events.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/exporttemplate.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/externalintegration.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/graphqlquery.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/imageattachment.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +50 -7
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +49 -7
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobqueue.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/kubernetes-job-support.html +9722 -0
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/napalm.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/objectmetadata.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +47 -5
- nautobot/project-static/docs/user-guide/platform-functionality/rendering-jinja-templates.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +94 -25
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +74 -5
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/ui-related-endpoints.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/role.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/savedview.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/staticgroupassociation.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/users/objectpermission.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/users/token.html +46 -4
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +46 -4
- nautobot/project-static/js/forms.js +1 -1
- nautobot/tenancy/api/views.py +9 -13
- nautobot/tenancy/views.py +4 -2
- nautobot/users/admin.py +1 -1
- nautobot/users/api/serializers.py +5 -4
- nautobot/users/api/views.py +3 -3
- nautobot/virtualization/api/serializers.py +4 -4
- nautobot/virtualization/api/views.py +5 -24
- nautobot/virtualization/filters.py +20 -3
- nautobot/virtualization/models.py +1 -1
- nautobot/virtualization/tables.py +2 -2
- nautobot/virtualization/templates/virtualization/cluster_edit.html +1 -7
- nautobot/virtualization/templates/virtualization/virtualmachine.html +1 -9
- nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +2 -8
- nautobot/virtualization/tests/test_filters.py +17 -0
- nautobot/wireless/filters.py +2 -2
- nautobot/wireless/forms.py +1 -1
- nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +1 -9
- nautobot/wireless/tests/integration/__init__.py +0 -0
- nautobot/wireless/tests/integration/test_radio_profile.py +42 -0
- nautobot/wireless/tests/test_filters.py +29 -1
- nautobot/wireless/tests/test_views.py +22 -1
- nautobot/wireless/views.py +0 -10
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/METADATA +6 -6
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/RECORD +600 -550
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/WHEEL +1 -1
- nautobot/core/fixtures/user-data.json +0 -59
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/NOTICE +0 -0
- {nautobot-2.4.0b1.dist-info → nautobot-2.4.1.dist-info}/entry_points.txt +0 -0
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
<link rel="icon" href="../../assets/favicon.ico">
|
|
21
|
-
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.
|
|
21
|
+
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.49">
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
@@ -2112,6 +2112,27 @@
|
|
|
2112
2112
|
|
|
2113
2113
|
|
|
2114
2114
|
|
|
2115
|
+
|
|
2116
|
+
|
|
2117
|
+
|
|
2118
|
+
|
|
2119
|
+
|
|
2120
|
+
|
|
2121
|
+
<li class="md-nav__item">
|
|
2122
|
+
<a href="../../user-guide/feature-guides/wireless-networks-and-controllers.html" class="md-nav__link">
|
|
2123
|
+
|
|
2124
|
+
|
|
2125
|
+
<span class="md-ellipsis">
|
|
2126
|
+
Wireless Networks and Controllers
|
|
2127
|
+
</span>
|
|
2128
|
+
|
|
2129
|
+
|
|
2130
|
+
</a>
|
|
2131
|
+
</li>
|
|
2132
|
+
|
|
2133
|
+
|
|
2134
|
+
|
|
2135
|
+
|
|
2115
2136
|
</ul>
|
|
2116
2137
|
</nav>
|
|
2117
2138
|
|
|
@@ -5131,6 +5152,27 @@
|
|
|
5131
5152
|
|
|
5132
5153
|
|
|
5133
5154
|
|
|
5155
|
+
<li class="md-nav__item">
|
|
5156
|
+
<a href="../../user-guide/platform-functionality/jobs/kubernetes-job-support.html" class="md-nav__link">
|
|
5157
|
+
|
|
5158
|
+
|
|
5159
|
+
<span class="md-ellipsis">
|
|
5160
|
+
Kubernetes Job Support
|
|
5161
|
+
</span>
|
|
5162
|
+
|
|
5163
|
+
|
|
5164
|
+
</a>
|
|
5165
|
+
</li>
|
|
5166
|
+
|
|
5167
|
+
|
|
5168
|
+
|
|
5169
|
+
|
|
5170
|
+
|
|
5171
|
+
|
|
5172
|
+
|
|
5173
|
+
|
|
5174
|
+
|
|
5175
|
+
|
|
5134
5176
|
<li class="md-nav__item">
|
|
5135
5177
|
<a href="../../user-guide/platform-functionality/jobs/jobbutton.html" class="md-nav__link">
|
|
5136
5178
|
|
|
@@ -7932,30 +7974,6 @@
|
|
|
7932
7974
|
</span>
|
|
7933
7975
|
</a>
|
|
7934
7976
|
|
|
7935
|
-
</li>
|
|
7936
|
-
|
|
7937
|
-
<li class="md-nav__item">
|
|
7938
|
-
<a href="#creating-a-branch" class="md-nav__link">
|
|
7939
|
-
<span class="md-ellipsis">
|
|
7940
|
-
Creating a Branch
|
|
7941
|
-
</span>
|
|
7942
|
-
</a>
|
|
7943
|
-
|
|
7944
|
-
<nav class="md-nav" aria-label="Creating a Branch">
|
|
7945
|
-
<ul class="md-nav__list">
|
|
7946
|
-
|
|
7947
|
-
<li class="md-nav__item">
|
|
7948
|
-
<a href="#prototypes" class="md-nav__link">
|
|
7949
|
-
<span class="md-ellipsis">
|
|
7950
|
-
Prototypes
|
|
7951
|
-
</span>
|
|
7952
|
-
</a>
|
|
7953
|
-
|
|
7954
|
-
</li>
|
|
7955
|
-
|
|
7956
|
-
</ul>
|
|
7957
|
-
</nav>
|
|
7958
|
-
|
|
7959
7977
|
</li>
|
|
7960
7978
|
|
|
7961
7979
|
</ul>
|
|
@@ -8059,15 +8077,6 @@
|
|
|
8059
8077
|
</span>
|
|
8060
8078
|
</a>
|
|
8061
8079
|
|
|
8062
|
-
</li>
|
|
8063
|
-
|
|
8064
|
-
<li class="md-nav__item">
|
|
8065
|
-
<a href="#install-markdownlint-cli" class="md-nav__link">
|
|
8066
|
-
<span class="md-ellipsis">
|
|
8067
|
-
Install markdownlint-cli
|
|
8068
|
-
</span>
|
|
8069
|
-
</a>
|
|
8070
|
-
|
|
8071
8080
|
</li>
|
|
8072
8081
|
|
|
8073
8082
|
<li class="md-nav__item">
|
|
@@ -8150,6 +8159,30 @@
|
|
|
8150
8159
|
<nav class="md-nav" aria-label="Working in your Development Environment">
|
|
8151
8160
|
<ul class="md-nav__list">
|
|
8152
8161
|
|
|
8162
|
+
<li class="md-nav__item">
|
|
8163
|
+
<a href="#creating-a-branch" class="md-nav__link">
|
|
8164
|
+
<span class="md-ellipsis">
|
|
8165
|
+
Creating a Branch
|
|
8166
|
+
</span>
|
|
8167
|
+
</a>
|
|
8168
|
+
|
|
8169
|
+
<nav class="md-nav" aria-label="Creating a Branch">
|
|
8170
|
+
<ul class="md-nav__list">
|
|
8171
|
+
|
|
8172
|
+
<li class="md-nav__item">
|
|
8173
|
+
<a href="#prototypes" class="md-nav__link">
|
|
8174
|
+
<span class="md-ellipsis">
|
|
8175
|
+
Prototypes
|
|
8176
|
+
</span>
|
|
8177
|
+
</a>
|
|
8178
|
+
|
|
8179
|
+
</li>
|
|
8180
|
+
|
|
8181
|
+
</ul>
|
|
8182
|
+
</nav>
|
|
8183
|
+
|
|
8184
|
+
</li>
|
|
8185
|
+
|
|
8153
8186
|
<li class="md-nav__item">
|
|
8154
8187
|
<a href="#creating-a-superuser" class="md-nav__link">
|
|
8155
8188
|
<span class="md-ellipsis">
|
|
@@ -8612,11 +8645,11 @@
|
|
|
8612
8645
|
|
|
8613
8646
|
|
|
8614
8647
|
<li class="md-nav__item">
|
|
8615
|
-
<a href="
|
|
8648
|
+
<a href="minikube-dev-environment-for-k8s-jobs.html" class="md-nav__link">
|
|
8616
8649
|
|
|
8617
8650
|
|
|
8618
8651
|
<span class="md-ellipsis">
|
|
8619
|
-
|
|
8652
|
+
Minikube Dev Environment for K8s Jobs
|
|
8620
8653
|
</span>
|
|
8621
8654
|
|
|
8622
8655
|
|
|
@@ -9567,30 +9600,6 @@
|
|
|
9567
9600
|
</span>
|
|
9568
9601
|
</a>
|
|
9569
9602
|
|
|
9570
|
-
</li>
|
|
9571
|
-
|
|
9572
|
-
<li class="md-nav__item">
|
|
9573
|
-
<a href="#creating-a-branch" class="md-nav__link">
|
|
9574
|
-
<span class="md-ellipsis">
|
|
9575
|
-
Creating a Branch
|
|
9576
|
-
</span>
|
|
9577
|
-
</a>
|
|
9578
|
-
|
|
9579
|
-
<nav class="md-nav" aria-label="Creating a Branch">
|
|
9580
|
-
<ul class="md-nav__list">
|
|
9581
|
-
|
|
9582
|
-
<li class="md-nav__item">
|
|
9583
|
-
<a href="#prototypes" class="md-nav__link">
|
|
9584
|
-
<span class="md-ellipsis">
|
|
9585
|
-
Prototypes
|
|
9586
|
-
</span>
|
|
9587
|
-
</a>
|
|
9588
|
-
|
|
9589
|
-
</li>
|
|
9590
|
-
|
|
9591
|
-
</ul>
|
|
9592
|
-
</nav>
|
|
9593
|
-
|
|
9594
9603
|
</li>
|
|
9595
9604
|
|
|
9596
9605
|
</ul>
|
|
@@ -9694,15 +9703,6 @@
|
|
|
9694
9703
|
</span>
|
|
9695
9704
|
</a>
|
|
9696
9705
|
|
|
9697
|
-
</li>
|
|
9698
|
-
|
|
9699
|
-
<li class="md-nav__item">
|
|
9700
|
-
<a href="#install-markdownlint-cli" class="md-nav__link">
|
|
9701
|
-
<span class="md-ellipsis">
|
|
9702
|
-
Install markdownlint-cli
|
|
9703
|
-
</span>
|
|
9704
|
-
</a>
|
|
9705
|
-
|
|
9706
9706
|
</li>
|
|
9707
9707
|
|
|
9708
9708
|
<li class="md-nav__item">
|
|
@@ -9785,6 +9785,30 @@
|
|
|
9785
9785
|
<nav class="md-nav" aria-label="Working in your Development Environment">
|
|
9786
9786
|
<ul class="md-nav__list">
|
|
9787
9787
|
|
|
9788
|
+
<li class="md-nav__item">
|
|
9789
|
+
<a href="#creating-a-branch" class="md-nav__link">
|
|
9790
|
+
<span class="md-ellipsis">
|
|
9791
|
+
Creating a Branch
|
|
9792
|
+
</span>
|
|
9793
|
+
</a>
|
|
9794
|
+
|
|
9795
|
+
<nav class="md-nav" aria-label="Creating a Branch">
|
|
9796
|
+
<ul class="md-nav__list">
|
|
9797
|
+
|
|
9798
|
+
<li class="md-nav__item">
|
|
9799
|
+
<a href="#prototypes" class="md-nav__link">
|
|
9800
|
+
<span class="md-ellipsis">
|
|
9801
|
+
Prototypes
|
|
9802
|
+
</span>
|
|
9803
|
+
</a>
|
|
9804
|
+
|
|
9805
|
+
</li>
|
|
9806
|
+
|
|
9807
|
+
</ul>
|
|
9808
|
+
</nav>
|
|
9809
|
+
|
|
9810
|
+
</li>
|
|
9811
|
+
|
|
9788
9812
|
<li class="md-nav__item">
|
|
9789
9813
|
<a href="#creating-a-superuser" class="md-nav__link">
|
|
9790
9814
|
<span class="md-ellipsis">
|
|
@@ -10108,55 +10132,29 @@
|
|
|
10108
10132
|
<h3 id="setting-up-your-remotes">Setting up your Remotes<a class="headerlink" href="#setting-up-your-remotes" title="Permanent link">¶</a></h3>
|
|
10109
10133
|
<p>Remote repos are managed using the <code>git remote</code> command.</p>
|
|
10110
10134
|
<p>Upon cloning Nautobot for the first time, you will have only a single remote:</p>
|
|
10111
|
-
<!-- markdownlint-disable MD010 -->
|
|
10112
|
-
|
|
10113
10135
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>git remote -v
|
|
10114
10136
|
</code></pre></div>
|
|
10115
10137
|
<p>Example output:</p>
|
|
10116
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>origin
|
|
10117
|
-
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>origin
|
|
10138
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>origin git@github.com:yourusername/nautobot.git (fetch)
|
|
10139
|
+
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a>origin git@github.com:yourusername/nautobot.git (push)
|
|
10118
10140
|
</code></pre></div>
|
|
10119
|
-
<!-- markdownlint-enable MD010 -->
|
|
10120
|
-
|
|
10121
10141
|
<p>Add the official Nautobot repo as a the <code>upstream</code> remote:</p>
|
|
10122
10142
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>git remote add upstream git@github.com:nautobot/nautobot.git
|
|
10123
10143
|
</code></pre></div>
|
|
10124
10144
|
<p>View your remotes again to confirm you've got both <code>origin</code> pointing to your fork and <code>upstream</code> pointing to the official repo:</p>
|
|
10125
|
-
<!-- markdownlint-disable MD010 -->
|
|
10126
|
-
|
|
10127
10145
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>git remote -v
|
|
10128
10146
|
</code></pre></div>
|
|
10129
10147
|
<p>Example output:</p>
|
|
10130
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>origin
|
|
10131
|
-
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>origin
|
|
10148
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>origin git@github.com:yourusername/nautobot.git (fetch)
|
|
10149
|
+
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>origin git@github.com:yourusername/nautobot.git (push)
|
|
10132
10150
|
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>upstream git@github.com:nautobot/nautobot.git (fetch)
|
|
10133
10151
|
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a>upstream git@github.com:nautobot/nautobot.git (push)
|
|
10134
10152
|
</code></pre></div>
|
|
10135
|
-
<!-- markdownlint-enable MD010 -->
|
|
10136
|
-
|
|
10137
10153
|
<p>You're now ready to proceed to the next steps.</p>
|
|
10138
10154
|
<div class="admonition hint">
|
|
10139
10155
|
<p class="admonition-title">Hint</p>
|
|
10140
10156
|
<p>You will always <strong>push</strong> changes to <code>origin</code> (your fork) and <strong>pull</strong> changes from <code>upstream</code> (official repo).</p>
|
|
10141
10157
|
</div>
|
|
10142
|
-
<h3 id="creating-a-branch">Creating a Branch<a class="headerlink" href="#creating-a-branch" title="Permanent link">¶</a></h3>
|
|
10143
|
-
<p>Before you make any changes, always create a new branch. Again, for bug fixes and minor features, you'll want to create your branches from the <code>develop</code> branch, while for major new features, you'll branch from <code>next</code> instead.</p>
|
|
10144
|
-
<p>Before you ever create a new branch, always checkout the appropriate branch and make sure you you've got the latest changes from <code>upstream</code>:</p>
|
|
10145
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>git checkout develop
|
|
10146
|
-
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>git pull upstream develop
|
|
10147
|
-
</code></pre></div>
|
|
10148
|
-
<div class="admonition warning">
|
|
10149
|
-
<p class="admonition-title">Warning</p>
|
|
10150
|
-
<p>If you do not do this, you run the risk of having merge conflicts in your branch, and that's never fun to deal with. Trust us on this one.</p>
|
|
10151
|
-
</div>
|
|
10152
|
-
<p>Now that you've got the latest upstream changes, create your branch. Whether you're creating a branch off a fork or working against the Nautobot origin repo, you should follow this convention for naming your branch: <code>u/yourusername-0000-branch-summary</code>, where <code>0000</code> is the related GitHub issue number and <code>yourusername</code> is your GitHub username. For example:</p>
|
|
10153
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>git checkout -b u/yourusername-1234-next-amazing-feature
|
|
10154
|
-
</code></pre></div>
|
|
10155
|
-
<p>If you do not have a relevant GitHub issue, please consider opening one to document the context behind your changes.</p>
|
|
10156
|
-
<h4 id="prototypes">Prototypes<a class="headerlink" href="#prototypes" title="Permanent link">¶</a></h4>
|
|
10157
|
-
<p>Sometimes code is written as a proof of concept or early implementation candidate but is not quite ready to be merged, or may be picked up by another author sometime in the future. In that case, the convention is to use the <code>prototype/</code> prefix to the branch name and not requiring the original authors username. In that scenario, using the example above, you would instead:</p>
|
|
10158
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>git checkout -b prototype/1234-next-amazing-feature
|
|
10159
|
-
</code></pre></div>
|
|
10160
10158
|
<h2 id="enabling-pre-commit-hooks">Enabling Pre-Commit Hooks<a class="headerlink" href="#enabling-pre-commit-hooks" title="Permanent link">¶</a></h2>
|
|
10161
10159
|
<p>Nautobot ships with a <a href="https://githooks.com/">Git pre-commit hook</a> script that automatically checks for style compliance and missing database migrations prior to committing changes. This helps avoid erroneous commits that result in CI test failures.</p>
|
|
10162
10160
|
<div class="admonition note">
|
|
@@ -10164,15 +10162,15 @@
|
|
|
10164
10162
|
<p>This pre-commit hook currently only supports the Python Virtual Environment Workflow.</p>
|
|
10165
10163
|
</div>
|
|
10166
10164
|
<p>You are encouraged to enable it by creating a link to <code>scripts/git-hooks/pre-commit</code>:</p>
|
|
10167
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10168
|
-
<a id="__codelineno-
|
|
10165
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>cd .git/hooks/
|
|
10166
|
+
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a>ln -s ../../scripts/git-hooks/pre-commit
|
|
10169
10167
|
</code></pre></div>
|
|
10170
10168
|
<h2 id="setting-up-your-development-environment">Setting up your Development Environment<a class="headerlink" href="#setting-up-your-development-environment" title="Permanent link">¶</a></h2>
|
|
10171
10169
|
<p>Getting started with Nautobot development is pretty straightforward, and should feel very familiar to anyone with Django development experience. We can recommend either a <a href="#docker-compose-workflow">Docker Compose workflow</a> (if you don't want to install dependencies such as PostgreSQL and Redis directly onto your system) or a <a href="#python-virtual-environment-workflow">Python virtual environment workflow</a>.</p>
|
|
10172
10170
|
<h3 id="windows-development">Windows Development<a class="headerlink" href="#windows-development" title="Permanent link">¶</a></h3>
|
|
10173
10171
|
<p>The Docker Compose development workflow on Windows Subsystem for Linux (WSL) has been tested successfully with <a href="https://docs.docker.com/desktop/windows/wsl/">Docker Desktop using the WSL2 backend</a> and the Ubuntu 20.04 WSL2 distribution. The Poetry workflow has also been tested successfully on the Ubuntu 20.04 WSL2 distribution.</p>
|
|
10174
10172
|
<p>To install WSL2 and Ubuntu follow the instructions from the <a href="https://learn.microsoft.com/en-us/windows/wsl/install">WSL installation guide</a> or if running Windows 10 version 2004 and higher you can open an administrator Powershell terminal and enter the following command:</p>
|
|
10175
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10173
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="n">wsl</span> <span class="p">-</span><span class="n">-install</span>
|
|
10176
10174
|
</code></pre></div>
|
|
10177
10175
|
<p>This will install the WSL2 Ubuntu distribution. Reboot if prompted. After the image installs successfully you may install Docker Desktop with the WSL2 backend.</p>
|
|
10178
10176
|
<h3 id="docker-compose-workflow">Docker Compose Workflow<a class="headerlink" href="#docker-compose-workflow" title="Permanent link">¶</a></h3>
|
|
@@ -10184,55 +10182,58 @@
|
|
|
10184
10182
|
</div>
|
|
10185
10183
|
<h4 id="install-invoke">Install Invoke<a class="headerlink" href="#install-invoke" title="Permanent link">¶</a></h4>
|
|
10186
10184
|
<p>Because it is used to execute all common Docker workflow tasks, Invoke must be installed for your user environment. On most systems, if you're installing without root/superuser permissions, the default will install into your local user environment.</p>
|
|
10187
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10185
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>pip3 install invoke
|
|
10188
10186
|
</code></pre></div>
|
|
10189
10187
|
<p>If you run into issues, you may also deliberately tell <code>pip3</code> to install into your user environment by adding the <code>--user</code> flag:</p>
|
|
10190
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10188
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>pip3 install --user invoke
|
|
10191
10189
|
</code></pre></div>
|
|
10192
10190
|
<p>If you encounter an <a href="https://peps.python.org/pep-0668/"><code>externally-managed-environment</code></a> error, you may need to install invoke through your OS's package manager. For example, <code>apt-get install python3-invoke</code> for Debian.</p>
|
|
10193
10191
|
<p>Please see the <a href="https://pip.pypa.io/en/stable/user_guide/#user-installs">official documentation on Pip user installs</a> for more information.</p>
|
|
10194
10192
|
<h4 id="list-invoke-tasks">List Invoke Tasks<a class="headerlink" href="#list-invoke-tasks" title="Permanent link">¶</a></h4>
|
|
10195
10193
|
<p>Now that you have an <code>invoke</code> command, list the tasks defined in <code>tasks.py</code>:</p>
|
|
10196
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10194
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>invoke --list
|
|
10197
10195
|
</code></pre></div>
|
|
10198
10196
|
<p>Example output:</p>
|
|
10199
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10200
|
-
<a id="__codelineno-
|
|
10201
|
-
<a id="__codelineno-
|
|
10202
|
-
<a id="__codelineno-
|
|
10203
|
-
<a id="__codelineno-
|
|
10204
|
-
<a id="__codelineno-
|
|
10205
|
-
<a id="__codelineno-
|
|
10206
|
-
<a id="__codelineno-
|
|
10207
|
-
<a id="__codelineno-
|
|
10208
|
-
<a id="__codelineno-
|
|
10209
|
-
<a id="__codelineno-
|
|
10210
|
-
<a id="__codelineno-
|
|
10211
|
-
<a id="__codelineno-
|
|
10212
|
-
<a id="__codelineno-
|
|
10213
|
-
<a id="__codelineno-
|
|
10214
|
-
<a id="__codelineno-
|
|
10215
|
-
<a id="__codelineno-
|
|
10216
|
-
<a id="__codelineno-
|
|
10217
|
-
<a id="__codelineno-
|
|
10218
|
-
<a id="__codelineno-
|
|
10219
|
-
<a id="__codelineno-
|
|
10220
|
-
<a id="__codelineno-
|
|
10221
|
-
<a id="__codelineno-
|
|
10222
|
-
<a id="__codelineno-
|
|
10223
|
-
<a id="__codelineno-
|
|
10224
|
-
<a id="__codelineno-
|
|
10225
|
-
<a id="__codelineno-
|
|
10226
|
-
<a id="__codelineno-
|
|
10227
|
-
<a id="__codelineno-
|
|
10228
|
-
<a id="__codelineno-
|
|
10229
|
-
<a id="__codelineno-
|
|
10230
|
-
<a id="__codelineno-
|
|
10231
|
-
<a id="__codelineno-
|
|
10232
|
-
<a id="__codelineno-
|
|
10233
|
-
<a id="__codelineno-
|
|
10234
|
-
<a id="__codelineno-
|
|
10235
|
-
<a id="__codelineno-
|
|
10197
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>Available tasks:
|
|
10198
|
+
<a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a>
|
|
10199
|
+
<a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a> branch Switch to a different Git branch, creating it if requested.
|
|
10200
|
+
<a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a> build Build Nautobot docker image.
|
|
10201
|
+
<a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a> build-and-check-docs Build docs for use within Nautobot.
|
|
10202
|
+
<a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a> build-dependencies
|
|
10203
|
+
<a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a> buildx Build Nautobot docker image using the experimental buildx docker functionality (multi-arch
|
|
10204
|
+
<a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a> capability).
|
|
10205
|
+
<a id="__codelineno-14-9" name="__codelineno-14-9" href="#__codelineno-14-9"></a> check-migrations Check for missing migrations.
|
|
10206
|
+
<a id="__codelineno-14-10" name="__codelineno-14-10" href="#__codelineno-14-10"></a> check-schema Render the REST API schema and check for problems.
|
|
10207
|
+
<a id="__codelineno-14-11" name="__codelineno-14-11" href="#__codelineno-14-11"></a> cli Launch a bash shell inside the running Nautobot (or other) Docker container.
|
|
10208
|
+
<a id="__codelineno-14-12" name="__codelineno-14-12" href="#__codelineno-14-12"></a> createsuperuser Create a new Nautobot superuser account (default: "admin"), will prompt for password.
|
|
10209
|
+
<a id="__codelineno-14-13" name="__codelineno-14-13" href="#__codelineno-14-13"></a> debug Start Nautobot and its dependencies in debug mode.
|
|
10210
|
+
<a id="__codelineno-14-14" name="__codelineno-14-14" href="#__codelineno-14-14"></a> destroy Destroy all containers and volumes.
|
|
10211
|
+
<a id="__codelineno-14-15" name="__codelineno-14-15" href="#__codelineno-14-15"></a> docker-push Tags and pushes docker images to the appropriate repos, intended for release use only.
|
|
10212
|
+
<a id="__codelineno-14-16" name="__codelineno-14-16" href="#__codelineno-14-16"></a> dumpdata Dump data from database to db_output file.
|
|
10213
|
+
<a id="__codelineno-14-17" name="__codelineno-14-17" href="#__codelineno-14-17"></a> hadolint Check Dockerfile for hadolint compliance and other style issues.
|
|
10214
|
+
<a id="__codelineno-14-18" name="__codelineno-14-18" href="#__codelineno-14-18"></a> integration-test Run Nautobot integration tests.
|
|
10215
|
+
<a id="__codelineno-14-19" name="__codelineno-14-19" href="#__codelineno-14-19"></a> loaddata Load data from file.
|
|
10216
|
+
<a id="__codelineno-14-20" name="__codelineno-14-20" href="#__codelineno-14-20"></a> logs View the logs of a docker compose service.
|
|
10217
|
+
<a id="__codelineno-14-21" name="__codelineno-14-21" href="#__codelineno-14-21"></a> makemigrations Perform makemigrations operation in Django.
|
|
10218
|
+
<a id="__codelineno-14-22" name="__codelineno-14-22" href="#__codelineno-14-22"></a> markdownlint Lint Markdown files.
|
|
10219
|
+
<a id="__codelineno-14-23" name="__codelineno-14-23" href="#__codelineno-14-23"></a> migrate Perform migrate operation in Django.
|
|
10220
|
+
<a id="__codelineno-14-24" name="__codelineno-14-24" href="#__codelineno-14-24"></a> migration-test Test database migration from a given dataset to latest Nautobot schema.
|
|
10221
|
+
<a id="__codelineno-14-25" name="__codelineno-14-25" href="#__codelineno-14-25"></a> nbshell Launch an interactive Nautobot shell.
|
|
10222
|
+
<a id="__codelineno-14-26" name="__codelineno-14-26" href="#__codelineno-14-26"></a> performance-test Run Nautobot performance tests.
|
|
10223
|
+
<a id="__codelineno-14-27" name="__codelineno-14-27" href="#__codelineno-14-27"></a> post-upgrade Performs Nautobot common post-upgrade operations using a single entrypoint.
|
|
10224
|
+
<a id="__codelineno-14-28" name="__codelineno-14-28" href="#__codelineno-14-28"></a> pylint Perform static analysis of Nautobot code.
|
|
10225
|
+
<a id="__codelineno-14-29" name="__codelineno-14-29" href="#__codelineno-14-29"></a> restart Gracefully restart containers.
|
|
10226
|
+
<a id="__codelineno-14-30" name="__codelineno-14-30" href="#__codelineno-14-30"></a> ruff Run ruff to perform code formatting and linting.
|
|
10227
|
+
<a id="__codelineno-14-31" name="__codelineno-14-31" href="#__codelineno-14-31"></a> serve-docs Runs local instance of mkdocs serve on port 8001 (ctrl-c to stop).
|
|
10228
|
+
<a id="__codelineno-14-32" name="__codelineno-14-32" href="#__codelineno-14-32"></a> showmigrations Perform showmigrations operation in Django.
|
|
10229
|
+
<a id="__codelineno-14-33" name="__codelineno-14-33" href="#__codelineno-14-33"></a> start Start Nautobot and its dependencies in detached mode.
|
|
10230
|
+
<a id="__codelineno-14-34" name="__codelineno-14-34" href="#__codelineno-14-34"></a> stop Stop Nautobot and its dependencies.
|
|
10231
|
+
<a id="__codelineno-14-35" name="__codelineno-14-35" href="#__codelineno-14-35"></a> tests Run all linters and unit tests.
|
|
10232
|
+
<a id="__codelineno-14-36" name="__codelineno-14-36" href="#__codelineno-14-36"></a> unittest Run Nautobot unit tests.
|
|
10233
|
+
<a id="__codelineno-14-37" name="__codelineno-14-37" href="#__codelineno-14-37"></a> unittest-coverage Report on code test coverage as measured by 'invoke unittest'.
|
|
10234
|
+
<a id="__codelineno-14-38" name="__codelineno-14-38" href="#__codelineno-14-38"></a> version Show the version of Nautobot Python package or bump it when a valid bump rule is provided.
|
|
10235
|
+
<a id="__codelineno-14-39" name="__codelineno-14-39" href="#__codelineno-14-39"></a> vscode Launch Visual Studio Code with the appropriate Environment variables to run in a container.
|
|
10236
|
+
<a id="__codelineno-14-40" name="__codelineno-14-40" href="#__codelineno-14-40"></a> yamllint Run yamllint to validate formatting applies to YAML standards.
|
|
10236
10237
|
</code></pre></div>
|
|
10237
10238
|
<h4 id="using-docker-with-invoke">Using Docker with Invoke<a class="headerlink" href="#using-docker-with-invoke" title="Permanent link">¶</a></h4>
|
|
10238
10239
|
<details class="version-changed">
|
|
@@ -10241,14 +10242,17 @@
|
|
|
10241
10242
|
</details>
|
|
10242
10243
|
<p>A development environment can be easily started up from the root of the project using the following commands:</p>
|
|
10243
10244
|
<ul>
|
|
10244
|
-
<li><code>invoke
|
|
10245
|
+
<li><code>invoke branch</code> - Creates or switches to the appropriate Git branch</li>
|
|
10246
|
+
<li><code>invoke build</code> - Builds Nautobot docker images appropriate to the current Git branch</li>
|
|
10245
10247
|
<li><code>invoke migrate</code> - Performs database migration operation in Django</li>
|
|
10246
10248
|
<li><code>invoke debug</code> - Starts Docker containers for Nautobot, PostgreSQL, Redis, Celery, and Celery Beat in debug mode and attaches their output to the terminal in the foreground. You may enter Control-C to stop the containers</li>
|
|
10247
10249
|
</ul>
|
|
10248
10250
|
<p>Additional useful commands for the development environment:</p>
|
|
10249
10251
|
<ul>
|
|
10250
|
-
<li><code>invoke start [-s servicename]</code> - Starts Docker containers for Nautobot, PostgreSQL, Redis, NGINX, Celery, and Celery Beat (or a specific container/service, such as <code>invoke start -s redis</code>) to run in the background
|
|
10251
|
-
<li><code>invoke
|
|
10252
|
+
<li><code>invoke start [-s servicename]</code> - Starts Docker containers for Nautobot, PostgreSQL, Redis, NGINX, Celery, and Celery Beat (or a specific container/service, such as <code>invoke start -s redis</code>) to run in the background</li>
|
|
10253
|
+
<li><code>invoke logs [-s servicename]</code> - View the logs of the containers (or a specific container/service, such as <code>invoke logs -s nautobot</code>)</li>
|
|
10254
|
+
<li><code>invoke nbshell</code> - Launches a Nautobot Python shell inside the Nautobot container</li>
|
|
10255
|
+
<li><code>invoke cli [-s servicename]</code> - Launches a <code>bash</code> shell inside the specified service container (if none is specified, defaults to the Nautobot container)</li>
|
|
10252
10256
|
<li><code>invoke stop [-s servicename]</code> - Stops all containers (or a specific container/service) created by <code>invoke start</code></li>
|
|
10253
10257
|
<li><code>invoke createsuperuser</code> - Creates a superuser account for the Nautobot application</li>
|
|
10254
10258
|
</ul>
|
|
@@ -10278,7 +10282,7 @@
|
|
|
10278
10282
|
<h4 id="install-poetry">Install Poetry<a class="headerlink" href="#install-poetry" title="Permanent link">¶</a></h4>
|
|
10279
10283
|
<p><a href="https://python-poetry.org/docs/">Poetry</a> is a tool for dependency management and packaging in Python. It allows you to declare the libraries your project depends on and it will manage (install/update/remove) them for you. It will also manage virtual environments automatically, and allow for publishing packages to the <a href="https://pypi.org">Python Package Index</a>.</p>
|
|
10280
10284
|
<p>You may install Poetry in your user environment by running:</p>
|
|
10281
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10285
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>curl -sSL https://install.python-poetry.org | python3 -
|
|
10282
10286
|
</code></pre></div>
|
|
10283
10287
|
<details class="version-changed">
|
|
10284
10288
|
<summary>Changed in version 1.5.6</summary>
|
|
@@ -10293,17 +10297,13 @@
|
|
|
10293
10297
|
<p>For detailed installation instructions, please see the <a href="https://python-poetry.org/docs/#installation">official Poetry installation guide</a>.</p>
|
|
10294
10298
|
<h4 id="install-hadolint">Install Hadolint<a class="headerlink" href="#install-hadolint" title="Permanent link">¶</a></h4>
|
|
10295
10299
|
<p><a href="https://github.com/hadolint/hadolint">Hadolint</a> is a tool used to validate and lint Dockerfiles to ensure we are following best practices. On macOS with <a href="https://brew.sh/">Homebrew</a> you can install Hadolint by running:</p>
|
|
10296
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10297
|
-
</code></pre></div>
|
|
10298
|
-
<h4 id="install-markdownlint-cli">Install markdownlint-cli<a class="headerlink" href="#install-markdownlint-cli" title="Permanent link">¶</a></h4>
|
|
10299
|
-
<p><a href="https://github.com/igorshubovych/markdownlint-cli">markdownlint-cli</a> is a tool used to validate and lint Markdown files, such as Nautobot's documentation, to ensure that they are correctly constructed. On macOS with <a href="https://brew.sh/">Homebrew</a> you can install markdownlint-cli by running:</p>
|
|
10300
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>brew install markdownlint-cli
|
|
10300
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>brew install hadolint
|
|
10301
10301
|
</code></pre></div>
|
|
10302
10302
|
<h4 id="creating-a-python-virtual-environment">Creating a Python Virtual Environment<a class="headerlink" href="#creating-a-python-virtual-environment" title="Permanent link">¶</a></h4>
|
|
10303
10303
|
<p>A Python <a href="https://docs.python.org/3/tutorial/venv.html">virtual environment</a> (or <em>virtualenv</em>) is like a container for a set of Python packages. A virtualenv allow you to build environments suited to specific projects without interfering with system packages or other projects. When installed per the documentation, Nautobot uses a virtual environment in production.</p>
|
|
10304
10304
|
<p>For Nautobot development, we have selected Poetry, which will transparently create a virtualenv for you, automatically install all dependencies required for Nautobot to operate, and will also install the <code>nautobot-server</code> CLI command that you will utilize to interact with Nautobot from here on out.</p>
|
|
10305
10305
|
<p>Bootstrap your virtual environment using <code>poetry install</code>:</p>
|
|
10306
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10306
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>poetry install
|
|
10307
10307
|
</code></pre></div>
|
|
10308
10308
|
<div class="admonition hint">
|
|
10309
10309
|
<p class="admonition-title">Hint</p>
|
|
@@ -10311,44 +10311,45 @@
|
|
|
10311
10311
|
</div>
|
|
10312
10312
|
<p>This will create automatically create a virtualenv in your home directory, which houses a virtual copy of the Python executable and its related libraries and tooling. When running Nautobot for development, it will be run using the Python binary at found within the virtualenv.</p>
|
|
10313
10313
|
<p>Once created, you may activate the virtual environment using <code>poetry shell</code>:</p>
|
|
10314
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10314
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>poetry shell
|
|
10315
10315
|
</code></pre></div>
|
|
10316
10316
|
<p>Example output:</p>
|
|
10317
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10318
|
-
<a id="__codelineno-
|
|
10319
|
-
<a id="__codelineno-
|
|
10320
|
-
<a id="__codelineno-
|
|
10317
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>Spawning shell within /home/example/.cache/pypoetry/virtualenvs/nautobot-Ams_xyDt-py3.12
|
|
10318
|
+
<a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a>
|
|
10319
|
+
<a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a>. /home/example/.cache/pypoetry/virtualenvs/nautobot-Ams_xyDt-py3.12/bin/activate
|
|
10320
|
+
<a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a>(nautobot-Ams_xyDt-py3.12) $
|
|
10321
10321
|
</code></pre></div>
|
|
10322
10322
|
<p>Notice that the console prompt changes to indicate the active environment. This updates the necessary system environment variables to ensure that any Python scripts are run within the virtual environment.</p>
|
|
10323
10323
|
<p>Observe also that the <code>python</code> interpreter is bound within the virtualenv:</p>
|
|
10324
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10324
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>which python
|
|
10325
10325
|
</code></pre></div>
|
|
10326
10326
|
<p>Example output:</p>
|
|
10327
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10327
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a>(nautobot-Ams_xyDt-py3.12) $ /home/example/.cache/pypoetry/virtualenvs/nautobot-Ams_xyDt-py3.12/bin/python
|
|
10328
10328
|
</code></pre></div>
|
|
10329
10329
|
<p>To exit the virtual shell, use <code>exit</code>:</p>
|
|
10330
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10330
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a>exit
|
|
10331
10331
|
</code></pre></div>
|
|
10332
10332
|
<p>Example output:</p>
|
|
10333
|
-
|
|
10333
|
+
<!-- pyml disable-num-lines 3 commands-show-output -->
|
|
10334
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a>$
|
|
10334
10335
|
</code></pre></div>
|
|
10335
10336
|
<h4 id="working-with-poetry">Working with Poetry<a class="headerlink" href="#working-with-poetry" title="Permanent link">¶</a></h4>
|
|
10336
10337
|
<p>Poetry automatically installs your dependencies. However, if you need to install any additional dependencies this can be done with <code>pip</code>. For example, if you really like using <code>ipython</code> for development:</p>
|
|
10337
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10338
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a>pip3 install ipython
|
|
10338
10339
|
</code></pre></div>
|
|
10339
10340
|
<p>Example output:</p>
|
|
10340
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10341
|
-
<a id="__codelineno-
|
|
10342
|
-
<a id="__codelineno-
|
|
10341
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>Collecting ipython
|
|
10342
|
+
<a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a> Using cached ipython-7.20.0-py3-none-any.whl (784 kB)
|
|
10343
|
+
<a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a> ...
|
|
10343
10344
|
</code></pre></div>
|
|
10344
10345
|
<ul>
|
|
10345
10346
|
<li>Install verify that you have the proper dependencies installed and are in the virtual environment via Poetry. This also ensures that you have the proper mkdocs themes installed.</li>
|
|
10346
10347
|
</ul>
|
|
10347
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10348
|
-
<a id="__codelineno-
|
|
10348
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-26-1" name="__codelineno-26-1" href="#__codelineno-26-1"></a>poetry<span class="w"> </span>shell
|
|
10349
|
+
<a id="__codelineno-26-2" name="__codelineno-26-2" href="#__codelineno-26-2"></a>poetry<span class="w"> </span>install
|
|
10349
10350
|
</code></pre></div>
|
|
10350
10351
|
<p>It may not always be convenient to enter into the virtual shell just to run programs. You may also execute a given command ad hoc within the project's virtual shell by using <code>poetry run</code>:</p>
|
|
10351
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10352
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1" href="#__codelineno-27-1"></a>poetry run mkdocs serve
|
|
10352
10353
|
</code></pre></div>
|
|
10353
10354
|
<p>Check out the <a href="https://python-poetry.org/docs/basic-usage/">Poetry usage guide</a> for more tips.</p>
|
|
10354
10355
|
<h4 id="configuring-nautobot">Configuring Nautobot<a class="headerlink" href="#configuring-nautobot" title="Permanent link">¶</a></h4>
|
|
@@ -10363,20 +10364,20 @@
|
|
|
10363
10364
|
<p>Nautobot's configuration file is <code>nautobot_config.py</code>.</p>
|
|
10364
10365
|
<h5 id="initializing-a-config">Initializing a Config<a class="headerlink" href="#initializing-a-config" title="Permanent link">¶</a></h5>
|
|
10365
10366
|
<p>You may also initialize a new configuration using <code>nautobot-server init</code>:</p>
|
|
10366
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10367
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-28-1" name="__codelineno-28-1" href="#__codelineno-28-1"></a>nautobot-server init
|
|
10367
10368
|
</code></pre></div>
|
|
10368
10369
|
<p>Example output:</p>
|
|
10369
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10370
|
-
<a id="__codelineno-
|
|
10371
|
-
<a id="__codelineno-
|
|
10372
|
-
<a id="__codelineno-
|
|
10373
|
-
<a id="__codelineno-
|
|
10370
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a>Nautobot would like to send anonymized installation metrics to the project's maintainers.
|
|
10371
|
+
<a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a>These metrics include the installed Nautobot version, the Python version in use, an anonymous "deployment ID", and a list of one-way-hashed names of enabled Nautobot Apps and their versions.
|
|
10372
|
+
<a id="__codelineno-29-3" name="__codelineno-29-3" href="#__codelineno-29-3"></a>Allow Nautobot to send these metrics? [y/n]: n
|
|
10373
|
+
<a id="__codelineno-29-4" name="__codelineno-29-4" href="#__codelineno-29-4"></a>Installation metrics will not be sent by default.
|
|
10374
|
+
<a id="__codelineno-29-5" name="__codelineno-29-5" href="#__codelineno-29-5"></a>Configuration file created at /home/example/.nautobot/nautobot_config.py
|
|
10374
10375
|
</code></pre></div>
|
|
10375
10376
|
<p>You may also specify alternate file locations. Please refer to <a href="../../user-guide/administration/configuration/index.html">Configuring Nautobot</a> for how to do that.</p>
|
|
10376
10377
|
<h5 id="using-the-development-config">Using the Development Config<a class="headerlink" href="#using-the-development-config" title="Permanent link">¶</a></h5>
|
|
10377
10378
|
<p>A <code>nautobot_config.py</code> suitable for development purposes can be found at <code>development/nautobot_config.py</code>. You may customize the values there or utilize environment variables to override the default values.</p>
|
|
10378
10379
|
<p>If you want to use this file, initialize a config first, then copy this file to the default location Nautobot expects to find its config:</p>
|
|
10379
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10380
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-30-1" name="__codelineno-30-1" href="#__codelineno-30-1"></a>cp development/nautobot_config.py ~/.nautobot/nautobot_config.py
|
|
10380
10381
|
</code></pre></div>
|
|
10381
10382
|
<h5 id="required-settings">Required Settings<a class="headerlink" href="#required-settings" title="Permanent link">¶</a></h5>
|
|
10382
10383
|
<p>A newly created configuration includes sane defaults. If you need to customize them, edit your <code>nautobot_config.py</code> and update the following settings as required:</p>
|
|
@@ -10389,6 +10390,32 @@
|
|
|
10389
10390
|
</ul>
|
|
10390
10391
|
<h2 id="working-in-your-development-environment">Working in your Development Environment<a class="headerlink" href="#working-in-your-development-environment" title="Permanent link">¶</a></h2>
|
|
10391
10392
|
<p>Below are common commands for working your development environment.</p>
|
|
10393
|
+
<h3 id="creating-a-branch">Creating a Branch<a class="headerlink" href="#creating-a-branch" title="Permanent link">¶</a></h3>
|
|
10394
|
+
<p>Before you make any changes, always create a new branch. Again, for bug fixes and minor features, you'll want to create your branches from the <code>develop</code> branch, while for major new features, you'll branch from <code>next</code> instead.</p>
|
|
10395
|
+
<p>In current versions of Nautobot, you can use the <code>invoke branch</code> command to create a new branch or switch to an existing branch. Whether you're creating a branch off a fork or working against the Nautobot origin repo, you should follow this convention for naming your branch: <code>u/yourusername-0000-branch-summary</code>, where <code>0000</code> is the related GitHub issue number and <code>yourusername</code> is your GitHub username. (If you do not have a relevant GitHub issue, please consider opening one to document the context behind your changes.)</p>
|
|
10396
|
+
<p>For example:</p>
|
|
10397
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-31-1" name="__codelineno-31-1" href="#__codelineno-31-1"></a>invoke branch --create --branch u/yourusername-1234-some-bug-fix --parent develop
|
|
10398
|
+
</code></pre></div>
|
|
10399
|
+
<p>or:</p>
|
|
10400
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-32-1" name="__codelineno-32-1" href="#__codelineno-32-1"></a>invoke branch --create --branch u/yourusername-1235-amazing-feature --parent next
|
|
10401
|
+
</code></pre></div>
|
|
10402
|
+
<div class="admonition caution">
|
|
10403
|
+
<p class="admonition-title">Caution</p>
|
|
10404
|
+
<p>We recommend using this Invoke command instead of directly calling <code>git checkout</code> or <code>git switch</code> because it automatically handles some other aspects of the development environment, in particular stopping the currently running Nautobot Docker containers, if any, before switching to a different branch.</p>
|
|
10405
|
+
</div>
|
|
10406
|
+
<div class="admonition tip">
|
|
10407
|
+
<p class="admonition-title">Tip</p>
|
|
10408
|
+
<p>You can switch between any existing branches with simply <code>invoke branch --branch <name></code>.</p>
|
|
10409
|
+
</div>
|
|
10410
|
+
<div class="admonition tip">
|
|
10411
|
+
<p class="admonition-title">Nautobot branches and the Docker compose workflow</p>
|
|
10412
|
+
<p>It's common for the Python dependencies and database schema to differ between major and minor Nautobot releases, and therefore between the primary branches of <code>main</code>, <code>develop</code>, <code>next</code>, and <code>ltm-1.6</code>. To account for this, the Docker workflow automatically detects which <code>major.minor</code> Nautobot version you're working with and changes the Docker Compose project name accordingly. What this means for you in practice is that when first switching between Nautobot releases, you may need to rerun <code>invoke build</code> once for each primary branch, and <code>invoke start</code>/<code>invoke debug</code> may take some time as it needs to create a new database and migrate its schema. However, in the future, switching between releases should be relatively smooth (just <code>invoke branch -b <name></code> and then <code>invoke start</code>) rather than needing to rebuild the container and database every time you switch between <code>develop</code> and <code>next</code> as would likely be needed if the same Docker Compose project were used for both release trains.</p>
|
|
10413
|
+
<p>Conversely, if you're using the virtual environment workflow, you may need to manually run <code>poetry install</code> whenever switching between primary branches, and may need to manually drop and restore the database schema as well. Be aware!</p>
|
|
10414
|
+
</div>
|
|
10415
|
+
<h4 id="prototypes">Prototypes<a class="headerlink" href="#prototypes" title="Permanent link">¶</a></h4>
|
|
10416
|
+
<p>Sometimes code is written as a proof of concept or early implementation candidate but is not quite ready to be merged, or may be picked up by another author sometime in the future. In that case, the convention is to use the <code>prototype/</code> prefix to the branch name and not requiring the original authors username. In that scenario, using the example above, you would instead:</p>
|
|
10417
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1" href="#__codelineno-33-1"></a>invoke branch --create --branch prototype/1234-next-amazing-feature --parent next
|
|
10418
|
+
</code></pre></div>
|
|
10392
10419
|
<h3 id="creating-a-superuser">Creating a Superuser<a class="headerlink" href="#creating-a-superuser" title="Permanent link">¶</a></h3>
|
|
10393
10420
|
<details class="version-changed">
|
|
10394
10421
|
<summary>Changed in version 2.1.2</summary>
|
|
@@ -10431,16 +10458,16 @@
|
|
|
10431
10458
|
</tbody>
|
|
10432
10459
|
</table>
|
|
10433
10460
|
<p>For example:</p>
|
|
10434
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10461
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a>nautobot-server runserver
|
|
10435
10462
|
</code></pre></div>
|
|
10436
10463
|
<p>Example output:</p>
|
|
10437
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10438
|
-
<a id="__codelineno-
|
|
10439
|
-
<a id="__codelineno-
|
|
10440
|
-
<a id="__codelineno-
|
|
10441
|
-
<a id="__codelineno-
|
|
10442
|
-
<a id="__codelineno-
|
|
10443
|
-
<a id="__codelineno-
|
|
10464
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-35-1" name="__codelineno-35-1" href="#__codelineno-35-1"></a>Performing system checks...
|
|
10465
|
+
<a id="__codelineno-35-2" name="__codelineno-35-2" href="#__codelineno-35-2"></a>
|
|
10466
|
+
<a id="__codelineno-35-3" name="__codelineno-35-3" href="#__codelineno-35-3"></a>System check identified no issues (0 silenced).
|
|
10467
|
+
<a id="__codelineno-35-4" name="__codelineno-35-4" href="#__codelineno-35-4"></a>November 18, 2020 - 15:52:31
|
|
10468
|
+
<a id="__codelineno-35-5" name="__codelineno-35-5" href="#__codelineno-35-5"></a>Django version 3.1, using settings 'nautobot.core.settings'
|
|
10469
|
+
<a id="__codelineno-35-6" name="__codelineno-35-6" href="#__codelineno-35-6"></a>Starting development server at http://127.0.0.1:8080/
|
|
10470
|
+
<a id="__codelineno-35-7" name="__codelineno-35-7" href="#__codelineno-35-7"></a>Quit the server with CONTROL-C.
|
|
10444
10471
|
</code></pre></div>
|
|
10445
10472
|
<div class="admonition warning">
|
|
10446
10473
|
<p class="admonition-title">Warning</p>
|
|
@@ -10487,20 +10514,20 @@
|
|
|
10487
10514
|
</tbody>
|
|
10488
10515
|
</table>
|
|
10489
10516
|
<p>For example:</p>
|
|
10490
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10517
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-36-1" name="__codelineno-36-1" href="#__codelineno-36-1"></a>nautobot-server<span class="w"> </span>nbshell
|
|
10491
10518
|
</code></pre></div>
|
|
10492
10519
|
<p>Example output:</p>
|
|
10493
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10494
|
-
<a id="__codelineno-
|
|
10495
|
-
<a id="__codelineno-
|
|
10496
|
-
<a id="__codelineno-
|
|
10497
|
-
<a id="__codelineno-
|
|
10498
|
-
<a id="__codelineno-
|
|
10499
|
-
<a id="__codelineno-
|
|
10500
|
-
<a id="__codelineno-
|
|
10501
|
-
<a id="__codelineno-
|
|
10502
|
-
<a id="__codelineno-
|
|
10503
|
-
<a id="__codelineno-
|
|
10520
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-37-1" name="__codelineno-37-1" href="#__codelineno-37-1"></a># Shell Plus Model Imports
|
|
10521
|
+
<a id="__codelineno-37-2" name="__codelineno-37-2" href="#__codelineno-37-2"></a>...
|
|
10522
|
+
<a id="__codelineno-37-3" name="__codelineno-37-3" href="#__codelineno-37-3"></a># Shell Plus Django Imports
|
|
10523
|
+
<a id="__codelineno-37-4" name="__codelineno-37-4" href="#__codelineno-37-4"></a>...
|
|
10524
|
+
<a id="__codelineno-37-5" name="__codelineno-37-5" href="#__codelineno-37-5"></a># Django version 4.2.15
|
|
10525
|
+
<a id="__codelineno-37-6" name="__codelineno-37-6" href="#__codelineno-37-6"></a># Nautobot version 2.3.3b1
|
|
10526
|
+
<a id="__codelineno-37-7" name="__codelineno-37-7" href="#__codelineno-37-7"></a># Example Nautobot App version 1.0.0
|
|
10527
|
+
<a id="__codelineno-37-8" name="__codelineno-37-8" href="#__codelineno-37-8"></a>Python 3.12.6 (main, Sep 12 2024, 21:12:08) [GCC 12.2.0] on linux
|
|
10528
|
+
<a id="__codelineno-37-9" name="__codelineno-37-9" href="#__codelineno-37-9"></a>Type "help", "copyright", "credits" or "license" for more information.
|
|
10529
|
+
<a id="__codelineno-37-10" name="__codelineno-37-10" href="#__codelineno-37-10"></a>(InteractiveConsole)
|
|
10530
|
+
<a id="__codelineno-37-11" name="__codelineno-37-11" href="#__codelineno-37-11"></a>>>>
|
|
10504
10531
|
</code></pre></div>
|
|
10505
10532
|
<h3 id="post-upgrade-operations">Post-upgrade Operations<a class="headerlink" href="#post-upgrade-operations" title="Permanent link">¶</a></h3>
|
|
10506
10533
|
<p>There will be times where you're working with the bleeding edge of Nautobot from the <code>develop</code> branch or feature branches and will need to pull in database changes or run server operations.</p>
|
|
@@ -10527,22 +10554,22 @@
|
|
|
10527
10554
|
</div>
|
|
10528
10555
|
<p>Sometimes when files are renamed, moved, or deleted and you've been working in the same environment for a while, you can encounter weird behavior. If this happens, don't panic and nuke your environment.</p>
|
|
10529
10556
|
<p>First, use <code>pip3</code> to explicitly uninstall the Nautobot package from the environment:</p>
|
|
10530
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10557
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-38-1" name="__codelineno-38-1" href="#__codelineno-38-1"></a>pip3 uninstall -y nautobot
|
|
10531
10558
|
</code></pre></div>
|
|
10532
10559
|
<p>Example output:</p>
|
|
10533
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10534
|
-
<a id="__codelineno-
|
|
10535
|
-
<a id="__codelineno-
|
|
10560
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-39-1" name="__codelineno-39-1" href="#__codelineno-39-1"></a>Found existing installation: nautobot 1.0.0b2
|
|
10561
|
+
<a id="__codelineno-39-2" name="__codelineno-39-2" href="#__codelineno-39-2"></a>Uninstalling nautobot-1.0.0b2:
|
|
10562
|
+
<a id="__codelineno-39-3" name="__codelineno-39-3" href="#__codelineno-39-3"></a> Successfully uninstalled nautobot-1.0.0b2
|
|
10536
10563
|
</code></pre></div>
|
|
10537
10564
|
<p>Then try to just have Poetry do the right thing by telling it to install again:</p>
|
|
10538
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10565
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-40-1" name="__codelineno-40-1" href="#__codelineno-40-1"></a>poetry install
|
|
10539
10566
|
</code></pre></div>
|
|
10540
10567
|
<p>Example output:</p>
|
|
10541
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10542
|
-
<a id="__codelineno-
|
|
10543
|
-
<a id="__codelineno-
|
|
10544
|
-
<a id="__codelineno-
|
|
10545
|
-
<a id="__codelineno-
|
|
10568
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-41-1" name="__codelineno-41-1" href="#__codelineno-41-1"></a>Installing dependencies from lock file
|
|
10569
|
+
<a id="__codelineno-41-2" name="__codelineno-41-2" href="#__codelineno-41-2"></a>
|
|
10570
|
+
<a id="__codelineno-41-3" name="__codelineno-41-3" href="#__codelineno-41-3"></a>No dependencies to install or update
|
|
10571
|
+
<a id="__codelineno-41-4" name="__codelineno-41-4" href="#__codelineno-41-4"></a>
|
|
10572
|
+
<a id="__codelineno-41-5" name="__codelineno-41-5" href="#__codelineno-41-5"></a>Installing the current project: nautobot (1.0.0-beta.2)
|
|
10546
10573
|
</code></pre></div>
|
|
10547
10574
|
<h3 id="running-tests">Running Tests<a class="headerlink" href="#running-tests" title="Permanent link">¶</a></h3>
|
|
10548
10575
|
<p>Throughout the course of development, it's a good idea to occasionally run Nautobot's test suite to catch any potential errors. Tests come in two primary flavors: Unit tests and integration tests.</p>
|
|
@@ -10585,24 +10612,24 @@
|
|
|
10585
10612
|
</ul>
|
|
10586
10613
|
<h5 id="unit-test-invocation-examples">Unit Test Invocation Examples<a class="headerlink" href="#unit-test-invocation-examples" title="Permanent link">¶</a></h5>
|
|
10587
10614
|
<p>In general, when you first run the Nautobot tests in your local copy of the repository, we'd recommend:</p>
|
|
10588
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10615
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-42-1" name="__codelineno-42-1" href="#__codelineno-42-1"></a>invoke unittest
|
|
10589
10616
|
</code></pre></div>
|
|
10590
10617
|
<p>When there are too many cores on the testing machine, you can limit the number of parallel workers:</p>
|
|
10591
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10618
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-43-1" name="__codelineno-43-1" href="#__codelineno-43-1"></a>invoke unittest --parallel-workers 4
|
|
10592
10619
|
</code></pre></div>
|
|
10593
10620
|
<p>On subsequent reruns, you can add the other performance-related options:</p>
|
|
10594
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10595
|
-
<a id="__codelineno-
|
|
10621
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-44-1" name="__codelineno-44-1" href="#__codelineno-44-1"></a>invoke unittest --skip-docs-build
|
|
10622
|
+
<a id="__codelineno-44-2" name="__codelineno-44-2" href="#__codelineno-44-2"></a>invoke unittest --skip-docs-build --label nautobot.core.tests
|
|
10596
10623
|
</code></pre></div>
|
|
10597
10624
|
<p>When switching between significantly different branches of the code base (e.g. <code>main</code> vs <code>develop</code> vs <code>next</code>), you'll need to for once include the <code>--no-keepdb</code> option so that the test database can be destroyed and recreated appropriately:</p>
|
|
10598
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10625
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-45-1" name="__codelineno-45-1" href="#__codelineno-45-1"></a>invoke unittest --no-keepdb
|
|
10599
10626
|
</code></pre></div>
|
|
10600
10627
|
<p>To not use the cached test fixture, you will need to include the <code>--no-cache-test-fixtures</code> flag</p>
|
|
10601
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10628
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-46-1" name="__codelineno-46-1" href="#__codelineno-46-1"></a>invoke unittest --no-cache-test-fixtures
|
|
10602
10629
|
</code></pre></div>
|
|
10603
10630
|
<p>To limit the test to a specific pattern or label, you can use the <code>--label</code> and <code>--pattern</code> options:</p>
|
|
10604
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10605
|
-
<a id="__codelineno-
|
|
10631
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-47-1" name="__codelineno-47-1" href="#__codelineno-47-1"></a>invoke unittest --verbose --skip-docs-build --label nautobot.core.tests.dcim.test_views.DeviceTestCase
|
|
10632
|
+
<a id="__codelineno-47-2" name="__codelineno-47-2" href="#__codelineno-47-2"></a>invoke unittest --verbose --skip-docs-build --pattern Controller
|
|
10606
10633
|
</code></pre></div>
|
|
10607
10634
|
<h4 id="integration-tests">Integration Tests<a class="headerlink" href="#integration-tests" title="Permanent link">¶</a></h4>
|
|
10608
10635
|
<p>Integration tests are automated tests written and run to ensure that the Nautobot application behaves as expected when being used as it would be in practice. By contrast to unit tests, where individual units of code are being tested, integration tests rely upon the server code actually running, and web UI clients or API clients to make real connections to the service to exercise actual workflows, such as navigating to the login page, filling out the username/passwords fields, and clicking the "Log In" button.</p>
|
|
@@ -10678,7 +10705,7 @@
|
|
|
10678
10705
|
</table>
|
|
10679
10706
|
<h3 id="verifying-code-style-and-static-analysis">Verifying Code Style and Static Analysis<a class="headerlink" href="#verifying-code-style-and-static-analysis" title="Permanent link">¶</a></h3>
|
|
10680
10707
|
<p>To enforce best practices around consistent <a href="style-guide.html">coding style</a>, Nautobot uses <a href="https://docs.astral.sh/ruff">Ruff</a>. Additionally, <a href="https://en.wikipedia.org/wiki/Static_program_analysis">static analysis</a> of Nautobot code is performed by Ruff and <a href="https://pylint.pycqa.org/en/latest/">Pylint</a>. You should run all of these commands and ensure that they pass fully with regard to your code changes before opening a pull request upstream.</p>
|
|
10681
|
-
<!--
|
|
10708
|
+
<!-- pyml disable-num-lines 4 no-inline-html -->
|
|
10682
10709
|
<table>
|
|
10683
10710
|
<thead>
|
|
10684
10711
|
<tr>
|
|
@@ -10697,8 +10724,6 @@
|
|
|
10697
10724
|
</tr>
|
|
10698
10725
|
</tbody>
|
|
10699
10726
|
</table>
|
|
10700
|
-
<!-- markdownlint-enable no-inline-html -->
|
|
10701
|
-
|
|
10702
10727
|
<h3 id="handling-migrations">Handling Migrations<a class="headerlink" href="#handling-migrations" title="Permanent link">¶</a></h3>
|
|
10703
10728
|
<h4 id="checking-whether-a-new-migration-is-needed">Checking Whether a New Migration is Needed<a class="headerlink" href="#checking-whether-a-new-migration-is-needed" title="Permanent link">¶</a></h4>
|
|
10704
10729
|
<p>If you're unsure whether a database schema migration is needed based on your changes, you can run the following command:</p>
|
|
@@ -10790,7 +10815,7 @@
|
|
|
10790
10815
|
</table>
|
|
10791
10816
|
<p>Documentation is written in Markdown. If you need to add additional pages or sections to the documentation, you can add them to <code>mkdocs.yml</code> at the root of the repository.</p>
|
|
10792
10817
|
<h3 id="verifying-documentation">Verifying Documentation<a class="headerlink" href="#verifying-documentation" title="Permanent link">¶</a></h3>
|
|
10793
|
-
<p>Nautobot uses <a href="https://github.com/
|
|
10818
|
+
<p>Nautobot uses <a href="https://github.com/jackdewinter/pymarkdown"><code>pymarkdownlnt</code></a> to verify correctness of the documentation. You should run this command and ensure that it passes fully with regard to your documentation changes before opening a pull request upstream.</p>
|
|
10794
10819
|
<table>
|
|
10795
10820
|
<thead>
|
|
10796
10821
|
<tr>
|
|
@@ -10801,14 +10826,14 @@
|
|
|
10801
10826
|
<tbody>
|
|
10802
10827
|
<tr>
|
|
10803
10828
|
<td><code>invoke markdownlint</code></td>
|
|
10804
|
-
<td><code>
|
|
10829
|
+
<td><code>pymarkdown scan --recurse nautobot examples *.md</code></td>
|
|
10805
10830
|
</tr>
|
|
10806
10831
|
</tbody>
|
|
10807
10832
|
</table>
|
|
10808
10833
|
<h2 id="submitting-pull-requests">Submitting Pull Requests<a class="headerlink" href="#submitting-pull-requests" title="Permanent link">¶</a></h2>
|
|
10809
10834
|
<p>Once you're happy with your work and have verified that all tests pass, commit your changes and push it upstream to your fork. Always provide descriptive (but not excessively verbose) commit messages. When working on a specific issue, be sure to reference it.</p>
|
|
10810
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10811
|
-
<a id="__codelineno-
|
|
10835
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-48-1" name="__codelineno-48-1" href="#__codelineno-48-1"></a>git commit -m "Closes #1234: Add IPv5 support"
|
|
10836
|
+
<a id="__codelineno-48-2" name="__codelineno-48-2" href="#__codelineno-48-2"></a>git push origin
|
|
10812
10837
|
</code></pre></div>
|
|
10813
10838
|
<p>Once your fork has the new commit, submit a <a href="https://github.com/nautobot/nautobot/compare">pull request</a> to the Nautobot repo to propose the changes. Be sure to provide a detailed accounting of the changes being made and the reasons for doing so.</p>
|
|
10814
10839
|
<p>Once submitted, a maintainer will review your pull request and either merge it or request changes. If changes are needed, you can make them via new commits to your fork: The pull request will update automatically.</p>
|
|
@@ -10820,11 +10845,11 @@
|
|
|
10820
10845
|
<p>Below are common issues you might encounter in your development environment and how to address them.</p>
|
|
10821
10846
|
<h3 id="fatal-sorry-too-many-clients-already">FATAL: sorry, too many clients already<a class="headerlink" href="#fatal-sorry-too-many-clients-already" title="Permanent link">¶</a></h3>
|
|
10822
10847
|
<p>When using <code>nautobot-server runserver</code> to do development you might run into a traceback that looks something like this:</p>
|
|
10823
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10824
|
-
<a id="__codelineno-
|
|
10848
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-49-1" name="__codelineno-49-1" href="#__codelineno-49-1"></a>Exception Type: OperationalError at /extras/tags/
|
|
10849
|
+
<a id="__codelineno-49-2" name="__codelineno-49-2" href="#__codelineno-49-2"></a>Exception Value: FATAL: sorry, too many clients already
|
|
10825
10850
|
</code></pre></div>
|
|
10826
10851
|
<p>The <code>runserver</code> development server is multi-threaded by default, which means that every request is creating its own connection. If you are doing some local testing or development that is resulting in a lot of connections to the database, pass <code>--nothreading</code> to the runserver command to disable threading:</p>
|
|
10827
|
-
<div class="highlight"><pre><span></span><code><a id="__codelineno-
|
|
10852
|
+
<div class="highlight"><pre><span></span><code><a id="__codelineno-50-1" name="__codelineno-50-1" href="#__codelineno-50-1"></a>nautobot-server runserver --nothreading
|
|
10828
10853
|
</code></pre></div>
|
|
10829
10854
|
|
|
10830
10855
|
|
|
@@ -10972,7 +10997,7 @@
|
|
|
10972
10997
|
<script id="__config" type="application/json">{"base": "../..", "features": ["content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.footer", "navigation.tabs", "navigation.tabs.sticky", "navigation.tracking", "search.highlight", "search.share", "search.suggest"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
|
10973
10998
|
|
|
10974
10999
|
|
|
10975
|
-
<script src="../../assets/javascripts/bundle.
|
|
11000
|
+
<script src="../../assets/javascripts/bundle.88dd0f4e.min.js"></script>
|
|
10976
11001
|
|
|
10977
11002
|
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
10978
11003
|
|