nautobot 2.4.3__py3-none-any.whl → 2.4.5__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/__init__.py +19 -3
- nautobot/apps/filters.py +2 -0
- nautobot/circuits/filters.py +1 -1
- nautobot/circuits/tests/test_models.py +5 -3
- nautobot/cloud/filters.py +3 -6
- nautobot/cloud/tests/test_filters.py +21 -0
- nautobot/core/admin.py +2 -0
- nautobot/core/celery/__init__.py +5 -3
- nautobot/core/jobs/__init__.py +5 -3
- nautobot/core/management/commands/generate_performance_test_endpoints.py +9 -6
- nautobot/core/models/utils.py +6 -1
- nautobot/core/templates/inc/javascript.html +1 -0
- nautobot/core/templatetags/ui_framework.py +20 -4
- nautobot/core/testing/__init__.py +2 -0
- nautobot/core/testing/forms.py +1 -1
- nautobot/core/testing/mixins.py +9 -0
- nautobot/core/tests/test_api.py +1 -1
- nautobot/core/tests/test_graphql.py +3 -3
- nautobot/core/tests/test_jobs.py +30 -28
- nautobot/core/ui/object_detail.py +1 -1
- nautobot/dcim/api/serializers.py +36 -0
- nautobot/dcim/api/views.py +1 -1
- nautobot/dcim/elevations.py +17 -4
- nautobot/dcim/factory.py +9 -1
- nautobot/dcim/filters/__init__.py +27 -1
- nautobot/dcim/forms.py +13 -1
- nautobot/dcim/models/devices.py +11 -5
- nautobot/dcim/signals.py +26 -0
- nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +0 -62
- nautobot/dcim/templates/dcim/virtualdevicecontext_update.html +6 -0
- nautobot/dcim/tests/test_api.py +176 -0
- nautobot/dcim/tests/test_filters.py +56 -3
- nautobot/dcim/tests/test_jobs.py +4 -6
- nautobot/dcim/tests/test_models.py +40 -0
- nautobot/dcim/views.py +24 -14
- nautobot/extras/api/mixins.py +1 -1
- nautobot/extras/api/views.py +2 -2
- nautobot/extras/choices.py +8 -3
- nautobot/extras/filters/__init__.py +4 -0
- nautobot/extras/jobs.py +181 -103
- nautobot/extras/management/utils.py +13 -2
- nautobot/extras/models/datasources.py +11 -4
- nautobot/extras/models/jobs.py +20 -17
- nautobot/extras/plugins/__init__.py +26 -1
- nautobot/extras/tables.py +25 -29
- nautobot/extras/templates/extras/inc/jobresult.html +12 -13
- nautobot/extras/templates/extras/objectchange.html +28 -12
- nautobot/extras/test_jobs/atomic_transaction.py +6 -6
- nautobot/extras/test_jobs/fail.py +75 -1
- nautobot/extras/tests/test_api.py +17 -16
- nautobot/extras/tests/test_datasources.py +64 -54
- nautobot/extras/tests/test_filters.py +2 -0
- nautobot/extras/tests/test_jobs.py +69 -62
- nautobot/extras/tests/test_models.py +1 -1
- nautobot/extras/tests/test_plugins.py +32 -1
- nautobot/extras/tests/test_relationships.py +5 -5
- nautobot/extras/tests/test_views.py +12 -2
- nautobot/extras/views.py +10 -1
- nautobot/ipam/api/serializers.py +7 -8
- nautobot/ipam/api/views.py +2 -2
- nautobot/ipam/factory.py +27 -8
- nautobot/ipam/filters.py +67 -29
- nautobot/ipam/formfields.py +51 -0
- nautobot/ipam/forms.py +28 -1
- nautobot/ipam/migrations/0051_added_optional_vrf_relationship_to_vdc.py +41 -0
- nautobot/ipam/models.py +63 -5
- nautobot/ipam/querysets.py +6 -0
- nautobot/ipam/tables.py +21 -7
- nautobot/ipam/templates/ipam/rir.html +1 -43
- nautobot/ipam/tests/test_api.py +107 -66
- nautobot/ipam/tests/test_filters.py +145 -5
- nautobot/ipam/tests/test_models.py +16 -0
- nautobot/ipam/tests/test_views.py +15 -2
- nautobot/ipam/urls.py +1 -21
- nautobot/ipam/views.py +24 -41
- nautobot/project-static/css/base.css +11 -0
- nautobot/project-static/css/dark.css +2 -1
- nautobot/project-static/docs/code-reference/nautobot/apps/filters.html +62 -0
- nautobot/project-static/docs/code-reference/nautobot/apps/jobs.html +43 -5
- nautobot/project-static/docs/code-reference/nautobot/apps/testing.html +35 -0
- nautobot/project-static/docs/development/apps/api/configuration-view.html +0 -3
- nautobot/project-static/docs/development/apps/api/models/graphql.html +0 -4
- nautobot/project-static/docs/development/apps/api/platform-features/custom-validators.html +94 -1
- nautobot/project-static/docs/development/apps/api/platform-features/filter-extensions.html +0 -3
- nautobot/project-static/docs/development/apps/api/platform-features/jinja2-filters.html +0 -3
- nautobot/project-static/docs/development/apps/api/platform-features/populating-extensibility-features.html +0 -3
- nautobot/project-static/docs/development/apps/api/platform-features/secrets-providers.html +0 -3
- nautobot/project-static/docs/development/apps/api/prometheus.html +0 -3
- nautobot/project-static/docs/development/apps/api/testing.html +0 -6
- nautobot/project-static/docs/development/apps/api/ui-extensions/banners.html +0 -3
- nautobot/project-static/docs/development/apps/api/ui-extensions/home-page.html +0 -3
- nautobot/project-static/docs/development/apps/api/ui-extensions/object-views.html +0 -3
- nautobot/project-static/docs/development/apps/api/views/core-view-overrides.html +0 -3
- nautobot/project-static/docs/development/apps/api/views/nautobot-generic-views.html +1 -7
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewset.html +0 -7
- nautobot/project-static/docs/development/apps/api/views/nautobotuiviewsetrouter.html +0 -4
- nautobot/project-static/docs/development/apps/api/views/notes.html +0 -3
- nautobot/project-static/docs/development/apps/index.html +2 -35
- nautobot/project-static/docs/development/apps/migration/code-updates.html +1 -1
- nautobot/project-static/docs/development/core/application-registry.html +0 -6
- nautobot/project-static/docs/development/core/best-practices.html +0 -27
- nautobot/project-static/docs/development/core/docker-compose-advanced-use-cases.html +58 -4
- nautobot/project-static/docs/development/core/getting-started.html +12 -16
- nautobot/project-static/docs/development/core/homepage.html +0 -3
- nautobot/project-static/docs/development/core/style-guide.html +0 -5
- nautobot/project-static/docs/development/core/templates.html +0 -3
- nautobot/project-static/docs/development/core/testing.html +0 -9
- nautobot/project-static/docs/development/jobs/index.html +30 -43
- nautobot/project-static/docs/objects.inv +0 -0
- nautobot/project-static/docs/overview/application_stack.html +0 -18
- nautobot/project-static/docs/release-notes/version-2.4.html +374 -0
- nautobot/project-static/docs/requirements.txt +2 -2
- nautobot/project-static/docs/search/search_index.json +1 -1
- nautobot/project-static/docs/sitemap.xml +290 -290
- nautobot/project-static/docs/sitemap.xml.gz +0 -0
- nautobot/project-static/docs/user-guide/administration/configuration/settings.html +0 -10
- nautobot/project-static/docs/user-guide/administration/guides/docker.html +0 -15
- nautobot/project-static/docs/user-guide/administration/installation/index.html +0 -16
- nautobot/project-static/docs/user-guide/administration/installation/nautobot.html +1 -4
- nautobot/project-static/docs/user-guide/administration/installation/services.html +0 -11
- nautobot/project-static/docs/user-guide/administration/migration/migrating-from-postgresql.html +3 -3
- nautobot/project-static/docs/user-guide/administration/tools/nautobot-server.html +5 -35
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/tables/v2-code-location-changes.yaml +1 -1
- nautobot/project-static/docs/user-guide/administration/upgrading/from-v1/upgrading-from-nautobot-v1.html +1 -1
- nautobot/project-static/docs/user-guide/administration/upgrading/upgrading.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/circuits/providernetwork.html +0 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleport.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleporttemplate.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverport.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/consoleserverporttemplate.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebay.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicebaytemplate.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/deviceredundancygroup.html +0 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/devicetype.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontport.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/frontporttemplate.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interface.html +1 -17
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfaceredundancygroup.html +0 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/interfacetemplate.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/inventoryitem.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/location.html +0 -3
- nautobot/project-static/docs/user-guide/core-data-model/dcim/locationtype.html +1 -7
- nautobot/project-static/docs/user-guide/core-data-model/dcim/platform.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlet.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/poweroutlettemplate.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerport.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/powerporttemplate.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearport.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/dcim/rearporttemplate.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontext.html +0 -6
- nautobot/project-static/docs/user-guide/core-data-model/extras/configcontextschema.html +0 -3
- nautobot/project-static/docs/user-guide/core-data-model/ipam/ipaddress.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/ipam/vlan.html +0 -4
- nautobot/project-static/docs/user-guide/core-data-model/virtualization/vminterface.html +0 -8
- nautobot/project-static/docs/user-guide/feature-guides/custom-fields.html +3 -3
- nautobot/project-static/docs/user-guide/feature-guides/graphql.html +0 -6
- nautobot/project-static/docs/user-guide/platform-functionality/computedfield.html +0 -3
- nautobot/project-static/docs/user-guide/platform-functionality/customfield.html +3 -15
- nautobot/project-static/docs/user-guide/platform-functionality/dynamicgroup.html +0 -26
- nautobot/project-static/docs/user-guide/platform-functionality/gitrepository.html +0 -8
- nautobot/project-static/docs/user-guide/platform-functionality/graphql.html +0 -3
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/index.html +0 -8
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/job-scheduling-and-approvals.html +0 -7
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobbutton.html +0 -3
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/jobhook.html +0 -3
- nautobot/project-static/docs/user-guide/platform-functionality/jobs/models.html +0 -14
- nautobot/project-static/docs/user-guide/platform-functionality/note.html +0 -3
- nautobot/project-static/docs/user-guide/platform-functionality/relationship.html +1 -10
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/authentication.html +0 -3
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/filtering.html +0 -14
- nautobot/project-static/docs/user-guide/platform-functionality/rest-api/overview.html +0 -19
- nautobot/project-static/docs/user-guide/platform-functionality/secret.html +3 -9
- nautobot/project-static/docs/user-guide/platform-functionality/status.html +0 -8
- nautobot/project-static/docs/user-guide/platform-functionality/tag.html +0 -4
- nautobot/project-static/docs/user-guide/platform-functionality/template-filters.html +1 -13
- nautobot/project-static/docs/user-guide/platform-functionality/webhook.html +0 -5
- nautobot/project-static/js/editor.js +292 -0
- nautobot/project-static/monaco-editor-0.52.2/README.md +81 -0
- nautobot/project-static/monaco-editor-0.52.2/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- nautobot/project-static/monaco-editor-0.52.2/vs/base/worker/workerMain.js +31 -0
- nautobot/project-static/monaco-editor-0.52.2/vs/basic-languages/xml/xml.js +10 -0
- nautobot/project-static/monaco-editor-0.52.2/vs/basic-languages/yaml/yaml.js +10 -0
- nautobot/project-static/monaco-editor-0.52.2/vs/editor/editor.main.css +8 -0
- nautobot/project-static/monaco-editor-0.52.2/vs/editor/editor.main.js +798 -0
- nautobot/project-static/monaco-editor-0.52.2/vs/language/json/jsonMode.js +19 -0
- nautobot/project-static/monaco-editor-0.52.2/vs/language/json/jsonWorker.js +42 -0
- nautobot/project-static/monaco-editor-0.52.2/vs/loader.js +11 -0
- nautobot/tenancy/filters/__init__.py +3 -5
- nautobot/tenancy/tests/test_filters.py +10 -0
- nautobot/virtualization/views.py +0 -1
- nautobot/wireless/tables.py +9 -4
- nautobot/wireless/tests/test_api.py +0 -9
- {nautobot-2.4.3.dist-info → nautobot-2.4.5.dist-info}/METADATA +4 -4
- {nautobot-2.4.3.dist-info → nautobot-2.4.5.dist-info}/RECORD +198 -186
- {nautobot-2.4.3.dist-info → nautobot-2.4.5.dist-info}/LICENSE.txt +0 -0
- {nautobot-2.4.3.dist-info → nautobot-2.4.5.dist-info}/NOTICE +0 -0
- {nautobot-2.4.3.dist-info → nautobot-2.4.5.dist-info}/WHEEL +0 -0
- {nautobot-2.4.3.dist-info → nautobot-2.4.5.dist-info}/entry_points.txt +0 -0
|
@@ -9135,10 +9135,6 @@
|
|
|
9135
9135
|
|
|
9136
9136
|
<h1 id="power-outlet-templates">Power Outlet Templates<a class="headerlink" href="#power-outlet-templates" title="Permanent link">¶</a></h1>
|
|
9137
9137
|
<p>A template for a power outlet that will be created on all instantiations of the parent device type or module type. Each power outlet can be assigned a physical type, and its power source may be mapped to a specific feed leg and power port template. This association will be automatically replicated when the device type is instantiated.</p>
|
|
9138
|
-
<details class="version-added">
|
|
9139
|
-
<summary>Added in version 1.4.5</summary>
|
|
9140
|
-
<p>The fields <code>created</code> and <code>last_updated</code> were added to all device component template models. If you upgraded from Nautobot 1.4.4 or earlier, the values for these fields will default to <code>None</code> (null).</p>
|
|
9141
|
-
</details>
|
|
9142
9138
|
<details class="version-changed">
|
|
9143
9139
|
<summary>Changed in version 2.3.0</summary>
|
|
9144
9140
|
<p>This model has been updated to support being installed in <a href="module.html">Modules</a> through the <a href="moduletype.html">ModuleType</a> model. As a result, there are now two fields for assignment to a DeviceType or ModuleType. One of the <code>device_type</code> or <code>module_type</code> fields must be populated but not both. If a <code>module_type</code> is supplied, the <code>device_type</code> field must be null, and similarly the <code>module_type</code> field must be null if a <code>device_type</code> is supplied.</p>
|
|
@@ -9235,10 +9235,6 @@
|
|
|
9235
9235
|
<p>When creating a power port on a device which supplies power to downstream devices, the allocated and maximum draw numbers should be left blank. Utilization will be calculated by taking the sum of all power ports of devices connected downstream.</p>
|
|
9236
9236
|
</div>
|
|
9237
9237
|
<p>Cables can connect power ports only to power outlets or power feeds. (Pass-through ports cannot be used to model power distribution.)</p>
|
|
9238
|
-
<details class="version-added">
|
|
9239
|
-
<summary>Added in version 1.4.5</summary>
|
|
9240
|
-
<p>The fields <code>created</code> and <code>last_updated</code> were added to all device component models. If you upgraded from Nautobot 1.4.4 or earlier, the values for these fields will default to <code>None</code> (null).</p>
|
|
9241
|
-
</details>
|
|
9242
9238
|
<details class="version-changed">
|
|
9243
9239
|
<summary>Changed in version 2.3.0</summary>
|
|
9244
9240
|
<p>This model has been updated to support being installed in <a href="module.html">Modules</a>. As a result, there are now two fields for assignment to a Device or Module. One of the <code>device</code> or <code>module</code> fields must be populated but not both. If a <code>module</code> is supplied, the <code>device</code> field must be null, and similarly the <code>module</code> field must be null if a <code>device</code> is supplied.</p>
|
|
@@ -9135,10 +9135,6 @@
|
|
|
9135
9135
|
|
|
9136
9136
|
<h1 id="power-port-templates">Power Port Templates<a class="headerlink" href="#power-port-templates" title="Permanent link">¶</a></h1>
|
|
9137
9137
|
<p>A template for a power port that will be created on all instantiations of the parent device type or module type. Each power port can be assigned a physical type, as well as a maximum and allocated draw in watts.</p>
|
|
9138
|
-
<details class="version-added">
|
|
9139
|
-
<summary>Added in version 1.4.5</summary>
|
|
9140
|
-
<p>The fields <code>created</code> and <code>last_updated</code> were added to all device component template models. If you upgraded from Nautobot 1.4.4 or earlier, the values for these fields will default to <code>None</code> (null).</p>
|
|
9141
|
-
</details>
|
|
9142
9138
|
<details class="version-changed">
|
|
9143
9139
|
<summary>Changed in version 2.3.0</summary>
|
|
9144
9140
|
<p>This model has been updated to support being installed in <a href="module.html">Modules</a> through the <a href="moduletype.html">ModuleType</a> model. As a result, there are now two fields for assignment to a DeviceType or ModuleType. One of the <code>device_type</code> or <code>module_type</code> fields must be populated but not both. If a <code>module_type</code> is supplied, the <code>device_type</code> field must be null, and similarly the <code>module_type</code> field must be null if a <code>device_type</code> is supplied.</p>
|
|
@@ -9139,10 +9139,6 @@
|
|
|
9139
9139
|
<p class="admonition-title">Note</p>
|
|
9140
9140
|
<p>Front and rear ports need not necessarily reside on the actual front or rear device face. This terminology is used primarily to distinguish between the two components in a pass-through port pairing.</p>
|
|
9141
9141
|
</div>
|
|
9142
|
-
<details class="version-added">
|
|
9143
|
-
<summary>Added in version 1.4.5</summary>
|
|
9144
|
-
<p>The fields <code>created</code> and <code>last_updated</code> were added to all device component models. If you upgraded from Nautobot 1.4.4 or earlier, the values for these fields will default to <code>None</code> (null).</p>
|
|
9145
|
-
</details>
|
|
9146
9142
|
<details class="version-changed">
|
|
9147
9143
|
<summary>Changed in version 2.3.0</summary>
|
|
9148
9144
|
<p>This model has been updated to support being installed in <a href="module.html">Modules</a>. As a result, there are now two fields for assignment to a Device or Module. One of the <code>device</code> or <code>module</code> fields must be populated but not both. If a <code>module</code> is supplied, the <code>device</code> field must be null, and similarly the <code>module</code> field must be null if a <code>device</code> is supplied.</p>
|
|
@@ -9135,10 +9135,6 @@
|
|
|
9135
9135
|
|
|
9136
9136
|
<h1 id="rear-port-templates">Rear Port Templates<a class="headerlink" href="#rear-port-templates" title="Permanent link">¶</a></h1>
|
|
9137
9137
|
<p>A template for a rear-facing pass-through port that will be created on all instantiations of the parent device type or module type. Each rear port may have a physical type and one or more front port templates assigned to it. The number of positions associated with a rear port determines how many front ports can be assigned to it (the maximum is 1024).</p>
|
|
9138
|
-
<details class="version-added">
|
|
9139
|
-
<summary>Added in version 1.4.5</summary>
|
|
9140
|
-
<p>The fields <code>created</code> and <code>last_updated</code> were added to all device component template models. If you upgraded from Nautobot 1.4.4 or earlier, the values for these fields will default to <code>None</code> (null).</p>
|
|
9141
|
-
</details>
|
|
9142
9138
|
<details class="version-changed">
|
|
9143
9139
|
<summary>Changed in version 2.3.0</summary>
|
|
9144
9140
|
<p>This model has been updated to support being installed in <a href="module.html">Modules</a> through the <a href="moduletype.html">ModuleType</a> model. As a result, there are now two fields for assignment to a DeviceType or ModuleType. One of the <code>device_type</code> or <code>module_type</code> fields must be populated but not both. If a <code>module_type</code> is supplied, the <code>device_type</code> field must be null, and similarly the <code>module_type</code> field must be null if a <code>device_type</code> is supplied.</p>
|
|
@@ -9210,12 +9210,6 @@
|
|
|
9210
9210
|
<li>Tag</li>
|
|
9211
9211
|
<li>Dynamic group - Need to set <code>settings.CONFIG_CONTEXT_DYNAMIC_GROUPS_ENABLED</code> to <code>True</code>. <a href="../../administration/configuration/settings.html#config_context_dynamic_groups_enabled">See notes here</a></li>
|
|
9212
9212
|
</ul>
|
|
9213
|
-
<details class="version-added">
|
|
9214
|
-
<summary>Added in version 1.5.0 — Added support for filtering by device redundancy group</summary>
|
|
9215
|
-
</details>
|
|
9216
|
-
<details class="version-added">
|
|
9217
|
-
<summary>Added in version 1.5.12 — Added support for filtering by dynamic group</summary>
|
|
9218
|
-
</details>
|
|
9219
9213
|
<p>Context data not specifically assigned to one or more of the above groups is by default associated with <strong>all</strong> devices and virtual machines.</p>
|
|
9220
9214
|
<p>Configuration contexts may be managed within Nautobot via the UI and/or API; they may also be managed externally to Nautobot in a Git repository if desired.</p>
|
|
9221
9215
|
<h2 id="hierarchical-rendering">Hierarchical Rendering<a class="headerlink" href="#hierarchical-rendering" title="Permanent link">¶</a></h2>
|
|
@@ -9122,9 +9122,6 @@
|
|
|
9122
9122
|
|
|
9123
9123
|
|
|
9124
9124
|
<h1 id="config-context-schemas">Config Context Schemas<a class="headerlink" href="#config-context-schemas" title="Permanent link">¶</a></h1>
|
|
9125
|
-
<details class="version-added">
|
|
9126
|
-
<summary>Added in version 1.1.0</summary>
|
|
9127
|
-
</details>
|
|
9128
9125
|
<p>While config contexts allow for arbitrary data structures to be stored within Nautobot, at scale it is desirable to apply validation constraints to that data to ensure its consistency and to avoid data entry errors. To service this need, Nautobot supports optionally backing config contexts with <a href="https://json-schema.org/">JSON Schemas</a> for validation. These schema are managed via the config context schema model and are optionally linked to config context instances, in addition to devices and virtual machines for the purpose of validating their local context data.</p>
|
|
9129
9126
|
<p>A JSON Schema is capable of validating the structure, format, and type of your data, and acts as a form of documentation useful in a number of automation use cases.</p>
|
|
9130
9127
|
<p>A config context is linked to a single schema object and thus they are meant to model individual units of the overall context. In this way, they validate each config context object, not the fully rendered context as viewed on a particular device or virtual machine.</p>
|
|
@@ -9257,10 +9257,6 @@
|
|
|
9257
9257
|
</details>
|
|
9258
9258
|
<h2 id="network-address-translation-nat">Network Address Translation (NAT)<a class="headerlink" href="#network-address-translation-nat" title="Permanent link">¶</a></h2>
|
|
9259
9259
|
<p>An IP address can be designated as the network address translation (NAT) inside IP address for one or more other IP addresses. This is useful primarily to denote a translation between public and private IP addresses. This relationship is followed in both directions: For example, if 10.0.0.1 is assigned as the inside IP for 192.0.2.1, 192.0.2.1 will be displayed as the outside IP for 10.0.0.1.</p>
|
|
9260
|
-
<details class="version-added">
|
|
9261
|
-
<summary>Added in version 1.3.0</summary>
|
|
9262
|
-
<p>Support for multiple outside NAT IP addresses was added.</p>
|
|
9263
|
-
</details>
|
|
9264
9260
|
<h2 id="ipaddress-parenting-concrete-relationship">IPAddress Parenting Concrete Relationship<a class="headerlink" href="#ipaddress-parenting-concrete-relationship" title="Permanent link">¶</a></h2>
|
|
9265
9261
|
<details class="version-added">
|
|
9266
9262
|
<summary>Added in version 2.0.0</summary>
|
|
@@ -9235,10 +9235,6 @@
|
|
|
9235
9235
|
</ul>
|
|
9236
9236
|
<p>As with prefixes, each VLAN may also be assigned a functional role. Prefixes and VLANs share the same set of customizable roles.</p>
|
|
9237
9237
|
<details class="version-changed">
|
|
9238
|
-
<summary>Changed in version 1.5.9</summary>
|
|
9239
|
-
<p>The maximum <code>name</code> length was increased from 64 characters to 255 characters.</p>
|
|
9240
|
-
</details>
|
|
9241
|
-
<details class="version-changed">
|
|
9242
9238
|
<summary>Changed in version 2.0.0</summary>
|
|
9243
9239
|
<ul>
|
|
9244
9240
|
<li>Renamed <code>group</code> field to <code>vlan_group</code>.</li>
|
|
@@ -9131,14 +9131,6 @@
|
|
|
9131
9131
|
<li>Decommissioning</li>
|
|
9132
9132
|
<li>Failed</li>
|
|
9133
9133
|
</ul>
|
|
9134
|
-
<details class="version-added">
|
|
9135
|
-
<summary>Added in version 1.4.0</summary>
|
|
9136
|
-
<ul>
|
|
9137
|
-
<li>Added <code>bridge</code> field.</li>
|
|
9138
|
-
<li>Added <code>parent_interface</code> field.</li>
|
|
9139
|
-
<li>Added <code>status</code> field.</li>
|
|
9140
|
-
</ul>
|
|
9141
|
-
</details>
|
|
9142
9134
|
<details class="version-changed">
|
|
9143
9135
|
<summary>Changed in version 2.0.0</summary>
|
|
9144
9136
|
<p>The relationship to IP addresses has been changed to a many-to-many relationship. This allows an IP address to be assigned to multiple VM interfaces, and a VM interface to have multiple IP addresses assigned to it.</p>
|
|
@@ -9858,10 +9858,10 @@
|
|
|
9858
9858
|
<p>The default value for a select or multi-select field must match one of the existing choices. If the desired default value is not in the list of choices, the choices must be updated and saved before the default can be changed. As a result of this behavior, default values cannot be set on select and multi-select fields when a custom field is created.</p>
|
|
9859
9859
|
</div>
|
|
9860
9860
|
<h4 id="filter-logic">Filter Logic<a class="headerlink" href="#filter-logic" title="Permanent link">¶</a></h4>
|
|
9861
|
-
<
|
|
9862
|
-
<
|
|
9861
|
+
<div class="admonition tip">
|
|
9862
|
+
<p class="admonition-title">Tip</p>
|
|
9863
9863
|
<p>Custom field <a href="../platform-functionality/rest-api/filtering.html#lookup-expressions">extended filtering</a> introduced extended lookup expression filters for <code>exact</code> and <code>icontains</code>, duplicating the functionality of both the <code>Strict</code> and <code>Loose</code> settings.</p>
|
|
9864
|
-
</
|
|
9864
|
+
</div>
|
|
9865
9865
|
<p>The filter logic setting applies to filtering on custom fields in the UI and API. For example, when filtering in the API to find a device with the custom field <code>cf1</code> set to <code>"abc"</code> you would query <code>/api/dcim/devices/?cf_cf1=abc</code>. If the filter logic setting is set to <code>Loose</code> this would match on <code>"ABC"</code> and <code>"abcdef"</code>. If the filter logic setting is set to <code>Strict</code> only devices with the custom field set to exactly "abc" (case sensitive) would be returned. If the filter logic setting is set to <code>disabled</code>, no filters will be available for this custom field, including extended lookup filters. The <code>Loose</code> and <code>Strict</code> settings only change the behavior of the default filter (<code>cf_customfieldname</code>) on <code>text</code>, <code>url</code> and <code>json</code> custom fields.</p>
|
|
9866
9866
|
<h4 id="move-to-advanced-tab">Move to Advanced Tab<a class="headerlink" href="#move-to-advanced-tab" title="Permanent link">¶</a></h4>
|
|
9867
9867
|
<p>When selected, the custom field will appear in the "Advanced" tab of the object detail view instead of the default tab.</p>
|
|
@@ -9541,9 +9541,6 @@
|
|
|
9541
9541
|
<a id="__codelineno-6-9" name="__codelineno-6-9" href="#__codelineno-6-9"></a><span class="w"> </span><span class="p">}</span>
|
|
9542
9542
|
<a id="__codelineno-6-10" name="__codelineno-6-10" href="#__codelineno-6-10"></a><span class="p">}</span>
|
|
9543
9543
|
</code></pre></div>
|
|
9544
|
-
<details class="version-added">
|
|
9545
|
-
<summary>Added in version 1.3.0</summary>
|
|
9546
|
-
</details>
|
|
9547
9544
|
<p>You can also paginate the results returned to you when the data set gets larger. To do so, use the keywords "limit" and "offset". The "limit" keyword will limit the count of results returned after the "offset". If no "offset" is specified, then the default offset is zero.</p>
|
|
9548
9545
|
<div class="highlight"><pre><span></span><code>```graphql
|
|
9549
9546
|
query {
|
|
@@ -9622,9 +9619,6 @@ query {
|
|
|
9622
9619
|
</code></pre></div>
|
|
9623
9620
|
<p>In the updated script, we add the <code>variables = {"location_name": "ams"}</code> variable. We then update the query to let GraphQL know that we will be sending parameters to to filter by <code>location</code>. The updated output is still a JSON object. Instead of fetching all devices, we are filtering by devices in the <code>ams</code> location. The PyNautobot SDK has some <a href="https://pynautobot.readthedocs.io/en/latest/api/core/graphql.html">excellent GraphQL examples</a>. Be sure to check out the documentation.</p>
|
|
9624
9621
|
<h3 id="saving-queries">Saving Queries<a class="headerlink" href="#saving-queries" title="Permanent link">¶</a></h3>
|
|
9625
|
-
<details class="version-added">
|
|
9626
|
-
<summary>Added in version 1.1.0</summary>
|
|
9627
|
-
</details>
|
|
9628
9622
|
<p>Queries can now be stored inside of Nautobot, allowing the user to easily rerun previously defined queries.</p>
|
|
9629
9623
|
<p>Inside of <strong>Extensibility -> Data Management -> GraphQL Queries</strong>, there are views to create and manage GraphQL queries.</p>
|
|
9630
9624
|
<p>Saved queries can be executed from the detailed query view or via a REST API request. The queries can also be populated from the detailed query view into GraphiQL by using the "Open in GraphiQL" button. Additionally, in the GraphiQL UI, there is now a menu item, "Queries", which can be used to populate GraphiQL with any previously saved query.</p>
|
|
@@ -9230,9 +9230,6 @@
|
|
|
9230
9230
|
|
|
9231
9231
|
|
|
9232
9232
|
<h1 id="computed-fields">Computed Fields<a class="headerlink" href="#computed-fields" title="Permanent link">¶</a></h1>
|
|
9233
|
-
<details class="version-added">
|
|
9234
|
-
<summary>Added in version 1.1.0</summary>
|
|
9235
|
-
</details>
|
|
9236
9233
|
<p>Computed fields are very similar in design and implementation to custom fields. See the overview of <a href="customfield.html">Custom Fields</a>. As the name suggests, computed fields serve the need for a custom field where the value is generated using data that Nautobot stores in its database and merging it into a Jinja2 template and associated filters.</p>
|
|
9237
9234
|
<p>As an example, within your automation system, you may want to be able to have an automatically generated field on the Device model that combines the name of the device and the location name in uppercase. To do that, you would define a Jinja2 template for this field that looks like such:</p>
|
|
9238
9235
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>{{ obj.name }}_{{ obj.location.name | upper }}
|
|
@@ -9295,24 +9295,12 @@
|
|
|
9295
9295
|
<li>Selection: A selection of one of several pre-defined custom choices</li>
|
|
9296
9296
|
<li>Multiple selection: A selection field which supports the assignment of multiple values</li>
|
|
9297
9297
|
</ul>
|
|
9298
|
-
<details class="version-added">
|
|
9299
|
-
<summary>Added in version 1.3.0</summary>
|
|
9300
|
-
<p>Support for JSON-type custom fields was added.</p>
|
|
9301
|
-
</details>
|
|
9302
|
-
<details class="version-added">
|
|
9303
|
-
<summary>Added in version 1.6.0</summary>
|
|
9304
|
-
<p>Support for Markdown-type custom fields was added.</p>
|
|
9305
|
-
</details>
|
|
9306
9298
|
<details class="version-changed">
|
|
9307
9299
|
<summary>Changed in version 2.1.8</summary>
|
|
9308
9300
|
<p>Prior to this release, text-type custom fields were always limited to a maximum of 255 characters. In this and later releases, text-type custom fields have no intrinsic length limit unless one is <a href="#custom-field-validation">explicitly defined</a>.</p>
|
|
9309
9301
|
</details>
|
|
9310
9302
|
<p>Each custom field must have a key; this should be a simple database-friendly string, e.g. <code>tps_report</code>. You may also assign a corresponding human-friendly label (e.g. "TPS report"); the label will be displayed on web forms. A weight is also required: Higher-weight fields will be ordered lower within a form. (The default weight is 100.) If a description is provided, it will appear beneath the field in a form.</p>
|
|
9311
9303
|
<details class="version-changed">
|
|
9312
|
-
<summary>Changed in version 1.4.0</summary>
|
|
9313
|
-
<p>Custom fields now have both a <code>name</code> and a <code>slug</code>; in older versions there was no <code>slug</code> field. When migrating existing data to Nautobot 1.4.0 or later, the <code>label</code> and <code>slug</code> will be automatically populated for existing custom fields if necessary.</p>
|
|
9314
|
-
</details>
|
|
9315
|
-
<details class="version-changed">
|
|
9316
9304
|
<summary>Changed in version 2.0.0</summary>
|
|
9317
9305
|
<p>The custom field <code>slug</code> has been renamed to <code>key</code>, and <code>name</code> to <code>label</code>, in order to provide more clarity around their usage. Existing custom fields will automatically be migrated when upgrading to Nautobot 2.0.0 or later.</p>
|
|
9318
9306
|
<p>Additionally, the <code>key</code> now <strong>must</strong> be a valid GraphQL identifier, which in general means that it must start with a lowercase letter and contain only lowercase letters, numbers, and underscores.</p>
|
|
@@ -9323,10 +9311,10 @@
|
|
|
9323
9311
|
</div>
|
|
9324
9312
|
<p>Marking a field as required will force the user to provide a value for the field when creating a new object or when saving an existing object. A default value for the field may also be provided. Use "true" or "false" for boolean fields, or the exact value of a choice for selection fields.</p>
|
|
9325
9313
|
<p>The filter logic controls how values are matched when filtering objects by the custom field. Loose filtering (the default) matches on a partial value, whereas exact matching requires a complete match of the given string to a field's value. For example, exact filtering with the string "red" will only match the exact value "red", whereas loose filtering will match on the values "red", "red-orange", or "bored". Setting the filter logic to "disabled" disables filtering by the field entirely.</p>
|
|
9326
|
-
<
|
|
9327
|
-
<
|
|
9314
|
+
<div class="admonition tip">
|
|
9315
|
+
<p class="admonition-title">Tip</p>
|
|
9328
9316
|
<p>Custom field <a href="rest-api/filtering.html#lookup-expressions">extended filtering</a> introduced extended lookup expression filters for <code>exact</code> and <code>icontains</code>, duplicating the functionality of both the <code>Strict</code> and <code>Loose</code> settings.</p>
|
|
9329
|
-
</
|
|
9317
|
+
</div>
|
|
9330
9318
|
<p>A custom field must be assigned to one or more object types, or models, in Nautobot. Once created, custom fields will automatically appear as part of these models in the web UI and REST API.</p>
|
|
9331
9319
|
<p>When creating a custom field, if "Move to Advanced tab" is checked, this custom field won't appear on the object's main detail tab in the UI, but will appear in the "Advanced" tab. This is useful when the requirement is to hide this field from the main detail tab when, for instance, it is only required for machine-to-machine communication and not user consumption.</p>
|
|
9332
9320
|
<h3 id="custom-field-validation">Custom Field Validation<a class="headerlink" href="#custom-field-validation" title="Permanent link">¶</a></h3>
|
|
@@ -9468,9 +9468,6 @@
|
|
|
9468
9468
|
|
|
9469
9469
|
|
|
9470
9470
|
<h1 id="dynamic-groups">Dynamic Groups<a class="headerlink" href="#dynamic-groups" title="Permanent link">¶</a></h1>
|
|
9471
|
-
<details class="version-added">
|
|
9472
|
-
<summary>Added in version 1.3.0</summary>
|
|
9473
|
-
</details>
|
|
9474
9471
|
<p>Dynamic Groups provide a general-purpose way to collect related objects of a given Content Type, such as Devices associated with a given Location(s) and Status(es), Circuits attached to a given set of Devices, and so forth. A given Dynamic Group may contain any number of objects of the appropriate type as members, and an object may belong to any number of Dynamic Groups of the appropriate content-type as a member of each. It is possible both to query the members of a given Dynamic Group, and also to query which Dynamic Groups a given object is a member of.</p>
|
|
9475
9472
|
<p>There are currently three ways to define the object members of a Dynamic group:</p>
|
|
9476
9473
|
<ol>
|
|
@@ -9479,10 +9476,6 @@
|
|
|
9479
9476
|
<li>Static assignment directly to the group (for example, "Device XYZ01, Device XYZ02, and Device XYZ04")</li>
|
|
9480
9477
|
</ol>
|
|
9481
9478
|
<details class="version-added">
|
|
9482
|
-
<summary>Added in version 1.4.0 — Set-based group assignment</summary>
|
|
9483
|
-
<p>Support for set-based assignment to groups was added.</p>
|
|
9484
|
-
</details>
|
|
9485
|
-
<details class="version-added">
|
|
9486
9479
|
<summary>Added in version 2.3.0 — Static group assignment</summary>
|
|
9487
9480
|
<p>Support for static assignment to groups was added, and the distinction between filter-based and set-based assignment was formally established.</p>
|
|
9488
9481
|
</details>
|
|
@@ -9518,16 +9511,8 @@
|
|
|
9518
9511
|
<p>Assignment of objects to a filter-based Dynamic Group is powered by Nautobot <strong>FilterSet</strong> classes underneath the hood. The <a href="https://django-filter.readthedocs.io/en/stable/"><code>django-filter</code></a> documentation may be a useful reference for users wanting to develop an in-depth understanding of FilterSets, but is by no means required to understand Dynamic Groups.</p>
|
|
9519
9512
|
<p>A filter-based Dynamic Group defines a <code>filter</code> field, which is stored in the database as a JSON dict. An object is considered to be a member of such a Dynamic Group if it has the correct Content Type and it is not excluded by the filter criteria defined by the group. By default, a freshly created Dynamic Group has an empty filter (<code>{}</code>), which means that all objects of the matching Content Type are members of this group, just as a default list view of these objects would display all such objects prior to any filter fields being selected in the web UI.</p>
|
|
9520
9513
|
<p>For example, for a Dynamic Group with Content Type of <code>dcim.device</code> and an empty filter, the list of members would be equivalent to the default Device list view, which in turn is equivalent to the queryset for <code>Device.objects.all()</code> from the database ORM.</p>
|
|
9521
|
-
<details class="version-changed">
|
|
9522
|
-
<summary>Changed in version 1.4.0 — Change in empty filter behavior</summary>
|
|
9523
|
-
<p>In Nautobot v1.3.0 the default for a Dynamic Group with an empty filter was to "fail closed" and have zero members.</p>
|
|
9524
|
-
<p>As of v1.4.0, this behavior has been inverted to default to include all objects matching the Content Type, instead of matching no objects as was previously the case. This was necessary to implement the progressive layering of child filters similarly to how we use filters to reduce desired objects from basic list view filters. This will be described in more detail below.</p>
|
|
9525
|
-
</details>
|
|
9526
9514
|
<p>When editing a filter-based Dynamic Group, under the <strong>Filter Options</strong> section, you will find a <strong>Filter Fields</strong> tab that allows you to select filter criteria. The filter fields available for a given Content Type are backed and validated by underlying FilterSet classes (for example <code>nautobot.dcim.filters.DeviceFilterSet</code>) and are represented in the web interface as a dynamically-generated filter form that corresponds to each eligible filter field.</p>
|
|
9527
9515
|
<h3 id="set-based-dynamic-groups">Set-Based Dynamic Groups<a class="headerlink" href="#set-based-dynamic-groups" title="Permanent link">¶</a></h3>
|
|
9528
|
-
<details class="version-added">
|
|
9529
|
-
<summary>Added in version 1.4.0</summary>
|
|
9530
|
-
</details>
|
|
9531
9516
|
<p>Set-based Dynamic Groups do not directly define a filter for identifying member objects; instead, they define their members based on set operations (AND, OR, and NOT, or Union, Intersection, and Difference if you prefer) involving <em>other</em> Dynamic Groups.</p>
|
|
9532
9517
|
<div class="admonition tip">
|
|
9533
9518
|
<p class="admonition-title">Tip</p>
|
|
@@ -9571,9 +9556,6 @@
|
|
|
9571
9556
|
<p>Keep in mind that the <code>Filter Query Logic</code> will also contain any descendants of the selected model instance. As we can see above the <code>Filter Query Logic</code> uses both location "BKK01" and "AMSO1" and their descendants.</p>
|
|
9572
9557
|
</div>
|
|
9573
9558
|
<h3 id="advanced-filtering-defining-a-set-based-dynamic-group-to-combine-two-others">Advanced Filtering: Defining a Set-Based Dynamic Group to Combine Two Others<a class="headerlink" href="#advanced-filtering-defining-a-set-based-dynamic-group-to-combine-two-others" title="Permanent link">¶</a></h3>
|
|
9574
|
-
<details class="version-added">
|
|
9575
|
-
<summary>Added in version 1.4.0</summary>
|
|
9576
|
-
</details>
|
|
9577
9559
|
<p>Now, let's say that you add a third location to your network. This location is currently being built out, and you don't care about Devices from this location that are Offline status at present. What you want for your "Devices of Interest" Dynamic Group is logic similar to:</p>
|
|
9578
9560
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>(
|
|
9579
9561
|
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a> (
|
|
@@ -9612,9 +9594,6 @@
|
|
|
9612
9594
|
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a>)
|
|
9613
9595
|
</code></pre></div>
|
|
9614
9596
|
<h3 id="advanced-filtering-nested-groups-and-negation">Advanced Filtering: Nested Groups and Negation<a class="headerlink" href="#advanced-filtering-nested-groups-and-negation" title="Permanent link">¶</a></h3>
|
|
9615
|
-
<details class="version-added">
|
|
9616
|
-
<summary>Added in version 1.4.0</summary>
|
|
9617
|
-
</details>
|
|
9618
9597
|
<p>Next, let's say you add a fourth location to your network. This location is in bad shape, and has Devices in a wide range of statuses. You want your "Devices of Interest" group to include all Devices from this location, <em>except for those in Decommissioning status</em>. To express this logic and add these devices to our parent group, we will need to use a combination of groups and the "Exclude (NOT)" operator.</p>
|
|
9619
9598
|
<p>First, you will create an "Location D All Devices" group. This will simply match Devices at Location "DEL01", regardless of their status.</p>
|
|
9620
9599
|
<p><img alt="Another Child Group" src="../../media/models/dynamicgroup_workflow_advanced_2_01.png" /></p>
|
|
@@ -9803,11 +9782,6 @@
|
|
|
9803
9782
|
<p class="admonition-title">Note</p>
|
|
9804
9783
|
<p>Please refer to either the source code definition of the <code>{model_name}FilterSet</code> (e.g. for <code>Device</code> it would be <code>nautobot.dcim.filters.DeviceFilterSet</code>) or the API documentation for the list endpoint (e.g. <code>/api/dcim/devices/</code>) for a given model object, to view the available filter fields and their expectations.</p>
|
|
9805
9784
|
</div>
|
|
9806
|
-
<details class="version-changed">
|
|
9807
|
-
<summary>Changed in version 1.4.0</summary>
|
|
9808
|
-
<p>Prior to v1.4.0, any invalid field names that are not eligible for filtering objects will be discarded upon validation.</p>
|
|
9809
|
-
<p>As of v1.4.0, <a href="../administration/configuration/settings.html#strict_filtering">strict filtering is enabled by default</a>, which causes any invalid field names to result in a <code>ValidationError</code>.</p>
|
|
9810
|
-
</details>
|
|
9811
9785
|
<h3 id="managing-dynamic-groups-in-the-rest-api">Managing Dynamic Groups in the REST API<a class="headerlink" href="#managing-dynamic-groups-in-the-rest-api" title="Permanent link">¶</a></h3>
|
|
9812
9786
|
<h4 id="creating-a-dynamic-group-via-rest">Creating a Dynamic Group via REST<a class="headerlink" href="#creating-a-dynamic-group-via-rest" title="Permanent link">¶</a></h4>
|
|
9813
9787
|
<p>A Dynamic Group may be created by performing a <code>POST</code> to the Dynamic Groups list endpoint at <code>/api/extras/dynamic-groups/</code>.</p>
|
|
@@ -9541,10 +9541,6 @@
|
|
|
9541
9541
|
<p class="admonition-title">Important</p>
|
|
9542
9542
|
<p>Nautobot's Git integration depends on the availability of the <code>git</code> program. If <code>git</code> is not installed, Nautobot will be unable to pull data from Git repositories.</p>
|
|
9543
9543
|
</div>
|
|
9544
|
-
<details class="version-changed">
|
|
9545
|
-
<summary>Changed in version 1.6.2</summary>
|
|
9546
|
-
<p>To proactively avoid conflicts in data, it is no longer possible to configure multiple Git repository entries that both have the same <code>remote_url</code> and also provide the same data type(s). Configuration of multiple entries with the same <code>remote_url</code> is still permitted if they are configured to provide entirely distinct types of data.</p>
|
|
9547
|
-
</details>
|
|
9548
9544
|
<h2 id="repository-configuration">Repository Configuration<a class="headerlink" href="#repository-configuration" title="Permanent link">¶</a></h2>
|
|
9549
9545
|
<p>When defining a Git repository for Nautobot to consume, the <code>name</code>, <code>remote URL</code>, and <code>branch</code> parameters are mandatory - the name acts as a unique identifier, and the remote URL and branch are needed for Nautobot to be able to locate and access the specified repository. Additionally, if the repository is private you may specify a <code>secrets group</code> that can be used to gain access to the repository.</p>
|
|
9550
9546
|
<div class="admonition note">
|
|
@@ -9594,10 +9590,6 @@ in order for the repository to sync.</p>
|
|
|
9594
9590
|
<li><strong>Implicit</strong>: They're defined using a specific folder and file structure to apply the config context to a specific scope.</li>
|
|
9595
9591
|
<li><strong>Local</strong>: Defined at the device/virtual machine level and only being applied to the specific device/virtual machine.</li>
|
|
9596
9592
|
</ul>
|
|
9597
|
-
<details class="version-added">
|
|
9598
|
-
<summary>Added in version 1.5.6</summary>
|
|
9599
|
-
<p>Config contexts provided in a Git repository can now be filtered by <code>locations</code> in addition to all previously supported filters.</p>
|
|
9600
|
-
</details>
|
|
9601
9593
|
<h4 id="metadata">Metadata<a class="headerlink" href="#metadata" title="Permanent link">¶</a></h4>
|
|
9602
9594
|
<p>The metadata used to create the config context has the following options and is specified by the <code>_metadata</code> key.</p>
|
|
9603
9595
|
<table>
|
|
@@ -9382,9 +9382,6 @@
|
|
|
9382
9382
|
<p>Computed Fields with the prefixed <code>cpf_</code> are only available in GraphQL <strong>after</strong> the computed field is created <strong>and</strong> the web service is restarted.</p>
|
|
9383
9383
|
</div>
|
|
9384
9384
|
<h2 id="saved-queries">Saved Queries<a class="headerlink" href="#saved-queries" title="Permanent link">¶</a></h2>
|
|
9385
|
-
<details class="version-added">
|
|
9386
|
-
<summary>Added in version 1.1.0</summary>
|
|
9387
|
-
</details>
|
|
9388
9385
|
<p>Queries can now be stored inside of Nautobot, allowing the user to easily rerun previously defined queries.</p>
|
|
9389
9386
|
<p>Inside of <strong>Extensibility -> Data Management -> GraphQL Queries</strong>, there are views to create and manage GraphQL queries.</p>
|
|
9390
9387
|
<p>Saved queries can be executed from the detailed query view or via a REST API request. The queries can also be populated from the detailed query view into GraphiQL by using the "Open in GraphiQL" button. Additionally, in the GraphiQL UI, there is now a menu item, "Queries", which can be used to populate GraphiQL with any previously saved query.</p>
|
|
@@ -9324,10 +9324,6 @@
|
|
|
9324
9324
|
</ul>
|
|
9325
9325
|
<p>The <code>class_path</code> is often represented as a string in the format of <code><module_name>.<JobClassName></code>, such as <code>example.MyJobWithNoVars</code> or <code>nautobot_golden_config.jobs.BackupJob</code>. Understanding the definitions of these elements will be important in running jobs programmatically.</p>
|
|
9326
9326
|
<details class="version-changed">
|
|
9327
|
-
<summary>Changed in version 1.3.0</summary>
|
|
9328
|
-
<p>With the addition of Job database models, it is now generally possible and preferable to refer to a job by its UUID primary key, similar to other Nautobot database models, rather than its <code>class_path</code>.</p>
|
|
9329
|
-
</details>
|
|
9330
|
-
<details class="version-changed">
|
|
9331
9327
|
<summary>Changed in version 2.0.0</summary>
|
|
9332
9328
|
<p>The Job database model <code>name</code> field is now enforced to be globally unique and so is also an option for uniquely identifying Job records.</p>
|
|
9333
9329
|
</details>
|
|
@@ -9386,11 +9382,7 @@
|
|
|
9386
9382
|
<p class="admonition-title">Note</p>
|
|
9387
9383
|
<p><a href="#jobs-and-class_path">See above</a> for <code>class_path</code> definitions.</p>
|
|
9388
9384
|
</div>
|
|
9389
|
-
<details class="version-added">
|
|
9390
|
-
<summary>Added in version 1.3.10</summary>
|
|
9391
|
-
<p>The <code>--data</code> and <code>--local</code> parameters were added.</p>
|
|
9392
9385
|
<p>The <code>--data</code> parameter must be a JSON string, e.g. <code>--data='{"string_variable": "somevalue", "integer_variable": 123}'</code></p>
|
|
9393
|
-
</details>
|
|
9394
9386
|
<p>Using the same example shown in the API:</p>
|
|
9395
9387
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>nautobot-server runjob --username myusername example.MyJobWithNoVars
|
|
9396
9388
|
</code></pre></div>
|
|
@@ -9292,9 +9292,6 @@
|
|
|
9292
9292
|
|
|
9293
9293
|
|
|
9294
9294
|
<h1 id="job-scheduling-and-approvals">Job Scheduling and Approvals<a class="headerlink" href="#job-scheduling-and-approvals" title="Permanent link">¶</a></h1>
|
|
9295
|
-
<details class="version-added">
|
|
9296
|
-
<summary>Added in version 1.2.0</summary>
|
|
9297
|
-
</details>
|
|
9298
9295
|
<p>Oftentimes jobs will need to be run at a later date or periodically, or require approval from someone before they can be started. To this end, Nautobot offers facilities for scheduling and approving jobs.</p>
|
|
9299
9296
|
<h2 id="job-scheduling">Job Scheduling<a class="headerlink" href="#job-scheduling" title="Permanent link">¶</a></h2>
|
|
9300
9297
|
<p>Jobs can be scheduled to be run immediately, at some point in the future, or at an interval.</p>
|
|
@@ -9327,10 +9324,6 @@
|
|
|
9327
9324
|
<p>Requiring approval for execution of Job Hooks by setting the <code>Meta.approval_required</code> attribute to <code>True</code> on your <code>JobHookReceiver</code> subclass is not supported. The value of this attribute will be ignored. Support for requiring approval of Job Hooks will be added in a future release.</p>
|
|
9328
9325
|
</div>
|
|
9329
9326
|
<p>Scheduled jobs can be approved or denied via the UI and API by any user that has the <code>extras.approve_job</code> permission for the job in question, as well as the appropriate <code>extras.change_scheduledjob</code> and/or <code>extras.delete_scheduledjob</code> permissions.</p>
|
|
9330
|
-
<details class="version-changed">
|
|
9331
|
-
<summary>Changed in version 1.3.0</summary>
|
|
9332
|
-
<p>The <code>extras.approve_job</code> permission is now required for job approvers.</p>
|
|
9333
|
-
</details>
|
|
9334
9327
|
<div class="admonition note">
|
|
9335
9328
|
<p class="admonition-title">Note</p>
|
|
9336
9329
|
<p>Jobs that are past their scheduled run date can still be approved, but the approver will be asked to confirm the operation.</p>
|
|
@@ -9232,9 +9232,6 @@
|
|
|
9232
9232
|
|
|
9233
9233
|
|
|
9234
9234
|
<h1 id="job-buttons">Job Buttons<a class="headerlink" href="#job-buttons" title="Permanent link">¶</a></h1>
|
|
9235
|
-
<details class="version-added">
|
|
9236
|
-
<summary>Added in version 1.5.14</summary>
|
|
9237
|
-
</details>
|
|
9238
9235
|
<p>Job Buttons are predefined buttons that allow users to run jobs directly from within Nautobot object views. It uses the object where the button was pressed as the only input to the job. These are helpful when you want to start a job that requires minimal or no input without having to use the standard job form. For example, you may have a job that only requires a user to select a device. Instead, they can now go to that device in the web UI and click the associated Job Button instead.</p>
|
|
9239
9236
|
<p>Job Buttons can be created in web UI located in the navbar under Jobs > Job Buttons. Each button can be associated with multiple Nautobot object types (location, device, prefix, etc.) and will be displayed on all of the associated object detail views. The text displayed on the button supports Jinja2 templating which allows for using <a href="#context-data">context data</a> to dynamically update or <a href="#conditional-rendering">even be hidden under certain conditions</a>.</p>
|
|
9240
9237
|
<p>The buttons appear at the top right corner of an object's individual detail page for each object type they are associated to. They can be either individual buttons or grouped together in a dropdown for better organization. Buttons will be sorted from left to right based on their <code>weight</code> with the lowest <code>weight</code> button on the left. Any groups of buttons will be displayed to the right of all ungrouped buttons. Group dropdown buttons will inherit the button class from the button with the lowest <code>weight</code> in the group and will be sorted from top to bottom with the lowest <code>weight</code> button on top.</p>
|
|
@@ -9178,9 +9178,6 @@
|
|
|
9178
9178
|
|
|
9179
9179
|
|
|
9180
9180
|
<h1 id="job-hooks">Job Hooks<a class="headerlink" href="#job-hooks" title="Permanent link">¶</a></h1>
|
|
9181
|
-
<details class="version-added">
|
|
9182
|
-
<summary>Added in version 1.4.0</summary>
|
|
9183
|
-
</details>
|
|
9184
9181
|
<p>A Job Hook is a mechanism for automatically starting a <a href="index.html">job</a> when an object is changed. Job Hooks are similar to <a href="../webhook.html">webhooks</a> except that an object change event initiates a <code>JobHookReceiver</code> job instead of a web request. Job hooks are configured in the web UI under <strong>Jobs > Job Hooks</strong>.</p>
|
|
9185
9182
|
<h2 id="configuration">Configuration<a class="headerlink" href="#configuration" title="Permanent link">¶</a></h2>
|
|
9186
9183
|
<ul>
|
|
@@ -9215,9 +9215,6 @@
|
|
|
9215
9215
|
|
|
9216
9216
|
<h1 id="job-models">Job Models<a class="headerlink" href="#job-models" title="Permanent link">¶</a></h1>
|
|
9217
9217
|
<h2 id="job">Job<a class="headerlink" href="#job" title="Permanent link">¶</a></h2>
|
|
9218
|
-
<details class="version-added">
|
|
9219
|
-
<summary>Added in version 1.3.0</summary>
|
|
9220
|
-
</details>
|
|
9221
9218
|
<p>The Job data model provides a database representation of metadata describing a specific installed Job class. It also serves as an anchor point for other data models (JobResult and ScheduledJob in particular) to link against.</p>
|
|
9222
9219
|
<p>For any given Job record, most of its fields are populated initially from data defined in the source code of the corresponding job class. These fields may be explicitly overridden by editing the Job record via the Nautobot UI or REST API if desired. This is generally accomplished by setting a value for the desired field (e.g. <code>grouping</code>) and also setting the corresponding <code>override</code> flag (e.g. <code>grouping_override</code>) to <code>True</code>. If the <code>override</code> flag for a field is cleared (set back to <code>False</code>) then the corresponding flag will automatically revert to the original value defined by the Job class source code when the record is saved.</p>
|
|
9223
9220
|
<div class="admonition note">
|
|
@@ -9242,9 +9239,6 @@
|
|
|
9242
9239
|
</div>
|
|
9243
9240
|
<p>For any Job that is loaded into Nautobot, the Job must be enabled to run. See <a href="index.html#enabling-jobs-for-running">Enabling Jobs for Running</a> for more details.</p>
|
|
9244
9241
|
<h2 id="job-log-entry">Job Log Entry<a class="headerlink" href="#job-log-entry" title="Permanent link">¶</a></h2>
|
|
9245
|
-
<details class="version-added">
|
|
9246
|
-
<summary>Added in version 1.2.0</summary>
|
|
9247
|
-
</details>
|
|
9248
9242
|
<p>Log messages from <a href="index.html">Jobs</a> are stored in as <code>JobLogEntry</code> objects. This allows more performant querying of log messages and even allows viewing of logs while the job is still running.</p>
|
|
9249
9243
|
<p>Records of this type store the following data:</p>
|
|
9250
9244
|
<ul>
|
|
@@ -9254,10 +9248,6 @@
|
|
|
9254
9248
|
<li>The log message.</li>
|
|
9255
9249
|
<li>If provided, the string format of the logged object and it's absolute url.</li>
|
|
9256
9250
|
</ul>
|
|
9257
|
-
<details class="version-added">
|
|
9258
|
-
<summary>Added in version 1.2.2</summary>
|
|
9259
|
-
<p>REST API and GraphQL support for querying <code>JobLogEntry</code> records were added.</p>
|
|
9260
|
-
</details>
|
|
9261
9251
|
<h2 id="job-results">Job Results<a class="headerlink" href="#job-results" title="Permanent link">¶</a></h2>
|
|
9262
9252
|
<p>Nautobot provides a generic data model for storing and reporting the results of background tasks, such as the execution of custom jobs or the synchronization of data from a Git repository.</p>
|
|
9263
9253
|
<p>Records of this type store the following data:</p>
|
|
@@ -9271,10 +9261,6 @@
|
|
|
9271
9261
|
<li>A block of structured data representing the return value from the <code>.run()</code> method (often rendered as JSON).</li>
|
|
9272
9262
|
</ul>
|
|
9273
9263
|
<details class="version-changed">
|
|
9274
|
-
<summary>Changed in version 1.2.0</summary>
|
|
9275
|
-
<p>Note that prior to Nautobot 1.2, job log records were stored in the <code>data</code> field; they are now stored as distinct <a href="#job-log-entry"><code>JobLogEntry</code></a> records instead.</p>
|
|
9276
|
-
</details>
|
|
9277
|
-
<details class="version-changed">
|
|
9278
9264
|
<summary>Changed in version 2.3.0</summary>
|
|
9279
9265
|
<p>The Additional Data tab has been removed, you can now find the data in the Advanced Tab.</p>
|
|
9280
9266
|
</details>
|
|
@@ -9120,9 +9120,6 @@
|
|
|
9120
9120
|
|
|
9121
9121
|
|
|
9122
9122
|
<h1 id="note">Note<a class="headerlink" href="#note" title="Permanent link">¶</a></h1>
|
|
9123
|
-
<details class="version-added">
|
|
9124
|
-
<summary>Added in version 1.4.0</summary>
|
|
9125
|
-
</details>
|
|
9126
9123
|
<p>Notes provide a place for you to store notes or general information on an object, such as a Device, that may not require a specific field for. This could be a note on a recent upgrade, a warning about a problematic device, or the reason the Rack was marked with the Status <code>Retired</code>.</p>
|
|
9127
9124
|
<p>The note field supports <a href="https://www.markdownguide.org/cheat-sheet/#basic-syntax">Markdown Basic Syntax</a> as well as <a href="template-filters.html#render_markdown">a limited subset of HTML</a>.</p>
|
|
9128
9125
|
|
|
@@ -9404,22 +9404,16 @@
|
|
|
9404
9404
|
<li><strong>One-to-many</strong> - where one side of the connection can only have one object. For example, where a controller has many supplicants like FEX and parent switch. A FEX can be uplinked to one parent switch (in most cases), but the parent switch can have many FEX.</li>
|
|
9405
9405
|
<li><strong>One-to-one</strong> - where there can be only one object on either side of the relationship. For example, an IP address serving as a router-id for a device. Each device has at most one router-id, and each IP address can be a router-id for at most one device.</li>
|
|
9406
9406
|
</ul>
|
|
9407
|
-
<details class="version-added">
|
|
9408
|
-
<summary>Added in version 1.2.0</summary>
|
|
9409
9407
|
<p>Additionally, there are two <em>symmetric</em> relationship types that can be used when defining a relationship between objects of the same type. These relationship types treat the two <em>sides</em> of a relationship as interchangeable (much like the A/Z sides of a circuit, or the endpoints of a cable) rather than distinguishing between the <em>source</em> and <em>destination</em> of a relationship as the non-symmetric relationship types above do.</p>
|
|
9410
9408
|
<ul>
|
|
9411
|
-
<li><strong>Symmetric Many-to-many</strong> - as in Many-to-many, but acting more as an <em>undirected graph</em> of
|
|
9409
|
+
<li><strong>Symmetric Many-to-many</strong> - as in Many-to-many, but acting more as an <em>undirected graph</em> of several objects of the same type. For example, this could be used to define a set of devices participating in a routing topology, where each device has some number of peers and there's no distinction between <em>source</em> and <em>destination</em> peers.</li>
|
|
9412
9410
|
<li><strong>Symmetric One-to-one</strong> - as in One-to-one, but defining a relationship between exactly two objects of the same type. For example, a HSRP/VRRP pair of redundant devices, where each device has exactly one peer device.</li>
|
|
9413
9411
|
</ul>
|
|
9414
|
-
</details>
|
|
9415
9412
|
<div class="admonition note">
|
|
9416
9413
|
<p class="admonition-title">Note</p>
|
|
9417
9414
|
<p>A symmetric many-to-many relationship can be, but is not necessarily, a <em>complete graph</em> or <em>full mesh</em>. For example, in the routing topology example above, if Device <em>A</em> and Device <em>B</em> are peers, and Device <em>B</em> and Device <em>C</em> are peers, this does not automatically imply a relationship between Devices <em>A</em> and <em>C</em> -- they <strong>might or might not</strong> also be peers, depending on how you define and populate the specific associations for this relationship.</p>
|
|
9418
9415
|
</div>
|
|
9419
9416
|
<h2 id="required-relationships">Required Relationships<a class="headerlink" href="#required-relationships" title="Permanent link">¶</a></h2>
|
|
9420
|
-
<details class="version-added">
|
|
9421
|
-
<summary>Added in version 1.5.0</summary>
|
|
9422
|
-
</details>
|
|
9423
9417
|
<p>Relationships can be marked as being required. By default, relationships are not marked as being required.</p>
|
|
9424
9418
|
<p>To mark a relationship as being required, select "Source objects MUST implement this relationship" or conversely "Destination objects MUST implement this relationship" from the "Required on" field when editing or creating a relationship:</p>
|
|
9425
9419
|
<ul>
|
|
@@ -9483,9 +9477,6 @@ From the Devices/Circuits example above, you might label the relationship so tha
|
|
|
9483
9477
|
</code></pre></div>
|
|
9484
9478
|
<h3 id="configuring-the-relationship-between-objects">Configuring the Relationship between Objects<a class="headerlink" href="#configuring-the-relationship-between-objects" title="Permanent link">¶</a></h3>
|
|
9485
9479
|
<h4 id="via-object-endpoints">Via Object Endpoints<a class="headerlink" href="#via-object-endpoints" title="Permanent link">¶</a></h4>
|
|
9486
|
-
<details class="version-added">
|
|
9487
|
-
<summary>Added in version 1.4.0</summary>
|
|
9488
|
-
</details>
|
|
9489
9480
|
<p>To get object relationships and associations from the REST API, you can query any object endpoint with the <a href="rest-api/filtering.html#filtering-included-fields"><code>?include=relationships</code> query parameter</a> included, for example <code>GET /api/dcim/devices/f472bb77-7f56-4e79-ac25-2dc73eb63924/?include=relationships</code>. The API response will include a nested dictionary of relationships and associations applicable to the object(s) retrieved.</p>
|
|
9490
9481
|
<p>Similarly, you can update the relationship associations for a given object via an HTTP <code>POST</code> or <code>PATCH</code> request, generally by including the nested key <code>["relationships"][<relationship_key>]["source"|"destination"|"peer"]["objects"]</code> with a list of objects to associate.</p>
|
|
9491
9482
|
<p>For more details on this feature, refer to the <a href="rest-api/overview.html">REST API documentation</a>.</p>
|
|
@@ -9219,9 +9219,6 @@
|
|
|
9219
9219
|
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="p">}</span>
|
|
9220
9220
|
</code></pre></div>
|
|
9221
9221
|
<h2 id="initial-token-provisioning">Initial Token Provisioning<a class="headerlink" href="#initial-token-provisioning" title="Permanent link">¶</a></h2>
|
|
9222
|
-
<details class="version-added">
|
|
9223
|
-
<summary>Added in version 1.3.0</summary>
|
|
9224
|
-
</details>
|
|
9225
9222
|
<p>Ideally, each user should provision his or her own REST API token(s) via the web UI. However, you may encounter where a token must be created by a user via the REST API itself. Nautobot provides a special endpoint to provision tokens using a valid username and password combination.</p>
|
|
9226
9223
|
<p>To provision a token via the REST API, make a <code>POST</code> request to the <code>/api/users/tokens/</code> endpoint:</p>
|
|
9227
9224
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span><span class="se">\</span>
|
|
@@ -9372,9 +9372,6 @@
|
|
|
9372
9372
|
<li><code>?include=computed_fields</code> - Any object supporting <a href="../computedfield.html">Computed Fields</a>. Computed field values are not included by default, but can be added by specifying this query parameter.</li>
|
|
9373
9373
|
<li><code>?exclude_m2m=true</code> - Any object with many-to-many relations to another type of object. These related objects are included by default, but can be excluded (in many cases improving the REST API performance) by specifying this query parameter.</li>
|
|
9374
9374
|
</ul>
|
|
9375
|
-
<details class="version-added">
|
|
9376
|
-
<summary>Added in version 1.4.0 — Added <code>include=relationships</code> and <code>include=computed_fields</code> support</summary>
|
|
9377
|
-
</details>
|
|
9378
9375
|
<details class="version-changed">
|
|
9379
9376
|
<summary>Changed in version 2.0.0 — Changed config contexts to excluded by default, added <code>include=config_context</code> support</summary>
|
|
9380
9377
|
</details>
|
|
@@ -9385,10 +9382,6 @@
|
|
|
9385
9382
|
<p>The objects returned by an API list endpoint can be filtered by attaching one or more query parameters to the request URL. For example, <code>GET /api/dcim/locations/?status=active</code> will return only locations with a status of "active."</p>
|
|
9386
9383
|
<p>Multiple parameters can be joined to further narrow results. For example, <code>GET /api/dcim/locations/?status=active&parent=europe&location_type=country</code> will return only active "country" type locations in Europe.</p>
|
|
9387
9384
|
<p>Generally, passing multiple values for a single parameter will result in a logical OR operation. For example, <code>GET /api/dcim/locations/?parent=north-america&parent=south-america&location_type=country</code> will return "country" type locations in North America <em>or</em> South America. However, a logical AND operation will be used in instances where a field may have multiple values, such as tags. For example, <code>GET /api/dcim/locations/?tag=foo&tag=bar</code> will return only locations which have both the "foo" <em>and</em> "bar" tags applied.</p>
|
|
9388
|
-
<details class="version-changed">
|
|
9389
|
-
<summary>Changed in version 1.4.0 — <code>STRICT_FILTERING</code> by default</summary>
|
|
9390
|
-
<p>If <a href="../../administration/configuration/settings.html#strict_filtering"><code>STRICT_FILTERING</code></a> is True (its default value), unrecognized filter parameters now result in a 400 Bad Request response instead of being silently ignored.</p>
|
|
9391
|
-
</details>
|
|
9392
9385
|
<h3 id="filtering-by-choice-field">Filtering by Choice Field<a class="headerlink" href="#filtering-by-choice-field" title="Permanent link">¶</a></h3>
|
|
9393
9386
|
<p>Some models have fields which are limited to specific choices, such as the <code>type</code> field on the Interface model. To find all available choices for this field, make an authenticated <code>OPTIONS</code> request to the model's list endpoint, and use <code>jq</code> to extract the relevant parameters:</p>
|
|
9394
9387
|
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>curl -s -X OPTIONS \
|
|
@@ -9433,10 +9426,6 @@
|
|
|
9433
9426
|
<p>For custom field filters, due to historical details of implementation, only a single filter value can be specified when matching a given field. In other words, in the above example, you could <em>not</em> add <code>&cf_foo=456</code> to the query in order to get all locations where custom field <code>foo</code> is 123 <em>or</em> 456; instead you would need to run two separate queries. This restriction does not apply to custom field filters using lookup expressions (next section) and will likely be changed in a future major version of Nautobot.</p>
|
|
9434
9427
|
</div>
|
|
9435
9428
|
<p>Custom fields can be mixed with built-in fields to further narrow results. When creating a custom string field, the type of filtering selected (loose versus exact) determines whether partial or full matching is used.</p>
|
|
9436
|
-
<details class="version-added">
|
|
9437
|
-
<summary>Added in version 1.4.0 — Custom field support for lookup expressions</summary>
|
|
9438
|
-
<p>Custom fields can now use the <a href="#lookup-expressions">lookup expressions</a> listed in the next section.</p>
|
|
9439
|
-
</details>
|
|
9440
9429
|
<details class="version-changed">
|
|
9441
9430
|
<summary>Changed in version 2.0.0 — Custom field filters changed from <code>name</code> to <code>key</code> based</summary>
|
|
9442
9431
|
<p>Custom field filters are now based on the custom field <code>key</code> string (in 1.x they used the field's <code>name</code>).</p>
|
|
@@ -9484,9 +9473,6 @@
|
|
|
9484
9473
|
<li><code>__isnull</code> - is null (only if this field is nullable, which most string fields in Nautobot are not)</li>
|
|
9485
9474
|
</ul>
|
|
9486
9475
|
<details class="version-added">
|
|
9487
|
-
<summary>Added in version 1.3.0 — Added regular expression lookup expressions</summary>
|
|
9488
|
-
</details>
|
|
9489
|
-
<details class="version-added">
|
|
9490
9476
|
<summary>Added in version 2.1.0 — Added <code>__isnull</code> lookup expression</summary>
|
|
9491
9477
|
</details>
|
|
9492
9478
|
<h3 id="foreign-keys-other-fields">Foreign Keys & Other Fields<a class="headerlink" href="#foreign-keys-other-fields" title="Permanent link">¶</a></h3>
|