Merge branch 'develop' into fix/generic_prefetch_4.2
@ -14,7 +14,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: NetBox version
|
label: NetBox version
|
||||||
description: What version of NetBox are you currently running?
|
description: What version of NetBox are you currently running?
|
||||||
placeholder: v4.0.0
|
placeholder: v4.1.11
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
@ -24,6 +24,20 @@ body:
|
|||||||
- Data model extension
|
- Data model extension
|
||||||
- New functionality
|
- New functionality
|
||||||
- Change to existing functionality
|
- Change to existing functionality
|
||||||
|
- Other
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Triage priority
|
||||||
|
description: >
|
||||||
|
Issue triage may be prioritized in some cases. Select whichever of the following
|
||||||
|
conditions applies, if any.
|
||||||
|
options:
|
||||||
|
- I volunteer to perform this work (if approved)
|
||||||
|
- I'm a NetBox Labs customer
|
||||||
|
- N/A
|
||||||
|
default: 2
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
@ -22,11 +22,24 @@ body:
|
|||||||
- Self-hosted
|
- Self-hosted
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Triage priority
|
||||||
|
description: >
|
||||||
|
Issue triage may be prioritized in some cases. Select whichever of the following
|
||||||
|
conditions applies, if any.
|
||||||
|
options:
|
||||||
|
- I volunteer to perform this work (if approved)
|
||||||
|
- I'm a NetBox Labs customer
|
||||||
|
- N/A
|
||||||
|
default: 2
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
- type: input
|
- type: input
|
||||||
attributes:
|
attributes:
|
||||||
label: NetBox Version
|
label: NetBox Version
|
||||||
description: What version of NetBox are you currently running?
|
description: What version of NetBox are you currently running?
|
||||||
placeholder: v4.0.0
|
placeholder: v4.1.11
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
3
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -7,6 +7,9 @@ contact_links:
|
|||||||
- name: ❓ Discussion
|
- name: ❓ Discussion
|
||||||
url: https://github.com/netbox-community/netbox/discussions
|
url: https://github.com/netbox-community/netbox/discussions
|
||||||
about: "If you're just looking for help, try starting a discussion instead."
|
about: "If you're just looking for help, try starting a discussion instead."
|
||||||
|
- name: 👔 Professional Support
|
||||||
|
url: https://netboxlabs.com/netbox-enterprise/
|
||||||
|
about: "Professional support is available for NetBox Enterprise or Cloud."
|
||||||
- name: 🌎 Correct a Translation
|
- name: 🌎 Correct a Translation
|
||||||
url: https://explore.transifex.com/netbox-community/netbox/
|
url: https://explore.transifex.com/netbox-community/netbox/
|
||||||
about: "Spot an incorrect translation? You can propose a fix on Transifex."
|
about: "Spot an incorrect translation? You can propose a fix on Transifex."
|
||||||
|
21
.github/workflows/auto-assign-issue.yml
vendored
@ -1,21 +0,0 @@
|
|||||||
# auto-assign-issue (https://github.com/marketplace/actions/auto-assign-issue)
|
|
||||||
name: Issue assignment
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [opened]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
issues: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
auto-assign:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: pozil/auto-assign-issue@v1
|
|
||||||
if: "contains(github.event.issue.labels.*.name, 'status: needs triage')"
|
|
||||||
with:
|
|
||||||
# Weighted assignments
|
|
||||||
assignees: arthanson:3, jeffgdotorg:3, jeremystretch:3, abhi1693, DanSheps
|
|
||||||
numOfAssignee: 1
|
|
||||||
abortIfPreviousAssignees: true
|
|
32
.github/workflows/ci.yml
vendored
@ -1,7 +1,25 @@
|
|||||||
name: CI
|
name: CI
|
||||||
on: [push, pull_request]
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths-ignore:
|
||||||
|
- 'contrib/**'
|
||||||
|
- 'docs/**'
|
||||||
|
- 'netbox/translations/**'
|
||||||
|
pull_request:
|
||||||
|
paths-ignore:
|
||||||
|
- 'contrib/**'
|
||||||
|
- 'docs/**'
|
||||||
|
- 'netbox/translations/**'
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
|
# Add concurrency group to control job running
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.event_name }}-${{ github.ref }}-${{ github.actor }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@ -10,7 +28,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ['3.10', '3.11', '3.12']
|
python-version: ['3.10', '3.11', '3.12']
|
||||||
node-version: ['18.x']
|
node-version: ['20.x']
|
||||||
services:
|
services:
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
@ -34,12 +52,12 @@ jobs:
|
|||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
@ -47,7 +65,7 @@ jobs:
|
|||||||
run: npm install -g yarn
|
run: npm install -g yarn
|
||||||
|
|
||||||
- name: Setup Node.js with Yarn Caching
|
- name: Setup Node.js with Yarn Caching
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-version }}
|
node-version: ${{ matrix.node-version }}
|
||||||
cache: yarn
|
cache: yarn
|
||||||
@ -60,7 +78,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
pip install pycodestyle coverage tblib
|
pip install ruff coverage tblib
|
||||||
|
|
||||||
- name: Build documentation
|
- name: Build documentation
|
||||||
run: mkdocs build
|
run: mkdocs build
|
||||||
@ -72,7 +90,7 @@ jobs:
|
|||||||
run: python netbox/manage.py makemigrations --check
|
run: python netbox/manage.py makemigrations --check
|
||||||
|
|
||||||
- name: Check PEP8 compliance
|
- name: Check PEP8 compliance
|
||||||
run: pycodestyle --ignore=W504,E501 --exclude=node_modules netbox/
|
run: ruff check netbox/
|
||||||
|
|
||||||
- name: Check UI ESLint, TypeScript, and Prettier Compliance
|
- name: Check UI ESLint, TypeScript, and Prettier Compliance
|
||||||
run: yarn --cwd netbox/project-static validate
|
run: yarn --cwd netbox/project-static validate
|
||||||
|
32
.github/workflows/close-incomplete-issues.yml
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# close-stale-issues (https://github.com/marketplace/actions/close-stale-issues)
|
||||||
|
name: Close incomplete issues
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '15 4 * * *'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
actions: write
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v9
|
||||||
|
with:
|
||||||
|
close-issue-message: >
|
||||||
|
This issue is being closed as no further information has been provided. If
|
||||||
|
you would like to revisit this topic, please first modify your original post
|
||||||
|
to include all the requested detail, and then ask that the issue be reopened.
|
||||||
|
days-before-stale: 7
|
||||||
|
days-before-close: 7
|
||||||
|
only-issue-labels: 'status: revisions needed'
|
||||||
|
operations-per-run: 100
|
||||||
|
remove-stale-when-updated: false
|
||||||
|
stale-issue-label: 'pending closure'
|
||||||
|
stale-issue-message: >
|
||||||
|
This is a reminder that additional information is needed in order to further
|
||||||
|
triage this issue. If the requested details are not provided, the issue will
|
||||||
|
soon be closed automatically.
|
23
.github/workflows/close-stale-issues.yml
vendored
@ -7,6 +7,7 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
|
actions: write
|
||||||
issues: write
|
issues: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
@ -16,18 +17,19 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v9
|
- uses: actions/stale@v9
|
||||||
with:
|
with:
|
||||||
|
# General parameters
|
||||||
|
operations-per-run: 200
|
||||||
|
remove-stale-when-updated: false
|
||||||
|
|
||||||
|
# Issue parameters
|
||||||
close-issue-message: >
|
close-issue-message: >
|
||||||
This issue has been automatically closed due to lack of activity. In an
|
This issue has been automatically closed due to lack of activity. In an
|
||||||
effort to reduce noise, please do not comment any further. Note that the
|
effort to reduce noise, please do not comment any further. Note that the
|
||||||
core maintainers may elect to reopen this issue at a later date if deemed
|
core maintainers may elect to reopen this issue at a later date if deemed
|
||||||
necessary.
|
necessary.
|
||||||
close-pr-message: >
|
days-before-issue-stale: 90
|
||||||
This PR has been automatically closed due to lack of activity.
|
days-before-issue-close: 30
|
||||||
days-before-stale: 90
|
exempt-issue-labels: 'status: accepted,status: backlog,status: blocked'
|
||||||
days-before-close: 30
|
|
||||||
exempt-issue-labels: 'status: accepted,status: blocked,status: needs milestone'
|
|
||||||
operations-per-run: 100
|
|
||||||
remove-stale-when-updated: false
|
|
||||||
stale-issue-label: 'pending closure'
|
stale-issue-label: 'pending closure'
|
||||||
stale-issue-message: >
|
stale-issue-message: >
|
||||||
This issue has been automatically marked as stale because it has not had
|
This issue has been automatically marked as stale because it has not had
|
||||||
@ -37,6 +39,13 @@ jobs:
|
|||||||
process by "bumping" the issue; doing so will result in its immediate closure
|
process by "bumping" the issue; doing so will result in its immediate closure
|
||||||
and you may be barred from participating in any future discussions. Please see
|
and you may be barred from participating in any future discussions. Please see
|
||||||
our [contributing guide](https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md).
|
our [contributing guide](https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md).
|
||||||
|
|
||||||
|
# Pull request parameters
|
||||||
|
close-pr-message: >
|
||||||
|
This PR has been automatically closed due to lack of activity.
|
||||||
|
days-before-pr-stale: 30
|
||||||
|
days-before-pr-close: 15
|
||||||
|
exempt-pr-labels: 'status: blocked'
|
||||||
stale-pr-label: 'pending closure'
|
stale-pr-label: 'pending closure'
|
||||||
stale-pr-message: >
|
stale-pr-message: >
|
||||||
This PR has been automatically marked as stale because it has not had
|
This PR has been automatically marked as stale because it has not had
|
||||||
|
54
.github/workflows/update-translation-strings.yml
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
name: Update translation strings
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 5 * * *'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
env:
|
||||||
|
LOCALE: "en"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
makemessages:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
NETBOX_CONFIGURATION: netbox.configuration_testing
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Create app token
|
||||||
|
uses: actions/create-github-app-token@v1
|
||||||
|
id: app-token
|
||||||
|
with:
|
||||||
|
app-id: 1076524
|
||||||
|
private-key: ${{ secrets.HOUSEKEEPING_SECRET_KEY }}
|
||||||
|
|
||||||
|
- name: Check out repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
token: ${{ steps.app-token.outputs.token }}
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: 3.11
|
||||||
|
|
||||||
|
- name: Install system dependencies
|
||||||
|
run: sudo apt install -y gettext
|
||||||
|
|
||||||
|
- name: Install Python dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
- name: Run makemessages
|
||||||
|
run: python netbox/manage.py makemessages -l ${{ env.LOCALE }}
|
||||||
|
|
||||||
|
- name: Commit changes
|
||||||
|
uses: EndBug/add-and-commit@v9
|
||||||
|
with:
|
||||||
|
add: 'netbox/translations/'
|
||||||
|
default_author: github_actions
|
||||||
|
message: 'Update source translation strings'
|
3
.gitignore
vendored
@ -17,12 +17,15 @@ yarn-error.log*
|
|||||||
/venv/
|
/venv/
|
||||||
/*.sh
|
/*.sh
|
||||||
local_requirements.txt
|
local_requirements.txt
|
||||||
|
local_settings.py
|
||||||
!upgrade.sh
|
!upgrade.sh
|
||||||
fabfile.py
|
fabfile.py
|
||||||
gunicorn.py
|
gunicorn.py
|
||||||
|
uwsgi.ini
|
||||||
netbox.log
|
netbox.log
|
||||||
netbox.pid
|
netbox.pid
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.idea
|
.idea
|
||||||
.coverage
|
.coverage
|
||||||
.vscode
|
.vscode
|
||||||
|
.python-version
|
||||||
|
44
.pre-commit-config.yaml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
repos:
|
||||||
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
|
rev: v0.6.9
|
||||||
|
hooks:
|
||||||
|
- id: ruff
|
||||||
|
name: "Ruff linter"
|
||||||
|
args: [ netbox/ ]
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: django-check
|
||||||
|
name: "Django system check"
|
||||||
|
description: "Run Django's internal check for common problems"
|
||||||
|
entry: python netbox/manage.py check
|
||||||
|
language: system
|
||||||
|
pass_filenames: false
|
||||||
|
types: [python]
|
||||||
|
- id: django-makemigrations
|
||||||
|
name: "Django migrations check"
|
||||||
|
description: "Check for any missing Django migrations"
|
||||||
|
entry: python netbox/manage.py makemigrations --check
|
||||||
|
language: system
|
||||||
|
pass_filenames: false
|
||||||
|
types: [python]
|
||||||
|
- id: mkdocs-build
|
||||||
|
name: "Build documentation"
|
||||||
|
description: "Build the documentation with mkdocs"
|
||||||
|
files: 'docs/'
|
||||||
|
entry: mkdocs build
|
||||||
|
language: system
|
||||||
|
pass_filenames: false
|
||||||
|
- id: yarn-validate
|
||||||
|
name: "Yarn validate"
|
||||||
|
description: "Check UI ESLint, TypeScript, and Prettier compliance"
|
||||||
|
files: 'netbox/project-static/'
|
||||||
|
entry: yarn --cwd netbox/project-static validate
|
||||||
|
language: system
|
||||||
|
pass_filenames: false
|
||||||
|
- id: verify-bundles
|
||||||
|
name: "Verify static asset bundles"
|
||||||
|
description: "Ensure that any modified static assets have been compiled"
|
||||||
|
files: 'netbox/project-static/'
|
||||||
|
entry: scripts/verify-bundles.sh
|
||||||
|
language: system
|
||||||
|
pass_filenames: false
|
12
.tx/config
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
[main]
|
||||||
|
host = https://app.transifex.com
|
||||||
|
|
||||||
|
[o:netbox-community:p:netbox:r:9cbf4fcf95b3d92e4ebbf1a5e5d1caee]
|
||||||
|
file_filter = netbox/translations/<lang>/LC_MESSAGES/django.po
|
||||||
|
source_file = netbox/translations/en/LC_MESSAGES/django.po
|
||||||
|
type = PO
|
||||||
|
minimum_perc = 0
|
||||||
|
resource_name = django.po
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
||||||
|
|
@ -40,7 +40,7 @@ NetBox users are welcome to participate in either role, on stage or in the crowd
|
|||||||
|
|
||||||
* First, ensure that you're running the [latest stable version](https://github.com/netbox-community/netbox/releases) of NetBox. If you're running an older version, it's likely that the bug has already been fixed.
|
* First, ensure that you're running the [latest stable version](https://github.com/netbox-community/netbox/releases) of NetBox. If you're running an older version, it's likely that the bug has already been fixed.
|
||||||
|
|
||||||
* Next, search our [issues list](https://github.com/netbox-community/netbox/issues?q=is%3Aissue) to see if the bug you've found has already been reported. If you come across a bug report that seems to match, please click "add a reaction" in the top right corner of the issue and add a thumbs up (:thumbsup:). This will help draw more attention to it. Any comments you can add to provide additional information or context would also be much appreciated.
|
* Next, search our [issues list](https://github.com/netbox-community/netbox/issues?q=is%3Aissue) to see if the bug you've found has already been reported. If you come across a bug report that seems to match, please click "add a reaction" in the bottom left corner of the issue and add a thumbs up ( :thumbsup: ). This will help draw more attention to it. Any comments you can add to provide additional information or context would also be much appreciated.
|
||||||
|
|
||||||
* If you can't find any existing issues (open or closed) that seem to match yours, you're welcome to [submit a new bug report](https://github.com/netbox-community/netbox/issues/new?label=type%3A+bug&template=bug_report.yaml). Be sure to complete the entire report template, including detailed steps that someone triaging your issue can follow to confirm the reported behavior. (If we're not able to replicate the bug based on the information provided, we'll ask for additional detail.)
|
* If you can't find any existing issues (open or closed) that seem to match yours, you're welcome to [submit a new bug report](https://github.com/netbox-community/netbox/issues/new?label=type%3A+bug&template=bug_report.yaml). Be sure to complete the entire report template, including detailed steps that someone triaging your issue can follow to confirm the reported behavior. (If we're not able to replicate the bug based on the information provided, we'll ask for additional detail.)
|
||||||
|
|
||||||
@ -56,7 +56,9 @@ intake policy](https://github.com/netbox-community/netbox/wiki/Issue-Intake-Poli
|
|||||||
|
|
||||||
## :bulb: Feature Requests
|
## :bulb: Feature Requests
|
||||||
|
|
||||||
* First, check the GitHub [issues list](https://github.com/netbox-community/netbox/issues?q=is%3Aissue) to see if the feature you have in mind has already been proposed. If you happen to find an open feature request that matches your idea, click "add a reaction" in the top right corner of the issue and add a thumbs up (:thumbsup:). This ensures that the issue has a better chance of receiving attention. Also feel free to add a comment with any additional justification for the feature.
|
* First, check the GitHub [issues list](https://github.com/netbox-community/netbox/issues?q=is%3Aissue) to see if the feature you have in mind has already been proposed. If you happen to find an open feature request that matches your idea, click "add a reaction" in the top right corner of the issue and add a thumbs up ( :thumbsup: ). This ensures that the issue has a better chance of receiving attention. Also feel free to add a comment with any additional justification for the feature.
|
||||||
|
|
||||||
|
* Please don't submit duplicate issues! Sometimes we reject feature requests, for various reasons. Even if you disagree with those reasons, please **do not** submit a duplicate feature request. It is very disrepectful of the maintainers' time, and you may be barred from opening future issues.
|
||||||
|
|
||||||
* If you have a rough idea that's not quite ready for formal submission yet, start a [GitHub discussion](https://github.com/netbox-community/netbox/discussions) instead. This is a great way to test the viability and narrow down the scope of a new feature prior to submitting a formal proposal, and can serve to generate interest in your idea from other community members.
|
* If you have a rough idea that's not quite ready for formal submission yet, start a [GitHub discussion](https://github.com/netbox-community/netbox/discussions) instead. This is a great way to test the viability and narrow down the scope of a new feature prior to submitting a formal proposal, and can serve to generate interest in your idea from other community members.
|
||||||
|
|
||||||
|
26
README.md
@ -1,13 +1,17 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://raw.githubusercontent.com/netbox-community/netbox/develop/docs/netbox_logo.svg" width="400" alt="NetBox logo" />
|
<img src="https://raw.githubusercontent.com/netbox-community/netbox/develop/docs/netbox_logo_light.svg" width="400" alt="NetBox logo" />
|
||||||
<p><strong>The cornerstone of every automated network</strong></p>
|
<p><strong>The cornerstone of every automated network</strong></p>
|
||||||
<a href="https://github.com/netbox-community/netbox/releases"><img src="https://img.shields.io/github/v/release/netbox-community/netbox" alt="Latest release" /></a>
|
<a href="https://github.com/netbox-community/netbox/releases"><img src="https://img.shields.io/github/v/release/netbox-community/netbox" alt="Latest release" /></a>
|
||||||
<a href="https://github.com/netbox-community/netbox/blob/master/LICENSE.txt"><img src="https://img.shields.io/badge/license-Apache_2.0-blue.svg" alt="License" /></a>
|
<a href="https://github.com/netbox-community/netbox/blob/master/LICENSE.txt"><img src="https://img.shields.io/badge/license-Apache_2.0-blue.svg" alt="License" /></a>
|
||||||
<a href="https://github.com/netbox-community/netbox/graphs/contributors"><img src="https://img.shields.io/github/contributors/netbox-community/netbox?color=blue" alt="Contributors" /></a>
|
<a href="https://github.com/netbox-community/netbox/graphs/contributors"><img src="https://img.shields.io/github/contributors/netbox-community/netbox?color=blue" alt="Contributors" /></a>
|
||||||
<a href="https://github.com/netbox-community/netbox/stargazers"><img src="https://img.shields.io/github/stars/netbox-community/netbox?style=flat" alt="GitHub stars" /></a>
|
<a href="https://github.com/netbox-community/netbox/stargazers"><img src="https://img.shields.io/github/stars/netbox-community/netbox?style=flat" alt="GitHub stars" /></a>
|
||||||
<a href="https://explore.transifex.com/netbox-community/netbox/"><img src="https://img.shields.io/badge/languages-7-blue" alt="Languages supported" /></a>
|
<a href="https://explore.transifex.com/netbox-community/netbox/"><img src="https://img.shields.io/badge/languages-15-blue" alt="Languages supported" /></a>
|
||||||
<a href="https://github.com/netbox-community/netbox/actions/workflows/ci.yml"><img src="https://github.com/netbox-community/netbox/workflows/CI/badge.svg?branch=master" alt="CI status" /></a>
|
<a href="https://github.com/netbox-community/netbox/actions/workflows/ci.yml"><img src="https://github.com/netbox-community/netbox/workflows/CI/badge.svg?branch=master" alt="CI status" /></a>
|
||||||
<p></p>
|
<p>
|
||||||
|
<strong><a href="https://github.com/netbox-community/netbox/">NetBox Community</a></strong> |
|
||||||
|
<strong><a href="https://netboxlabs.com/netbox-cloud/">NetBox Cloud</a></strong> |
|
||||||
|
<strong><a href="https://netboxlabs.com/netbox-enterprise/">NetBox Enterprise</a></strong>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
NetBox exists to empower network engineers. Since its release in 2016, it has become the go-to solution for modeling and documenting network infrastructure for thousands of organizations worldwide. As a successor to legacy IPAM and DCIM applications, NetBox provides a cohesive, extensive, and accessible data model for all things networked. By providing a single robust user interface and programmable APIs for everything from cable maps to device configurations, NetBox serves as the central source of truth for the modern network.
|
NetBox exists to empower network engineers. Since its release in 2016, it has become the go-to solution for modeling and documenting network infrastructure for thousands of organizations worldwide. As a successor to legacy IPAM and DCIM applications, NetBox provides a cohesive, extensive, and accessible data model for all things networked. By providing a single robust user interface and programmable APIs for everything from cable maps to device configurations, NetBox serves as the central source of truth for the modern network.
|
||||||
@ -17,7 +21,6 @@ NetBox exists to empower network engineers. Since its release in 2016, it has be
|
|||||||
<a href="#why-netbox">Why NetBox?</a> |
|
<a href="#why-netbox">Why NetBox?</a> |
|
||||||
<a href="#getting-started">Getting Started</a> |
|
<a href="#getting-started">Getting Started</a> |
|
||||||
<a href="#get-involved">Get Involved</a> |
|
<a href="#get-involved">Get Involved</a> |
|
||||||
<a href="#project-stats">Project Stats</a> |
|
|
||||||
<a href="#screenshots">Screenshots</a>
|
<a href="#screenshots">Screenshots</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -82,11 +85,6 @@ NetBox automatically logs the creation, modification, and deletion of all manage
|
|||||||
* The [official documentation](https://docs.netbox.dev) offers a comprehensive introduction.
|
* The [official documentation](https://docs.netbox.dev) offers a comprehensive introduction.
|
||||||
* Check out [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions) for even more projects to get the most out of NetBox!
|
* Check out [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions) for even more projects to get the most out of NetBox!
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://netboxlabs.com/netbox-cloud/"><img src="docs/media/misc/netbox_cloud.png" alt="NetBox Cloud" /></a><br />
|
|
||||||
Looking for a managed solution? Check out <strong><a href="https://netboxlabs.com/netbox-cloud/">NetBox Cloud</a></strong> or <strong><a href="https://netboxlabs.com/netbox-enterprise/">NetBox Enterprise</a></strong>!
|
|
||||||
</p>
|
|
||||||
|
|
||||||
## Get Involved
|
## Get Involved
|
||||||
|
|
||||||
* Follow [@NetBoxOfficial](https://twitter.com/NetBoxOfficial) on Twitter!
|
* Follow [@NetBoxOfficial](https://twitter.com/NetBoxOfficial) on Twitter!
|
||||||
@ -95,16 +93,6 @@ NetBox automatically logs the creation, modification, and deletion of all manage
|
|||||||
* Contributions from the community are encouraged and appreciated! Check out our [contributing guide](CONTRIBUTING.md) to get started.
|
* Contributions from the community are encouraged and appreciated! Check out our [contributing guide](CONTRIBUTING.md) to get started.
|
||||||
* [Share your idea](https://plugin-ideas.netbox.dev/) for a new plugin, or [learn how to build one](https://github.com/netbox-community/netbox-plugin-tutorial) yourself!
|
* [Share your idea](https://plugin-ideas.netbox.dev/) for a new plugin, or [learn how to build one](https://github.com/netbox-community/netbox-plugin-tutorial) yourself!
|
||||||
|
|
||||||
## Project Stats
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://github.com/netbox-community/netbox/commits"><img src="https://images.repography.com/29023055/netbox-community/netbox/recent-activity/whQtEr_TGD9PhW1BPlhlEQ5jnrgQ0KJpm-LlGtpoGO0/3Kx_iWUSBRJ5-AI4QwJEJWrUDEz3KrX2lvh8aYE0WXY_timeline.svg" alt="Timeline graph"></a>
|
|
||||||
<a href="https://github.com/netbox-community/netbox/issues"><img src="https://images.repography.com/29023055/netbox-community/netbox/recent-activity/whQtEr_TGD9PhW1BPlhlEQ5jnrgQ0KJpm-LlGtpoGO0/3Kx_iWUSBRJ5-AI4QwJEJWrUDEz3KrX2lvh8aYE0WXY_issues.svg" alt="Issues graph"></a>
|
|
||||||
<a href="https://github.com/netbox-community/netbox/pulls"><img src="https://images.repography.com/29023055/netbox-community/netbox/recent-activity/whQtEr_TGD9PhW1BPlhlEQ5jnrgQ0KJpm-LlGtpoGO0/3Kx_iWUSBRJ5-AI4QwJEJWrUDEz3KrX2lvh8aYE0WXY_prs.svg" alt="Pull requests graph"></a>
|
|
||||||
<a href="https://github.com/netbox-community/netbox/graphs/contributors"><img src="https://images.repography.com/29023055/netbox-community/netbox/recent-activity/whQtEr_TGD9PhW1BPlhlEQ5jnrgQ0KJpm-LlGtpoGO0/3Kx_iWUSBRJ5-AI4QwJEJWrUDEz3KrX2lvh8aYE0WXY_users.svg" alt="Top contributors"></a>
|
|
||||||
<br />Stats via <a href="https://repography.com">Repography</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
@ -16,7 +16,7 @@ Administrators are encouraged to adhere to industry best practices concerning th
|
|||||||
|
|
||||||
## Reporting a Suspected Vulnerability
|
## Reporting a Suspected Vulnerability
|
||||||
|
|
||||||
If you believe you've uncovered a security vulnerability and wish to report it confidentially, you may do so via email. Please note that any reported vulnerabilities **MUST** meet all the following conditions:
|
If you believe you've uncovered a security vulnerability and wish to report it confidentially, you may do so by emailing `security@netboxlabs.com`. Please ensure that your report meets all the following conditions:
|
||||||
|
|
||||||
* Affects the most recent stable release of NetBox, or a current beta release
|
* Affects the most recent stable release of NetBox, or a current beta release
|
||||||
* Affects a NetBox instance installed and configured per the official documentation
|
* Affects a NetBox instance installed and configured per the official documentation
|
||||||
@ -24,7 +24,7 @@ If you believe you've uncovered a security vulnerability and wish to report it c
|
|||||||
|
|
||||||
Please note that we **DO NOT** accept reports generated by automated tooling which merely suggest that a file or file(s) _may_ be vulnerable under certain conditions, as these are most often innocuous.
|
Please note that we **DO NOT** accept reports generated by automated tooling which merely suggest that a file or file(s) _may_ be vulnerable under certain conditions, as these are most often innocuous.
|
||||||
|
|
||||||
If you believe that you've found a vulnerability which meets all of these conditions, please [submit a draft security advisory](https://github.com/netbox-community/netbox/security/advisories/new) on GitHub, or email a brief description of the suspected bug and instructions for reproduction to **security@netbox.dev**. For any security concerns regarding NetBox deployed via Docker, please see the [netbox-docker](https://github.com/netbox-community/netbox-docker) project.
|
For any security concerns regarding the community-maintained Docker image for NetBox, please see the [netbox-docker](https://github.com/netbox-community/netbox-docker) project.
|
||||||
|
|
||||||
### Bug Bounties
|
### Bug Bounties
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# The Python web framework on which NetBox is built
|
# The Python web framework on which NetBox is built
|
||||||
# https://docs.djangoproject.com/en/stable/releases/
|
# https://docs.djangoproject.com/en/stable/releases/
|
||||||
Django<5.1
|
Django<5.2
|
||||||
|
|
||||||
# Django middleware which permits cross-domain API requests
|
# Django middleware which permits cross-domain API requests
|
||||||
# https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst
|
# https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst
|
||||||
@ -8,6 +8,8 @@ django-cors-headers
|
|||||||
|
|
||||||
# Runtime UI tool for debugging Django
|
# Runtime UI tool for debugging Django
|
||||||
# https://github.com/jazzband/django-debug-toolbar/blob/main/docs/changes.rst
|
# https://github.com/jazzband/django-debug-toolbar/blob/main/docs/changes.rst
|
||||||
|
# Pinned for DNS looukp bug; see https://github.com/netbox-community/netbox/issues/16454
|
||||||
|
# and https://github.com/jazzband/django-debug-toolbar/issues/1927
|
||||||
django-debug-toolbar
|
django-debug-toolbar
|
||||||
|
|
||||||
# Library for writing reusable URL query filters
|
# Library for writing reusable URL query filters
|
||||||
@ -82,10 +84,6 @@ Jinja2
|
|||||||
# https://python-markdown.github.io/changelog/
|
# https://python-markdown.github.io/changelog/
|
||||||
Markdown
|
Markdown
|
||||||
|
|
||||||
# File inclusion plugin for Python-Markdown
|
|
||||||
# https://github.com/cmacmackin/markdown-include
|
|
||||||
markdown-include
|
|
||||||
|
|
||||||
# MkDocs Material theme (for documentation build)
|
# MkDocs Material theme (for documentation build)
|
||||||
# https://squidfunk.github.io/mkdocs-material/changelog/
|
# https://squidfunk.github.io/mkdocs-material/changelog/
|
||||||
mkdocs-material
|
mkdocs-material
|
||||||
@ -103,12 +101,12 @@ netaddr
|
|||||||
nh3
|
nh3
|
||||||
|
|
||||||
# Fork of PIL (Python Imaging Library) for image processing
|
# Fork of PIL (Python Imaging Library) for image processing
|
||||||
# https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst
|
# https://github.com/python-pillow/Pillow/releases
|
||||||
Pillow
|
Pillow
|
||||||
|
|
||||||
# PostgreSQL database adapter for Python
|
# PostgreSQL database adapter for Python
|
||||||
# https://github.com/psycopg/psycopg/blob/master/docs/news.rst
|
# https://github.com/psycopg/psycopg/blob/master/docs/news.rst
|
||||||
psycopg[binary,pool]
|
psycopg[c,pool]
|
||||||
|
|
||||||
# YAML rendering library
|
# YAML rendering library
|
||||||
# https://github.com/yaml/pyyaml/blob/master/CHANGES
|
# https://github.com/yaml/pyyaml/blob/master/CHANGES
|
||||||
@ -118,6 +116,10 @@ PyYAML
|
|||||||
# https://github.com/psf/requests/blob/main/HISTORY.md
|
# https://github.com/psf/requests/blob/main/HISTORY.md
|
||||||
requests
|
requests
|
||||||
|
|
||||||
|
# rq
|
||||||
|
# https://github.com/rq/rq/blob/master/CHANGES.md
|
||||||
|
rq
|
||||||
|
|
||||||
# Social authentication framework
|
# Social authentication framework
|
||||||
# https://github.com/python-social-auth/social-core/blob/master/CHANGELOG.md
|
# https://github.com/python-social-auth/social-core/blob/master/CHANGELOG.md
|
||||||
social-auth-core
|
social-auth-core
|
||||||
@ -131,7 +133,7 @@ social-auth-app-django
|
|||||||
strawberry-graphql
|
strawberry-graphql
|
||||||
|
|
||||||
# Strawberry GraphQL Django extension
|
# Strawberry GraphQL Django extension
|
||||||
# https://github.com/strawberry-graphql/strawberry-django/blob/main/CHANGELOG.md
|
# https://github.com/strawberry-graphql/strawberry-django/releases
|
||||||
strawberry-graphql-django
|
strawberry-graphql-django
|
||||||
|
|
||||||
# SVG image rendering (used for rack elevations)
|
# SVG image rendering (used for rack elevations)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
Alias /static /opt/netbox/netbox/static
|
Alias /static /opt/netbox/netbox/static
|
||||||
|
|
||||||
<Directory /opt/netbox/netbox/static>
|
<Directory /opt/netbox/netbox/static>
|
||||||
Options Indexes FollowSymLinks MultiViews
|
Options FollowSymLinks MultiViews
|
||||||
AllowOverride None
|
AllowOverride None
|
||||||
Require all granted
|
Require all granted
|
||||||
</Directory>
|
</Directory>
|
||||||
|
@ -12,6 +12,9 @@
|
|||||||
"left-to-right",
|
"left-to-right",
|
||||||
"right-to-left",
|
"right-to-left",
|
||||||
"side-to-rear",
|
"side-to-rear",
|
||||||
|
"rear-to-side",
|
||||||
|
"bottom-to-top",
|
||||||
|
"top-to-bottom",
|
||||||
"passive",
|
"passive",
|
||||||
"mixed"
|
"mixed"
|
||||||
]
|
]
|
||||||
@ -149,6 +152,7 @@
|
|||||||
"nema-l15-60p",
|
"nema-l15-60p",
|
||||||
"nema-l21-20p",
|
"nema-l21-20p",
|
||||||
"nema-l21-30p",
|
"nema-l21-30p",
|
||||||
|
"nema-l22-20p",
|
||||||
"nema-l22-30p",
|
"nema-l22-30p",
|
||||||
"cs6361c",
|
"cs6361c",
|
||||||
"cs6365c",
|
"cs6365c",
|
||||||
@ -179,6 +183,9 @@
|
|||||||
"usb-micro-ab",
|
"usb-micro-ab",
|
||||||
"usb-3-b",
|
"usb-3-b",
|
||||||
"usb-3-micro-b",
|
"usb-3-micro-b",
|
||||||
|
"molex-micro-fit-1x2",
|
||||||
|
"molex-micro-fit-2x2",
|
||||||
|
"molex-micro-fit-2x4",
|
||||||
"dc-terminal",
|
"dc-terminal",
|
||||||
"saf-d-grid",
|
"saf-d-grid",
|
||||||
"neutrik-powercon-20",
|
"neutrik-powercon-20",
|
||||||
@ -259,6 +266,7 @@
|
|||||||
"nema-l15-60r",
|
"nema-l15-60r",
|
||||||
"nema-l21-20r",
|
"nema-l21-20r",
|
||||||
"nema-l21-30r",
|
"nema-l21-30r",
|
||||||
|
"nema-l22-20r",
|
||||||
"nema-l22-30r",
|
"nema-l22-30r",
|
||||||
"CS6360C",
|
"CS6360C",
|
||||||
"CS6364C",
|
"CS6364C",
|
||||||
@ -281,7 +289,11 @@
|
|||||||
"usb-a",
|
"usb-a",
|
||||||
"usb-micro-b",
|
"usb-micro-b",
|
||||||
"usb-c",
|
"usb-c",
|
||||||
|
"molex-micro-fit-1x2",
|
||||||
|
"molex-micro-fit-2x2",
|
||||||
|
"molex-micro-fit-2x4",
|
||||||
"dc-terminal",
|
"dc-terminal",
|
||||||
|
"eaton-c39",
|
||||||
"hdot-cx",
|
"hdot-cx",
|
||||||
"saf-d-grid",
|
"saf-d-grid",
|
||||||
"neutrik-powercon-20a",
|
"neutrik-powercon-20a",
|
||||||
@ -317,10 +329,13 @@
|
|||||||
"100base-tx",
|
"100base-tx",
|
||||||
"100base-t1",
|
"100base-t1",
|
||||||
"1000base-t",
|
"1000base-t",
|
||||||
|
"1000base-lx",
|
||||||
|
"1000base-tx",
|
||||||
"2.5gbase-t",
|
"2.5gbase-t",
|
||||||
"5gbase-t",
|
"5gbase-t",
|
||||||
"10gbase-t",
|
"10gbase-t",
|
||||||
"10gbase-cx4",
|
"10gbase-cx4",
|
||||||
|
"100base-x-sfp",
|
||||||
"1000base-x-gbic",
|
"1000base-x-gbic",
|
||||||
"1000base-x-sfp",
|
"1000base-x-sfp",
|
||||||
"10gbase-x-sfpp",
|
"10gbase-x-sfpp",
|
||||||
@ -353,6 +368,8 @@
|
|||||||
"800gbase-x-qsfpdd",
|
"800gbase-x-qsfpdd",
|
||||||
"800gbase-x-osfp",
|
"800gbase-x-osfp",
|
||||||
"1000base-kx",
|
"1000base-kx",
|
||||||
|
"2.5gbase-kx",
|
||||||
|
"5gbase-kr",
|
||||||
"10gbase-kr",
|
"10gbase-kr",
|
||||||
"10gbase-kx4",
|
"10gbase-kx4",
|
||||||
"25gbase-kr",
|
"25gbase-kr",
|
||||||
@ -368,11 +385,15 @@
|
|||||||
"ieee802.11ad",
|
"ieee802.11ad",
|
||||||
"ieee802.11ax",
|
"ieee802.11ax",
|
||||||
"ieee802.11ay",
|
"ieee802.11ay",
|
||||||
|
"ieee802.11be",
|
||||||
"ieee802.15.1",
|
"ieee802.15.1",
|
||||||
|
"ieee802.15.4",
|
||||||
"other-wireless",
|
"other-wireless",
|
||||||
"gsm",
|
"gsm",
|
||||||
"cdma",
|
"cdma",
|
||||||
"lte",
|
"lte",
|
||||||
|
"4g",
|
||||||
|
"5g",
|
||||||
"sonet-oc3",
|
"sonet-oc3",
|
||||||
"sonet-oc12",
|
"sonet-oc12",
|
||||||
"sonet-oc48",
|
"sonet-oc48",
|
||||||
@ -406,12 +427,15 @@
|
|||||||
"e3",
|
"e3",
|
||||||
"xdsl",
|
"xdsl",
|
||||||
"docsis",
|
"docsis",
|
||||||
|
"bpon",
|
||||||
|
"epon",
|
||||||
|
"10g-epon",
|
||||||
"gpon",
|
"gpon",
|
||||||
"xg-pon",
|
"xg-pon",
|
||||||
"xgs-pon",
|
"xgs-pon",
|
||||||
"ng-pon2",
|
"ng-pon2",
|
||||||
"epon",
|
"25g-pon",
|
||||||
"10g-epon",
|
"50g-pon",
|
||||||
"cisco-stackwise",
|
"cisco-stackwise",
|
||||||
"cisco-stackwise-plus",
|
"cisco-stackwise-plus",
|
||||||
"cisco-flexstack",
|
"cisco-flexstack",
|
||||||
@ -503,6 +527,14 @@
|
|||||||
"urm-p4",
|
"urm-p4",
|
||||||
"urm-p8",
|
"urm-p8",
|
||||||
"splice",
|
"splice",
|
||||||
|
"usb-a",
|
||||||
|
"usb-b",
|
||||||
|
"usb-c",
|
||||||
|
"usb-mini-a",
|
||||||
|
"usb-mini-b",
|
||||||
|
"usb-micro-a",
|
||||||
|
"usb-micro-b",
|
||||||
|
"usb-micro-ab",
|
||||||
"other"
|
"other"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -560,6 +592,14 @@
|
|||||||
"urm-p4",
|
"urm-p4",
|
||||||
"urm-p8",
|
"urm-p8",
|
||||||
"splice",
|
"splice",
|
||||||
|
"usb-a",
|
||||||
|
"usb-b",
|
||||||
|
"usb-c",
|
||||||
|
"usb-mini-a",
|
||||||
|
"usb-mini-b",
|
||||||
|
"usb-micro-a",
|
||||||
|
"usb-micro-b",
|
||||||
|
"usb-micro-ab",
|
||||||
"other"
|
"other"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
95605
contrib/openapi2.json
69695
contrib/openapi2.yaml
@ -11,8 +11,24 @@ master = true
|
|||||||
; clear environment on exit
|
; clear environment on exit
|
||||||
vacuum = true
|
vacuum = true
|
||||||
|
|
||||||
|
; make SIGTERM stop the app (instead of reload)
|
||||||
|
die-on-term = true
|
||||||
|
|
||||||
; exit if no app can be loaded
|
; exit if no app can be loaded
|
||||||
need-app = true
|
need-app = true
|
||||||
|
|
||||||
; do not use multiple interpreters
|
; do not use multiple interpreters
|
||||||
single-interpreter = true
|
single-interpreter = true
|
||||||
|
|
||||||
|
; change to the project directory
|
||||||
|
chdir = netbox
|
||||||
|
|
||||||
|
; specify the WSGI module to load
|
||||||
|
module = netbox.wsgi
|
||||||
|
|
||||||
|
; workaround to make uWSGI reloads work with pyuwsgi (not to be used if using uwsgi package instead)
|
||||||
|
binary-path = venv/bin/python
|
||||||
|
|
||||||
|
; only log internal messages and errors (reverse proxy already logs the requests)
|
||||||
|
disable-logging = true
|
||||||
|
log-5xx = true
|
||||||
|
4
docs/_theme/main.html
vendored
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
{% block site_meta %}
|
{% block site_meta %}
|
||||||
{{ super() }}
|
{{ super() }}
|
||||||
{# Disable search indexing unless we're building for ReadTheDocs #}
|
{# Disable search indexing unless we're building for public consumption #}
|
||||||
{% if not config.extra.readthedocs %}
|
{% if not config.extra.build_public %}
|
||||||
<meta name="robots" content="noindex">
|
<meta name="robots" content="noindex">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
18
docs/_theme/partials/copyright.html
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<div class="md-copyright">
|
||||||
|
{% if config.copyright %}
|
||||||
|
<div class="md-copyright__highlight">
|
||||||
|
{{ config.copyright }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if not config.extra.generator == false %}
|
||||||
|
Made with
|
||||||
|
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||||||
|
Material for MkDocs
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% if not config.extra.build_public %}
|
||||||
|
<div class="md-copyright">
|
||||||
|
ℹ️ Documentation is being served locally
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
52
docs/administration/authentication/google.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# Google
|
||||||
|
|
||||||
|
This guide explains how to configure single sign-on (SSO) support for NetBox using [Google OAuth2](https://developers.google.com/identity/protocols/oauth2/web-server) as an authentication backend.
|
||||||
|
|
||||||
|
## Google OAuth2 Configuration
|
||||||
|
|
||||||
|
1. Log into [console.cloud.google.com](https://console.cloud.google.com/).
|
||||||
|
2. Create new project for NetBox.
|
||||||
|
3. Under "APIs and Services" click "OAuth consent screen" and enter the required information.
|
||||||
|
4. Under "Credentials," click "Create Credentials" and select "OAuth 2.0 Client ID." Select type "Web application."
|
||||||
|
- "Authorized JavaScript origins" should follow the format `http[s]://<netbox>[:<port>]`
|
||||||
|
- "Authorized redirect URIs" should follow the format `http[s]://<netbox>[:<port>]/oauth/complete/google-oauth2/`
|
||||||
|
5. Copy the "Client ID" and "Client Secret" values somewhere convenient.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
Google requires the NetBox hostname to use a public top-level-domain (e.g. `.com`, `.net`). The use of IP addresses is not permitted (except `127.0.0.1`).
|
||||||
|
|
||||||
|
For more information, consult [Google's documentation](https://developers.google.com/identity/protocols/oauth2/web-server#prerequisites).
|
||||||
|
|
||||||
|
## NetBox Configuration
|
||||||
|
|
||||||
|
### 1. Enter configuration parameters
|
||||||
|
|
||||||
|
Enter the following configuration parameters in `configuration.py`, substituting your own values:
|
||||||
|
|
||||||
|
```python
|
||||||
|
REMOTE_AUTH_BACKEND = 'social_core.backends.google.GoogleOAuth2'
|
||||||
|
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '{CLIENT_ID}'
|
||||||
|
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '{CLIENT_SECRET}'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Restart NetBox
|
||||||
|
|
||||||
|
Restart the NetBox services so that the new configuration takes effect. This is typically done with the command below:
|
||||||
|
|
||||||
|
```no-highlight
|
||||||
|
sudo systemctl restart netbox
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
Log out of NetBox if already authenticated, and click the "Log In" button at top right. You should see the normal login form as well as an option to authenticate using Google. Click that link.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
You should be redirected to Google's authentication portal. Enter the username/email and password of your test account to continue. You may also be prompted to grant this application access to your account.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
If successful, you will be redirected back to the NetBox UI, and will be logged in as the Google user. You can verify this by navigating to your profile (using the button at top right).
|
||||||
|
|
||||||
|
This user account has been replicated locally to NetBox, and can now be assigned groups and permissions.
|
@ -1,8 +1,8 @@
|
|||||||
# Microsoft Azure AD
|
# Microsoft Entra ID
|
||||||
|
|
||||||
This guide explains how to configure single sign-on (SSO) support for NetBox using [Microsoft Azure Active Directory (AD)](https://azure.microsoft.com/en-us/services/active-directory/) as an authentication backend.
|
This guide explains how to configure single sign-on (SSO) support for NetBox using [Microsoft Entra ID](https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id) as an authentication backend.
|
||||||
|
|
||||||
## Azure AD Configuration
|
## Entra ID Configuration
|
||||||
|
|
||||||
### 1. Create a test user (optional)
|
### 1. Create a test user (optional)
|
||||||
|
|
@ -40,3 +40,22 @@ REMOTE_AUTH_BACKEND = 'social_core.backends.google.GoogleOAuth2'
|
|||||||
NetBox supports single sign-on authentication via the [python-social-auth](https://github.com/python-social-auth) library. To enable SSO, specify the path to the desired authentication backend within the `social_core` Python package. Please see the complete list of [supported authentication backends](https://github.com/python-social-auth/social-core/tree/master/social_core/backends) for the available options.
|
NetBox supports single sign-on authentication via the [python-social-auth](https://github.com/python-social-auth) library. To enable SSO, specify the path to the desired authentication backend within the `social_core` Python package. Please see the complete list of [supported authentication backends](https://github.com/python-social-auth/social-core/tree/master/social_core/backends) for the available options.
|
||||||
|
|
||||||
Most remote authentication backends require some additional configuration through settings prefixed with `SOCIAL_AUTH_`. These will be automatically imported from NetBox's `configuration.py` file. Additionally, the [authentication pipeline](https://python-social-auth.readthedocs.io/en/latest/pipeline.html) can be customized via the `SOCIAL_AUTH_PIPELINE` parameter. (NetBox's default pipeline is defined in `netbox/settings.py` for your reference.)
|
Most remote authentication backends require some additional configuration through settings prefixed with `SOCIAL_AUTH_`. These will be automatically imported from NetBox's `configuration.py` file. Additionally, the [authentication pipeline](https://python-social-auth.readthedocs.io/en/latest/pipeline.html) can be customized via the `SOCIAL_AUTH_PIPELINE` parameter. (NetBox's default pipeline is defined in `netbox/settings.py` for your reference.)
|
||||||
|
|
||||||
|
#### Configuring the SSO module's appearance
|
||||||
|
|
||||||
|
The way a remote authentication backend is displayed to the user on the login
|
||||||
|
page may be adjusted via the `SOCIAL_AUTH_BACKEND_ATTRS` parameter, defaulting
|
||||||
|
to an empty dictionary. This dictionary maps a `social_core` module's name (ie.
|
||||||
|
`REMOTE_AUTH_BACKEND.name`) to a couple of parameters, `(display_name, icon)`.
|
||||||
|
|
||||||
|
The `display_name` is the name displayed to the user on the login page. The
|
||||||
|
icon may either be the URL of an icon; refer to a [Material Design
|
||||||
|
Icons](https://github.com/google/material-design-icons) icon's name; or be
|
||||||
|
`None` for no icon.
|
||||||
|
|
||||||
|
For instance, the OIDC backend may be customized with
|
||||||
|
```python
|
||||||
|
SOCIAL_AUTH_BACKEND_ATTRS = {
|
||||||
|
'oidc': ("My awesome SSO", "login"),
|
||||||
|
}
|
||||||
|
```
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
Default: False
|
Default: False
|
||||||
|
|
||||||
This setting enables debugging. Debugging should be enabled only during development or troubleshooting. Note that only
|
This setting enables debugging. Debugging should be enabled only during development or troubleshooting. Note that only
|
||||||
clients which access NetBox from a recognized [internal IP address](#internal_ips) will see debugging tools in the user
|
clients which access NetBox from a recognized [internal IP address](./system.md#internal_ips) will see debugging tools in the user
|
||||||
interface.
|
interface.
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
|
@ -31,6 +31,17 @@ The sampling rate for errors. Must be a value between 0 (disabled) and 1.0 (repo
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## SENTRY_SEND_DEFAULT_PII
|
||||||
|
|
||||||
|
Default: False
|
||||||
|
|
||||||
|
Maps to the Sentry SDK's [`send_default_pii`](https://docs.sentry.io/platforms/python/configuration/options/#send-default-pii) parameter. If enabled, certain personally identifiable information (PII) is added.
|
||||||
|
|
||||||
|
!!! warning "Sensitive data"
|
||||||
|
If you enable this option, be aware that sensitive data such as cookies and authentication tokens will be logged.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## SENTRY_TAGS
|
## SENTRY_TAGS
|
||||||
|
|
||||||
An optional dictionary of tag names and values to apply to Sentry error reports.For example:
|
An optional dictionary of tag names and values to apply to Sentry error reports.For example:
|
||||||
|
17
docs/configuration/graphql-api.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# GraphQL API Parameters
|
||||||
|
|
||||||
|
## GRAPHQL_ENABLED
|
||||||
|
|
||||||
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
|
||||||
|
Default: True
|
||||||
|
|
||||||
|
Setting this to False will disable the GraphQL API.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## GRAPHQL_MAX_ALIASES
|
||||||
|
|
||||||
|
Default: 10
|
||||||
|
|
||||||
|
The maximum number of queries that a GraphQL API request may contain.
|
@ -25,7 +25,7 @@ Some configuration parameters are primarily controlled via NetBox's admin interf
|
|||||||
* [`CUSTOM_VALIDATORS`](./data-validation.md#custom_validators)
|
* [`CUSTOM_VALIDATORS`](./data-validation.md#custom_validators)
|
||||||
* [`DEFAULT_USER_PREFERENCES`](./default-values.md#default_user_preferences)
|
* [`DEFAULT_USER_PREFERENCES`](./default-values.md#default_user_preferences)
|
||||||
* [`ENFORCE_GLOBAL_UNIQUE`](./miscellaneous.md#enforce_global_unique)
|
* [`ENFORCE_GLOBAL_UNIQUE`](./miscellaneous.md#enforce_global_unique)
|
||||||
* [`GRAPHQL_ENABLED`](./miscellaneous.md#graphql_enabled)
|
* [`GRAPHQL_ENABLED`](./graphql-api.md#graphql_enabled)
|
||||||
* [`JOB_RETENTION`](./miscellaneous.md#job_retention)
|
* [`JOB_RETENTION`](./miscellaneous.md#job_retention)
|
||||||
* [`MAINTENANCE_MODE`](./miscellaneous.md#maintenance_mode)
|
* [`MAINTENANCE_MODE`](./miscellaneous.md#maintenance_mode)
|
||||||
* [`MAPS_URL`](./miscellaneous.md#maps_url)
|
* [`MAPS_URL`](./miscellaneous.md#maps_url)
|
||||||
|
@ -96,14 +96,6 @@ The maximum size (in bytes) of an incoming HTTP request (i.e. `GET` or `POST` da
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## DJANGO_ADMIN_ENABLED
|
|
||||||
|
|
||||||
Default: False
|
|
||||||
|
|
||||||
Setting this to True installs the `django.contrib.admin` app and enables the [Django admin UI](https://docs.djangoproject.com/en/5.0/ref/contrib/admin/). This may be necessary to support older plugins which do not integrate with the native NetBox interface.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ENFORCE_GLOBAL_UNIQUE
|
## ENFORCE_GLOBAL_UNIQUE
|
||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
@ -114,6 +106,16 @@ By default, NetBox will prevent the creation of duplicate prefixes and IP addres
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## EVENTS_PIPELINE
|
||||||
|
|
||||||
|
!!! info "This parameter was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
Default: `['extras.events.process_event_queue',]`
|
||||||
|
|
||||||
|
NetBox will call dotted paths to the functions listed here for events (create, update, delete) on models as well as when custom EventRules are fired.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## FILE_UPLOAD_MAX_MEMORY_SIZE
|
## FILE_UPLOAD_MAX_MEMORY_SIZE
|
||||||
|
|
||||||
Default: `2621440` (2.5 MB)
|
Default: `2621440` (2.5 MB)
|
||||||
@ -122,16 +124,6 @@ The maximum amount (in bytes) of uploaded data that will be held in memory befor
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## GRAPHQL_ENABLED
|
|
||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
|
||||||
|
|
||||||
Default: True
|
|
||||||
|
|
||||||
Setting this to False will disable the GraphQL API.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## JOB_RETENTION
|
## JOB_RETENTION
|
||||||
|
|
||||||
!!! tip "Dynamic Configuration Parameter"
|
!!! tip "Dynamic Configuration Parameter"
|
||||||
|
@ -94,15 +94,25 @@ REDIS = {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! note
|
|
||||||
If you are upgrading from a NetBox release older than v2.7.0, please note that the Redis connection configuration
|
|
||||||
settings have changed. Manual modification to bring the `REDIS` section inline with the above specification is
|
|
||||||
necessary
|
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
It is highly recommended to keep the task and cache databases separate. Using the same database number on the
|
It is highly recommended to keep the task and cache databases separate. Using the same database number on the
|
||||||
same Redis instance for both may result in queued background tasks being lost during cache flushing events.
|
same Redis instance for both may result in queued background tasks being lost during cache flushing events.
|
||||||
|
|
||||||
|
### UNIX Socket Support
|
||||||
|
|
||||||
|
Redis may alternatively be configured by specifying a complete URL instead of individual components. This approach supports the use of a UNIX socket connection. For example:
|
||||||
|
|
||||||
|
```python
|
||||||
|
REDIS = {
|
||||||
|
'tasks': {
|
||||||
|
'URL': 'unix:///run/redis-netbox/redis.sock?db=0'
|
||||||
|
},
|
||||||
|
'caching': {
|
||||||
|
'URL': 'unix:///run/redis-netbox/redis.sock?db=1'
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### Using Redis Sentinel
|
### Using Redis Sentinel
|
||||||
|
|
||||||
If you are using [Redis Sentinel](https://redis.io/topics/sentinel) for high-availability purposes, there is minimal
|
If you are using [Redis Sentinel](https://redis.io/topics/sentinel) for high-availability purposes, there is minimal
|
||||||
|
@ -20,19 +20,29 @@ A list of permitted URL schemes referenced when rendering links within NetBox. N
|
|||||||
|
|
||||||
## AUTH_PASSWORD_VALIDATORS
|
## AUTH_PASSWORD_VALIDATORS
|
||||||
|
|
||||||
This parameter acts as a pass-through for configuring Django's built-in password validators for local user accounts. If configured, these will be applied whenever a user's password is updated to ensure that it meets minimum criteria such as length or complexity. An example is provided below. For more detail on the available options, please see [the Django documentation](https://docs.djangoproject.com/en/stable/topics/auth/passwords/#password-validation).
|
This parameter acts as a pass-through for configuring Django's built-in password validators for local user accounts. These rules are applied whenever a user's password is created or updated to ensure that it meets minimum criteria such as length or complexity. The default configuration is shown below.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
AUTH_PASSWORD_VALIDATORS = [
|
AUTH_PASSWORD_VALIDATORS = [
|
||||||
{
|
{
|
||||||
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
|
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
|
||||||
'OPTIONS': {
|
"OPTIONS": {
|
||||||
'min_length': 10,
|
"min_length": 12,
|
||||||
}
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "utilities.password_validation.AlphanumericPasswordValidator",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The default configuration enforces the follow criteria:
|
||||||
|
|
||||||
|
* A password must be at least 12 characters in length.
|
||||||
|
* A password must have at least one uppercase letter, one lowercase letter, and one numeric digit.
|
||||||
|
|
||||||
|
Although it is not recommended, the default validation rules can be disabled by setting `AUTH_PASSWORD_VALIDATORS = []` in the configuration file. For more detail on customizing password validation, please see [the Django documentation](https://docs.djangoproject.com/en/stable/topics/auth/passwords/#password-validation).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## CORS_ORIGIN_ALLOW_ALL
|
## CORS_ORIGIN_ALLOW_ALL
|
||||||
@ -159,9 +169,12 @@ Note that enabling this setting causes NetBox to update a user's session in the
|
|||||||
|
|
||||||
## LOGIN_REQUIRED
|
## LOGIN_REQUIRED
|
||||||
|
|
||||||
Default: False
|
Default: True
|
||||||
|
|
||||||
Setting this to True will permit only authenticated users to access any part of NetBox. By default, anonymous users are permitted to access most data in NetBox but not make any changes.
|
When enabled, only authenticated users are permitted to access any part of NetBox. Disabling this will allow unauthenticated users to access most areas of NetBox (but not make any changes).
|
||||||
|
|
||||||
|
!!! info "Changed in NetBox v4.0.2"
|
||||||
|
Prior to NetBox v4.0.2, this setting was disabled by default.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -83,7 +83,18 @@ Default: `('127.0.0.1', '::1')`
|
|||||||
|
|
||||||
A list of IP addresses recognized as internal to the system, used to control the display of debugging output. For
|
A list of IP addresses recognized as internal to the system, used to control the display of debugging output. For
|
||||||
example, the debugging toolbar will be viewable only when a client is accessing NetBox from one of the listed IP
|
example, the debugging toolbar will be viewable only when a client is accessing NetBox from one of the listed IP
|
||||||
addresses (and [`DEBUG`](#debug) is true).
|
addresses (and [`DEBUG`](./development.md#debug) is true).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ISOLATED_DEPLOYMENT
|
||||||
|
|
||||||
|
Default: False
|
||||||
|
|
||||||
|
Set this configuration parameter to True for NetBox deployments which do not have Internet access. This will disable miscellaneous functionality which depends on access to the Internet.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
If Internet access is available via a proxy, set [`HTTP_PROXIES`](#http_proxies) instead.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -106,7 +117,7 @@ JINJA2_FILTERS = {
|
|||||||
|
|
||||||
## LOGGING
|
## LOGGING
|
||||||
|
|
||||||
By default, all messages of INFO severity or higher will be logged to the console. Additionally, if [`DEBUG`](#debug) is False and email access has been configured, ERROR and CRITICAL messages will be emailed to the users defined in [`ADMINS`](#admins).
|
By default, all messages of INFO severity or higher will be logged to the console. Additionally, if [`DEBUG`](./development.md#debug) is False and email access has been configured, ERROR and CRITICAL messages will be emailed to the users defined in [`ADMINS`](./miscellaneous.md#admins).
|
||||||
|
|
||||||
The Django framework on which NetBox runs allows for the customization of logging format and destination. Please consult the [Django logging documentation](https://docs.djangoproject.com/en/stable/topics/logging/) for more information on configuring this setting. Below is an example which will write all INFO and higher messages to a local file:
|
The Django framework on which NetBox runs allows for the customization of logging format and destination. Please consult the [Django logging documentation](https://docs.djangoproject.com/en/stable/topics/logging/) for more information on configuring this setting. Below is an example which will write all INFO and higher messages to a local file:
|
||||||
|
|
||||||
@ -143,7 +154,7 @@ LOGGING = {
|
|||||||
|
|
||||||
## MEDIA_ROOT
|
## MEDIA_ROOT
|
||||||
|
|
||||||
Default: $INSTALL_ROOT/netbox/media/
|
Default: `$INSTALL_ROOT/netbox/media/`
|
||||||
|
|
||||||
The file path to the location where media files (such as image attachments) are stored. By default, this is the `netbox/media/` directory within the base NetBox installation path.
|
The file path to the location where media files (such as image attachments) are stored. By default, this is the `netbox/media/` directory within the base NetBox installation path.
|
||||||
|
|
||||||
@ -177,7 +188,7 @@ The dotted path to the desired search backend class. `CachedValueSearchBackend`
|
|||||||
|
|
||||||
Default: None (local storage)
|
Default: None (local storage)
|
||||||
|
|
||||||
The backend storage engine for handling uploaded files (e.g. image attachments). NetBox supports integration with the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) package, which provides backends for several popular file storage services. If not configured, local filesystem storage will be used.
|
The backend storage engine for handling uploaded files (e.g. image attachments). NetBox supports integration with the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) and [`django-storage-swift`](https://github.com/dennisv/django-storage-swift) packages, which provide backends for several popular file storage services. If not configured, local filesystem storage will be used.
|
||||||
|
|
||||||
The configuration parameters for the specified storage backend are defined under the `STORAGE_CONFIG` setting.
|
The configuration parameters for the specified storage backend are defined under the `STORAGE_CONFIG` setting.
|
||||||
|
|
||||||
@ -187,7 +198,7 @@ The configuration parameters for the specified storage backend are defined under
|
|||||||
|
|
||||||
Default: Empty
|
Default: Empty
|
||||||
|
|
||||||
A dictionary of configuration parameters for the storage backend configured as `STORAGE_BACKEND`. The specific parameters to be used here are specific to each backend; see the [`django-storages` documentation](https://django-storages.readthedocs.io/en/stable/) for more detail.
|
A dictionary of configuration parameters for the storage backend configured as `STORAGE_BACKEND`. The specific parameters to be used here are specific to each backend; see the documentation for your selected backend ([`django-storages`](https://django-storages.readthedocs.io/en/stable/) or [`django-storage-swift`](https://github.com/dennisv/django-storage-swift)) for more detail.
|
||||||
|
|
||||||
If `STORAGE_BACKEND` is not defined, this setting will be ignored.
|
If `STORAGE_BACKEND` is not defined, this setting will be ignored.
|
||||||
|
|
||||||
@ -198,3 +209,11 @@ If `STORAGE_BACKEND` is not defined, this setting will be ignored.
|
|||||||
Default: UTC
|
Default: UTC
|
||||||
|
|
||||||
The time zone NetBox will use when dealing with dates and times. It is recommended to use UTC time unless you have a specific need to use a local time zone. Please see the [list of available time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
|
The time zone NetBox will use when dealing with dates and times. It is recommended to use UTC time unless you have a specific need to use a local time zone. Please see the [list of available time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TRANSLATION_ENABLED
|
||||||
|
|
||||||
|
Default: True
|
||||||
|
|
||||||
|
Enables language translation for the user interface. (This parameter maps to Django's [USE_I18N](https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-USE_I18N) setting.)
|
||||||
|
@ -74,6 +74,8 @@ If a default value is specified for a selection field, it must exactly match one
|
|||||||
|
|
||||||
An object or multi-object custom field can be used to refer to a particular NetBox object or objects as the "value" for a custom field. These custom fields must define an `object_type`, which determines the type of object to which custom field instances point.
|
An object or multi-object custom field can be used to refer to a particular NetBox object or objects as the "value" for a custom field. These custom fields must define an `object_type`, which determines the type of object to which custom field instances point.
|
||||||
|
|
||||||
|
By default, an object choice field will make all objects of that type available for selection in the drop-down. The list choices can be filtered to show only objects with certain values by providing a `query_params` dict in the Related Object Filter field, as a JSON value. More information about `query_params` can be found [here](./custom-scripts.md#objectvar).
|
||||||
|
|
||||||
## Custom Fields in Templates
|
## Custom Fields in Templates
|
||||||
|
|
||||||
Several features within NetBox, such as export templates and webhooks, utilize Jinja2 templating. For convenience, objects which support custom field assignment expose custom field data through the `cf` property. This is a bit cleaner than accessing custom field data through the actual field (`custom_field_data`).
|
Several features within NetBox, such as export templates and webhooks, utilize Jinja2 templating. For convenience, objects which support custom field assignment expose custom field data through the `cf` property. This is a bit cleaner than accessing custom field data through the actual field (`custom_field_data`).
|
||||||
|
@ -17,6 +17,9 @@ They can also be used as a mechanism for validating the integrity of data within
|
|||||||
|
|
||||||
Custom scripts are Python code which exists outside the NetBox code base, so they can be updated and changed without interfering with the core NetBox installation. And because they're completely custom, there is no inherent limitation on what a script can accomplish.
|
Custom scripts are Python code which exists outside the NetBox code base, so they can be updated and changed without interfering with the core NetBox installation. And because they're completely custom, there is no inherent limitation on what a script can accomplish.
|
||||||
|
|
||||||
|
!!! danger "Only install trusted scripts"
|
||||||
|
Custom scripts have unrestricted access to change anything in the databse and are inherently unsafe and should only be installed and run from trusted sources. You should also review and set permissions for who can run scripts if the script can modify any data.
|
||||||
|
|
||||||
## Writing Custom Scripts
|
## Writing Custom Scripts
|
||||||
|
|
||||||
All custom scripts must inherit from the `extras.scripts.Script` base class. This class provides the functionality necessary to generate forms and log activity.
|
All custom scripts must inherit from the `extras.scripts.Script` base class. This class provides the functionality necessary to generate forms and log activity.
|
||||||
@ -65,16 +68,13 @@ class AnotherCustomScript(Script):
|
|||||||
script_order = (MyCustomScript, AnotherCustomScript)
|
script_order = (MyCustomScript, AnotherCustomScript)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Module Attributes
|
|
||||||
|
|
||||||
### `name`
|
|
||||||
|
|
||||||
You can define `name` within a script module (the Python file which contains one or more scripts) to set the module name. If `name` is not defined, the module's file name will be used.
|
|
||||||
|
|
||||||
## Script Attributes
|
## Script Attributes
|
||||||
|
|
||||||
Script attributes are defined under a class named `Meta` within the script. These are optional, but encouraged.
|
Script attributes are defined under a class named `Meta` within the script. These are optional, but encouraged.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
These are also defined and used as properties on the base custom script class, so don't use the same names as variables or override them in your custom script.
|
||||||
|
|
||||||
### `name`
|
### `name`
|
||||||
|
|
||||||
This is the human-friendly names of your script. If omitted, the class name will be used.
|
This is the human-friendly names of your script. If omitted, the class name will be used.
|
||||||
@ -144,11 +144,11 @@ These two methods will load data in YAML or JSON format, respectively, from file
|
|||||||
|
|
||||||
The Script object provides a set of convenient functions for recording messages at different severity levels:
|
The Script object provides a set of convenient functions for recording messages at different severity levels:
|
||||||
|
|
||||||
* `log_debug(message, object=None)`
|
* `log_debug(message=None, obj=None)`
|
||||||
* `log_success(message, object=None)`
|
* `log_success(message=None, obj=None)`
|
||||||
* `log_info(message, object=None)`
|
* `log_info(message=None, obj=None)`
|
||||||
* `log_warning(message, object=None)`
|
* `log_warning(message=None, obj=None)`
|
||||||
* `log_failure(message, object=None)`
|
* `log_failure(message=None, obj=None)`
|
||||||
|
|
||||||
Log messages are returned to the user upon execution of the script. Markdown rendering is supported for log messages. A message may optionally be associated with a particular object by passing it as the second argument to the logging method.
|
Log messages are returned to the user upon execution of the script. Markdown rendering is supported for log messages. A message may optionally be associated with a particular object by passing it as the second argument to the logging method.
|
||||||
|
|
||||||
@ -158,6 +158,8 @@ A script can define one or more test methods to report on certain conditions. Al
|
|||||||
|
|
||||||
These methods are detected and run automatically when the script is executed, unless its `run()` method has been overridden. (When overriding `run()`, `run_tests()` can be called to run all test methods present in the script.)
|
These methods are detected and run automatically when the script is executed, unless its `run()` method has been overridden. (When overriding `run()`, `run_tests()` can be called to run all test methods present in the script.)
|
||||||
|
|
||||||
|
Calling any of these logging methods without a message will increment the relevant counter, but will not generate an output line in the script's log.
|
||||||
|
|
||||||
!!! info
|
!!! info
|
||||||
This functionality was ported from [legacy reports](./reports.md) in NetBox v4.0.
|
This functionality was ported from [legacy reports](./reports.md) in NetBox v4.0.
|
||||||
|
|
||||||
|
@ -86,8 +86,6 @@ CUSTOM_VALIDATORS = {
|
|||||||
|
|
||||||
#### Referencing Related Object Attributes
|
#### Referencing Related Object Attributes
|
||||||
|
|
||||||
!!! info "This feature was introduced in NetBox v4.0."
|
|
||||||
|
|
||||||
The attributes of a related object can be referenced by specifying a dotted path. For example, to reference the name of a region to which a site is assigned, use `region.name`:
|
The attributes of a related object can be referenced by specifying a dotted path. For example, to reference the name of a region to which a site is assigned, use `region.name`:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
@ -104,8 +102,6 @@ CUSTOM_VALIDATORS = {
|
|||||||
|
|
||||||
#### Validating Request Parameters
|
#### Validating Request Parameters
|
||||||
|
|
||||||
!!! info "This feature was introduced in NetBox v4.0."
|
|
||||||
|
|
||||||
In addition to validating object attributes, custom validators can also match against parameters of the current request (where available). For example, the following rule will permit only the user named "admin" to modify an object:
|
In addition to validating object attributes, custom validators can also match against parameters of the current request (where available). For example, the following rule will permit only the user named "admin" to modify an object:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
|
@ -8,7 +8,7 @@ Each model should define, at a minimum:
|
|||||||
|
|
||||||
* A `Meta` class specifying a deterministic ordering (if ordered by fields other than the primary ID)
|
* A `Meta` class specifying a deterministic ordering (if ordered by fields other than the primary ID)
|
||||||
* A `__str__()` method returning a user-friendly string representation of the instance
|
* A `__str__()` method returning a user-friendly string representation of the instance
|
||||||
* A `get_absolute_url()` method returning an instance's direct URL (using `reverse()`)
|
* A `get_absolute_url()` method if necessary; a standard version of the method is defined in the `NetBoxFeatureSet` base class, but you will need to provide your own (returning an instance's direct URL using `reverse()`) if not subclassing that base class
|
||||||
|
|
||||||
## 2. Define field choices
|
## 2. Define field choices
|
||||||
|
|
||||||
@ -71,13 +71,14 @@ Add the relevant navigation menu items in `netbox/netbox/navigation/menu.py`.
|
|||||||
Create the following for each model:
|
Create the following for each model:
|
||||||
|
|
||||||
* Detailed (full) model serializer in `api/serializers.py`
|
* Detailed (full) model serializer in `api/serializers.py`
|
||||||
* Nested serializer in `api/nested_serializers.py`
|
|
||||||
* API view in `api/views.py`
|
* API view in `api/views.py`
|
||||||
* Endpoint route in `api/urls.py`
|
* Endpoint route in `api/urls.py`
|
||||||
|
|
||||||
## 13. GraphQL API components
|
## 13. GraphQL API components
|
||||||
|
|
||||||
Create a Graphene object type for the model in `graphql/types.py` by subclassing the appropriate class from `netbox.graphql.types`.
|
Create a GraphQL object type for the model in `graphql/types.py` by subclassing the appropriate class from `netbox.graphql.types`.
|
||||||
|
|
||||||
|
**Note:** GraphQL unit tests may fail citing null values on a non-nullable field if related objects are prefetched. You may need to fix this by setting the type annotation to be `= strawberry_django.field(select_related=["policy"])` or similar.
|
||||||
|
|
||||||
Also extend the schema class defined in `graphql/schema.py` with the individual object and object list fields per the established convention.
|
Also extend the schema class defined in `graphql/schema.py` with the individual object and object list fields per the established convention.
|
||||||
|
|
||||||
|
@ -49,6 +49,10 @@ This key lists all models which have been registered in NetBox which are not des
|
|||||||
|
|
||||||
This store maintains all registered items for plugins, such as navigation menus, template extensions, etc.
|
This store maintains all registered items for plugins, such as navigation menus, template extensions, etc.
|
||||||
|
|
||||||
|
### `request_processors`
|
||||||
|
|
||||||
|
A list of context managers to invoke when processing a request e.g. in middleware or when executing a background job. Request processors can be registered with the `@register_request_processor` decorator.
|
||||||
|
|
||||||
### `search`
|
### `search`
|
||||||
|
|
||||||
A dictionary mapping each model (identified by its app and label) to its search index class, if one has been registered for it.
|
A dictionary mapping each model (identified by its app and label) to its search index class, if one has been registered for it.
|
||||||
|
@ -50,7 +50,7 @@ If you're adding a relational field (e.g. `ForeignKey`) and intend to include th
|
|||||||
|
|
||||||
## 5. Update API serializer
|
## 5. Update API serializer
|
||||||
|
|
||||||
Extend the model's API serializer in `<app>.api.serializers` to include the new field. In most cases, it will not be necessary to also extend the nested serializer, which produces a minimal representation of the model.
|
Extend the model's API serializer in `<app>.api.serializers` to include the new field.
|
||||||
|
|
||||||
## 6. Add fields to forms
|
## 6. Add fields to forms
|
||||||
|
|
||||||
|
@ -62,22 +62,7 @@ $issue-$description
|
|||||||
|
|
||||||
The description should be just two or three words to imply the focus of the work being performed. For example, bug #1234 to fix a TypeError exception when creating a device might be named `1234-device-typerror`. This ensures that branches are always follow some logical ordering (e.g. when running `git branch -a`) and helps other developers quickly identify the purpose of each.
|
The description should be just two or three words to imply the focus of the work being performed. For example, bug #1234 to fix a TypeError exception when creating a device might be named `1234-device-typerror`. This ensures that branches are always follow some logical ordering (e.g. when running `git branch -a`) and helps other developers quickly identify the purpose of each.
|
||||||
|
|
||||||
### 3. Enable Pre-Commit Hooks
|
### 3. Create a Python Virtual Environment
|
||||||
|
|
||||||
NetBox ships with a [git pre-commit hook](https://githooks.com/) 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. You are encouraged to enable it by creating a link to `scripts/git-hooks/pre-commit`:
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
cd .git/hooks/
|
|
||||||
ln -s ../../scripts/git-hooks/pre-commit
|
|
||||||
```
|
|
||||||
For the pre-commit hooks to work, you will also need to install the pycodestyle package:
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
python -m pip install pycodestyle
|
|
||||||
```
|
|
||||||
...and set up the yarn packages as shown in the [Web UI Development Guide](web-ui.md)
|
|
||||||
|
|
||||||
### 4. Create a Python Virtual Environment
|
|
||||||
|
|
||||||
A [virtual environment](https://docs.python.org/3/tutorial/venv.html) (or "venv" for short) is like a container for a set of Python packages. These allow you to build environments suited to specific projects without interfering with system packages or other projects. When installed per the documentation, NetBox uses a virtual environment in production.
|
A [virtual environment](https://docs.python.org/3/tutorial/venv.html) (or "venv" for short) is like a container for a set of Python packages. These allow you to build environments suited to specific projects without interfering with system packages or other projects. When installed per the documentation, NetBox uses a virtual environment in production.
|
||||||
|
|
||||||
@ -101,7 +86,7 @@ source ~/.venv/netbox/bin/activate
|
|||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
### 5. Install Required Packages
|
### 4. Install Required Packages
|
||||||
|
|
||||||
With the virtual environment activated, install the project's required Python packages using the `pip` module. Required packages are defined in `requirements.txt`. Each line in this file specifies the name and specific version of a required package.
|
With the virtual environment activated, install the project's required Python packages using the `pip` module. Required packages are defined in `requirements.txt`. Each line in this file specifies the name and specific version of a required package.
|
||||||
|
|
||||||
@ -109,6 +94,26 @@ With the virtual environment activated, install the project's required Python pa
|
|||||||
python -m pip install -r requirements.txt
|
python -m pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 5. Install Pre-Commit
|
||||||
|
|
||||||
|
NetBox uses [`pre-commit`](https://pre-commit.com/) to automatically validate code when commiting new changes. This includes the following operations:
|
||||||
|
|
||||||
|
* Run the `ruff` Python linter
|
||||||
|
* Run Django's internal system check
|
||||||
|
* Check for missing database migrations
|
||||||
|
* Validate any changes to the documentation with `mkdocs`
|
||||||
|
* Validate Typescript & Sass styling with `yarn`
|
||||||
|
* Ensure that any modified static front end assets have been recompiled
|
||||||
|
|
||||||
|
Enable `pre-commit` with the following commands _prior_ to commiting any changes:
|
||||||
|
|
||||||
|
```no-highlight
|
||||||
|
python -m pip install ruff pre-commit
|
||||||
|
pre-commit install
|
||||||
|
```
|
||||||
|
|
||||||
|
You may also need to set up the yarn packages as shown in the [Web UI Development Guide](web-ui.md).
|
||||||
|
|
||||||
### 6. Configure NetBox
|
### 6. Configure NetBox
|
||||||
|
|
||||||
Within the `netbox/netbox/` directory, copy `configuration_example.py` to `configuration.py` and update the following parameters:
|
Within the `netbox/netbox/` directory, copy `configuration_example.py` to `configuration.py` and update the following parameters:
|
||||||
|
@ -18,7 +18,7 @@ Depending on its classification, each NetBox model may support various features
|
|||||||
| [Custom links](../customization/custom-links.md) | `CustomLinksMixin` | `custom_links` | These models support the assignment of custom links |
|
| [Custom links](../customization/custom-links.md) | `CustomLinksMixin` | `custom_links` | These models support the assignment of custom links |
|
||||||
| [Custom validation](../customization/custom-validation.md) | `CustomValidationMixin` | - | Supports the enforcement of custom validation rules |
|
| [Custom validation](../customization/custom-validation.md) | `CustomValidationMixin` | - | Supports the enforcement of custom validation rules |
|
||||||
| [Export templates](../customization/export-templates.md) | `ExportTemplatesMixin` | `export_templates` | Users can create custom export templates for these models |
|
| [Export templates](../customization/export-templates.md) | `ExportTemplatesMixin` | `export_templates` | Users can create custom export templates for these models |
|
||||||
| [Job results](../features/background-jobs.md) | `JobsMixin` | `jobs` | Users can create custom export templates for these models |
|
| [Job results](../features/background-jobs.md) | `JobsMixin` | `jobs` | Background jobs can be scheduled for these models |
|
||||||
| [Journaling](../features/journaling.md) | `JournalingMixin` | `journaling` | These models support persistent historical commentary |
|
| [Journaling](../features/journaling.md) | `JournalingMixin` | `journaling` | These models support persistent historical commentary |
|
||||||
| [Synchronized data](../integrations/synchronized-data.md) | `SyncedDataMixin` | `synced_data` | Certain model data can be automatically synchronized from a remote data source |
|
| [Synchronized data](../integrations/synchronized-data.md) | `SyncedDataMixin` | `synced_data` | Certain model data can be automatically synchronized from a remote data source |
|
||||||
| [Tagging](../models/extras/tag.md) | `TagsMixin` | `tags` | The models can be tagged with user-defined tags |
|
| [Tagging](../models/extras/tag.md) | `TagsMixin` | `tags` | The models can be tagged with user-defined tags |
|
||||||
@ -34,7 +34,9 @@ These are considered the "core" application models which are used to model netwo
|
|||||||
* [circuits.Provider](../models/circuits/provider.md)
|
* [circuits.Provider](../models/circuits/provider.md)
|
||||||
* [circuits.ProviderAccount](../models/circuits/provideraccount.md)
|
* [circuits.ProviderAccount](../models/circuits/provideraccount.md)
|
||||||
* [circuits.ProviderNetwork](../models/circuits/providernetwork.md)
|
* [circuits.ProviderNetwork](../models/circuits/providernetwork.md)
|
||||||
|
* [core.DataFile](../models/core/datafile.md)
|
||||||
* [core.DataSource](../models/core/datasource.md)
|
* [core.DataSource](../models/core/datasource.md)
|
||||||
|
* [core.Job](../models/core/job.md)
|
||||||
* [dcim.Cable](../models/dcim/cable.md)
|
* [dcim.Cable](../models/dcim/cable.md)
|
||||||
* [dcim.Device](../models/dcim/device.md)
|
* [dcim.Device](../models/dcim/device.md)
|
||||||
* [dcim.DeviceType](../models/dcim/devicetype.md)
|
* [dcim.DeviceType](../models/dcim/devicetype.md)
|
||||||
@ -44,12 +46,14 @@ These are considered the "core" application models which are used to model netwo
|
|||||||
* [dcim.PowerPanel](../models/dcim/powerpanel.md)
|
* [dcim.PowerPanel](../models/dcim/powerpanel.md)
|
||||||
* [dcim.Rack](../models/dcim/rack.md)
|
* [dcim.Rack](../models/dcim/rack.md)
|
||||||
* [dcim.RackReservation](../models/dcim/rackreservation.md)
|
* [dcim.RackReservation](../models/dcim/rackreservation.md)
|
||||||
|
* [dcim.RackType](../models/dcim/racktype.md)
|
||||||
* [dcim.Site](../models/dcim/site.md)
|
* [dcim.Site](../models/dcim/site.md)
|
||||||
* [dcim.VirtualChassis](../models/dcim/virtualchassis.md)
|
* [dcim.VirtualChassis](../models/dcim/virtualchassis.md)
|
||||||
* [dcim.VirtualDeviceContext](../models/dcim/virtualdevicecontext.md)
|
* [dcim.VirtualDeviceContext](../models/dcim/virtualdevicecontext.md)
|
||||||
* [ipam.Aggregate](../models/ipam/aggregate.md)
|
* [ipam.Aggregate](../models/ipam/aggregate.md)
|
||||||
* [ipam.ASN](../models/ipam/asn.md)
|
* [ipam.ASN](../models/ipam/asn.md)
|
||||||
* [ipam.FHRPGroup](../models/ipam/fhrpgroup.md)
|
* [ipam.FHRPGroup](../models/ipam/fhrpgroup.md)
|
||||||
|
* [ipam.FHRPGroupAssignment](../models/ipam/fhrpgroupassignment.md)
|
||||||
* [ipam.IPAddress](../models/ipam/ipaddress.md)
|
* [ipam.IPAddress](../models/ipam/ipaddress.md)
|
||||||
* [ipam.IPRange](../models/ipam/iprange.md)
|
* [ipam.IPRange](../models/ipam/iprange.md)
|
||||||
* [ipam.Prefix](../models/ipam/prefix.md)
|
* [ipam.Prefix](../models/ipam/prefix.md)
|
||||||
@ -76,6 +80,7 @@ These are considered the "core" application models which are used to model netwo
|
|||||||
|
|
||||||
Organization models are used to organize and classify primary models.
|
Organization models are used to organize and classify primary models.
|
||||||
|
|
||||||
|
* [circuits.CircuitGroup](../models/circuits/circuitgroup.md)
|
||||||
* [circuits.CircuitType](../models/circuits/circuittype.md)
|
* [circuits.CircuitType](../models/circuits/circuittype.md)
|
||||||
* [dcim.DeviceRole](../models/dcim/devicerole.md)
|
* [dcim.DeviceRole](../models/dcim/devicerole.md)
|
||||||
* [dcim.Manufacturer](../models/dcim/manufacturer.md)
|
* [dcim.Manufacturer](../models/dcim/manufacturer.md)
|
||||||
@ -88,6 +93,7 @@ Organization models are used to organize and classify primary models.
|
|||||||
* [tenancy.ContactRole](../models/tenancy/contactrole.md)
|
* [tenancy.ContactRole](../models/tenancy/contactrole.md)
|
||||||
* [virtualization.ClusterGroup](../models/virtualization/clustergroup.md)
|
* [virtualization.ClusterGroup](../models/virtualization/clustergroup.md)
|
||||||
* [virtualization.ClusterType](../models/virtualization/clustertype.md)
|
* [virtualization.ClusterType](../models/virtualization/clustertype.md)
|
||||||
|
* [vpn.TunnelGroup](../models/vpn/tunnelgroup.md)
|
||||||
|
|
||||||
### Nested Group Models
|
### Nested Group Models
|
||||||
|
|
||||||
@ -131,3 +137,10 @@ These function as templates to effect the replication of device and virtual mach
|
|||||||
* [dcim.PowerOutletTemplate](../models/dcim/poweroutlettemplate.md)
|
* [dcim.PowerOutletTemplate](../models/dcim/poweroutlettemplate.md)
|
||||||
* [dcim.PowerPortTemplate](../models/dcim/powerporttemplate.md)
|
* [dcim.PowerPortTemplate](../models/dcim/powerporttemplate.md)
|
||||||
* [dcim.RearPortTemplate](../models/dcim/rearporttemplate.md)
|
* [dcim.RearPortTemplate](../models/dcim/rearporttemplate.md)
|
||||||
|
|
||||||
|
### Connection Models
|
||||||
|
|
||||||
|
Connection models are used to model the connections, or connection endpoints between models.
|
||||||
|
|
||||||
|
* [circuits.CircuitTermination](../models/circuits/circuittermination.md)
|
||||||
|
* [vpn.TunnelTermination](../models/vpn/tunneltermination.md)
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
This documentation describes the process of packaging and publishing a new NetBox release. There are three types of release:
|
This documentation describes the process of packaging and publishing a new NetBox release. There are three types of release:
|
||||||
|
|
||||||
* Major release (e.g. v2.11 to v3.0)
|
* Major release (e.g. v3.7.8 to v4.0.0)
|
||||||
* Minor release (e.g. v3.2 to v3.3)
|
* Minor release (e.g. v4.0.10 to v4.1.0)
|
||||||
* Patch release (e.g. v3.3.0 to v3.3.1)
|
* Patch release (e.g. v4.1.0 to v4.1.1)
|
||||||
|
|
||||||
While major releases generally introduce some very substantial change to the application, they are typically treated the same as minor version increments for the purpose of release packaging.
|
While major releases generally introduce some very substantial change to the application, they are typically treated the same as minor version increments for the purpose of release packaging.
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Sometimes it becomes necessary to constrain dependencies to a particular version
|
|||||||
djangorestframework==3.8.1
|
djangorestframework==3.8.1
|
||||||
```
|
```
|
||||||
|
|
||||||
These version constraints are added to `base_requirements.txt` to ensure that newer packages are not installed when updating the pinned dependencies in `requirements.txt` (see the [Update Requirements](#update-requirements) section below). Before each new minor version of NetBox is released, all such constraints on dependent packages should be addressed if feasible. This guards against the collection of stale constraints over time.
|
These version constraints are added to `base_requirements.txt` to ensure that newer packages are not installed when updating the pinned dependencies in `requirements.txt` (see the [Update Requirements](#update-python-dependencies) section below). Before each new minor version of NetBox is released, all such constraints on dependent packages should be addressed if feasible. This guards against the collection of stale constraints over time.
|
||||||
|
|
||||||
### Close the Release Milestone
|
### Close the Release Milestone
|
||||||
|
|
||||||
@ -39,6 +39,10 @@ mkdocs serve
|
|||||||
|
|
||||||
Follow these instructions to perform a new installation of NetBox in a temporary environment. This process must not be automated: The goal of this step is to catch any errors or omissions in the documentation, and ensure that it is kept up-to-date for each release. Make any necessary changes to the documentation before proceeding with the release.
|
Follow these instructions to perform a new installation of NetBox in a temporary environment. This process must not be automated: The goal of this step is to catch any errors or omissions in the documentation, and ensure that it is kept up-to-date for each release. Make any necessary changes to the documentation before proceeding with the release.
|
||||||
|
|
||||||
|
### Test Upgrade Paths
|
||||||
|
|
||||||
|
Upgrading from a previous version typically involves database migrations, which must work without errors. Supported upgrade paths include from one minor version to another within the same major version (i.e. 4.0 to 4.1), as well as from the latest patch version of the previous minor version (i.e. 3.7 to 4.0 or to 4.1). Prior to release, test all these supported paths by loading demo data from the source version and performing a `./manage.py migrate`.
|
||||||
|
|
||||||
### Merge the Release Branch
|
### Merge the Release Branch
|
||||||
|
|
||||||
Submit a pull request to merge the `feature` branch into the `develop` branch in preparation for its release. Once it has been merged, continue with the section for patch releases below.
|
Submit a pull request to merge the `feature` branch into the `develop` branch in preparation for its release. Once it has been merged, continue with the section for patch releases below.
|
||||||
@ -72,7 +76,7 @@ In cases where upgrading a dependency to its most recent release is breaking, it
|
|||||||
|
|
||||||
### Update UI Dependencies
|
### Update UI Dependencies
|
||||||
|
|
||||||
Check whether any UI dependencies (JavaScript packages, fonts, etc.) need to be updated by running `yarn outdated` from within the `project-static/` directory. [Upgrade these dependencies](http://0.0.0.0:9000/development/web-ui/#updating-dependencies) as necessary, then run `yarn bundle` to generate the necessary files for distribution.
|
Check whether any UI dependencies (JavaScript packages, fonts, etc.) need to be updated by running `yarn outdated` from within the `project-static/` directory. [Upgrade these dependencies](./web-ui.md#updating-dependencies) as necessary, then run `yarn bundle` to generate the necessary files for distribution.
|
||||||
|
|
||||||
### Rebuild the Device Type Definition Schema
|
### Rebuild the Device Type Definition Schema
|
||||||
|
|
||||||
@ -86,19 +90,24 @@ This will automatically update the schema file at `contrib/generated_schema.json
|
|||||||
|
|
||||||
### Update & Compile Translations
|
### Update & Compile Translations
|
||||||
|
|
||||||
Log into [Transifex](https://app.transifex.com/netbox-community/netbox/dashboard/) to download the updated string maps. Download the resource (portable object, or `.po`) file for each language and save them to `netbox/translations/$lang/LC_MESSAGES/django.po`, overwriting the current files. (Be sure to click the **Download for use** link.)
|
Updated language translations should be pulled from [Transifex](https://app.transifex.com/netbox-community/netbox/dashboard/) and re-compiled for each new release. First, retrieve any updated translation files using the Transifex CLI client:
|
||||||
|
|
||||||

|
```no-highlight
|
||||||
|
tx pull
|
||||||
|
```
|
||||||
|
|
||||||
Once the resource files for all languages have been updated, compile the machine object (`.mo`) files using the `compilemessages` management command:
|
Then, compile these portable (`.po`) files for use in the application:
|
||||||
|
|
||||||
```nohighlight
|
```no-highlight
|
||||||
./manage.py compilemessages
|
./manage.py compilemessages
|
||||||
```
|
```
|
||||||
|
|
||||||
|
!!! tip
|
||||||
|
Consult the translation documentation for more detail on [updating translated strings](./translations.md#updating-translated-strings) if you've not set up the Transifex client already.
|
||||||
|
|
||||||
### Update Version and Changelog
|
### Update Version and Changelog
|
||||||
|
|
||||||
* Update the `VERSION` constant in `settings.py` to the new release version.
|
* Update the version and published date in `release.yaml` with the current version & date. Add a designation (e.g.g `beta1`) if applicable.
|
||||||
* Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`.
|
* Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`.
|
||||||
* Replace the "FUTURE" placeholder in the release notes with the current date.
|
* Replace the "FUTURE" placeholder in the release notes with the current date.
|
||||||
|
|
||||||
@ -121,16 +130,18 @@ Create a [new release](https://github.com/netbox-community/netbox/releases/new)
|
|||||||
* **Tag:** Current version (e.g. `v3.3.1`)
|
* **Tag:** Current version (e.g. `v3.3.1`)
|
||||||
* **Target:** `master`
|
* **Target:** `master`
|
||||||
* **Title:** Version and date (e.g. `v3.3.1 - 2022-08-25`)
|
* **Title:** Version and date (e.g. `v3.3.1 - 2022-08-25`)
|
||||||
* **Description:** Copy from the pull request body
|
* **Description:** Copy from the pull request body, then promote the `###` headers to `##` ones
|
||||||
|
|
||||||
Once created, the release will become available for users to install.
|
Once created, the release will become available for users to install.
|
||||||
|
|
||||||
### Update the Development Version
|
### Update the Public Documentation
|
||||||
|
|
||||||
On the `develop` branch, update `VERSION` in `settings.py` to point to the next release. For example, if you just released v3.3.1, set:
|
After a release has been published, the public NetBox documentation needs to be updated. This is accomplished by running two actions on the [netboxlabs-docs](https://github.com/netboxlabs/netboxlabs-docs) repository.
|
||||||
|
|
||||||
```
|
First, run the `build-site` action, by navigating to Actions > build-site > Run workflow. This process compiles the documentation along with an overlay for integration with the documentation portal at <https://netboxlabs.com/docs>. The job should take about two minutes.
|
||||||
VERSION = 'v3.3.2-dev'
|
|
||||||
```
|
|
||||||
|
|
||||||
Commit this change with the comment "PRVB" (for _post-release version bump_) and push the commit upstream.
|
Once the documentation files have been compiled, they must be published by running the `deploy-kinsta` action. Select the desired deployment environment (staging or production) and specify `latest` as the deploy tag.
|
||||||
|
|
||||||
|
Clear the CDN cache from the [Kinsta](https://my.kinsta.com/) portal. Navigate to _Sites_ / _NetBox Labs_ / _Live_, select _Cache_ in the left-nav, click the _Clear Cache_ button, and confirm the clear operation.
|
||||||
|
|
||||||
|
Finally, verify that the documentation at <https://netboxlabs.com/docs/netbox/en/stable/> has been updated.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Style Guide
|
# Style Guide
|
||||||
|
|
||||||
NetBox generally follows the [Django style guide](https://docs.djangoproject.com/en/stable/internals/contributing/writing-code/coding-style/), which is itself based on [PEP 8](https://www.python.org/dev/peps/pep-0008/). [Pycodestyle](https://github.com/pycqa/pycodestyle) is used to validate code formatting, ignoring certain violations.
|
NetBox generally follows the [Django style guide](https://docs.djangoproject.com/en/stable/internals/contributing/writing-code/coding-style/), which is itself based on [PEP 8](https://www.python.org/dev/peps/pep-0008/). [ruff](https://docs.astral.sh/ruff/) is used for linting (with certain [exceptions](#linter-exceptions)).
|
||||||
|
|
||||||
## Code
|
## Code
|
||||||
|
|
||||||
@ -20,32 +20,32 @@ NetBox generally follows the [Django style guide](https://docs.djangoproject.com
|
|||||||
|
|
||||||
* Nested API serializers generate minimal representations of an object. These are stored separately from the primary serializers to avoid circular dependencies. Always import nested serializers from other apps directly. For example, from within the DCIM app you would write `from ipam.api.nested_serializers import NestedIPAddressSerializer`.
|
* Nested API serializers generate minimal representations of an object. These are stored separately from the primary serializers to avoid circular dependencies. Always import nested serializers from other apps directly. For example, from within the DCIM app you would write `from ipam.api.nested_serializers import NestedIPAddressSerializer`.
|
||||||
|
|
||||||
### PEP 8 Exceptions
|
### Linting
|
||||||
|
|
||||||
NetBox ignores certain PEP8 assertions. These are listed below.
|
The [ruff](https://docs.astral.sh/ruff/) linter is used to enforce code style. A [pre-commit hook](./getting-started.md#3-enable-pre-commit-hooks) which runs this automatically is included with NetBox. To invoke `ruff` manually, run:
|
||||||
|
|
||||||
#### Wildcard Imports
|
```
|
||||||
|
ruff check netbox/
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Linter Exceptions
|
||||||
|
|
||||||
|
The following rules are ignored when linting.
|
||||||
|
|
||||||
|
##### [E501](https://docs.astral.sh/ruff/rules/line-too-long/): Line too long
|
||||||
|
|
||||||
|
NetBox does not enforce a hard restriction on line length, although a maximum length of 120 characters is strongly encouraged for Python code where possible. The maximum length does not apply to HTML templates or to automatically generated code (e.g. database migrations).
|
||||||
|
|
||||||
|
##### [F403](https://docs.astral.sh/ruff/rules/undefined-local-with-import-star/): Undefined local with import star
|
||||||
|
|
||||||
Wildcard imports (for example, `from .constants import *`) are acceptable under any of the following conditions:
|
Wildcard imports (for example, `from .constants import *`) are acceptable under any of the following conditions:
|
||||||
|
|
||||||
* The library being import contains only constant declarations (e.g. `constants.py`)
|
* The library being import contains only constant declarations (e.g. `constants.py`)
|
||||||
* The library being imported explicitly defines `__all__`
|
* The library being imported explicitly defines `__all__`
|
||||||
|
|
||||||
#### Maximum Line Length (E501)
|
##### [F405](https://docs.astral.sh/ruff/rules/undefined-local-with-import-star-usage/): Undefined local with import star usage
|
||||||
|
|
||||||
NetBox does not restrict lines to a maximum length of 79 characters. We use a maximum line length of 120 characters, however this is not enforced by CI. The maximum length does not apply to HTML templates or to automatically generated code (e.g. database migrations).
|
The justification for ignoring this rule is the same as F403 above.
|
||||||
|
|
||||||
#### Line Breaks Following Binary Operators (W504)
|
|
||||||
|
|
||||||
Line breaks are permitted following binary operators.
|
|
||||||
|
|
||||||
### Enforcing Code Style
|
|
||||||
|
|
||||||
The [`pycodestyle`](https://pypi.org/project/pycodestyle/) utility (formerly `pep8`) is used by the CI process to enforce code style. A [pre-commit hook](./getting-started.md#2-enable-pre-commit-hooks) which runs this automatically is included with NetBox. To invoke `pycodestyle` manually, run:
|
|
||||||
|
|
||||||
```
|
|
||||||
pycodestyle --ignore=W504,E501 netbox/
|
|
||||||
```
|
|
||||||
|
|
||||||
### Introducing New Dependencies
|
### Introducing New Dependencies
|
||||||
|
|
||||||
@ -76,4 +76,4 @@ When adding a new dependency, a short description of the package and the URL of
|
|||||||
|
|
||||||
* When referring to NetBox in writing, use the proper form "NetBox," with the letters N and B capitalized. The lowercase form "netbox" should be used in code, filenames, etc. but never "Netbox" or any other deviation.
|
* When referring to NetBox in writing, use the proper form "NetBox," with the letters N and B capitalized. The lowercase form "netbox" should be used in code, filenames, etc. but never "Netbox" or any other deviation.
|
||||||
|
|
||||||
* There is an SVG form of the NetBox logo at [docs/netbox_logo.svg](../netbox_logo.svg). It is preferred to use this logo for all purposes as it scales to arbitrary sizes without loss of resolution. If a raster image is required, the SVG logo should be converted to a PNG image of the prescribed size.
|
* There are SVG forms of the NetBox logo for both [light mode](../netbox_logo_light.svg) and [dark mode](../netbox_logo_dark.svg) available. It is preferred to use the SVG logo for all purposes as it scales to arbitrary sizes without loss of resolution. If a raster image is required, the SVG logo should be converted to a PNG image of the desired size.
|
||||||
|
@ -6,17 +6,45 @@ All language translations in NetBox are generated from the source file found at
|
|||||||
|
|
||||||
Reviewers log into Transifex and navigate to their designated language(s) to translate strings. The initial translation for most strings will be machine-generated via the AWS Translate service. Human reviewers are responsible for reviewing these translations and making corrections where necessary.
|
Reviewers log into Transifex and navigate to their designated language(s) to translate strings. The initial translation for most strings will be machine-generated via the AWS Translate service. Human reviewers are responsible for reviewing these translations and making corrections where necessary.
|
||||||
|
|
||||||
Immediately prior to each NetBox release, the translation maps for all completed languages will be downloaded from Transifex, compiled, and checked into the NetBox code base by a maintainer.
|
|
||||||
|
|
||||||
## Updating Translation Sources
|
## Updating Translation Sources
|
||||||
|
|
||||||
To update the English `.po` file from which all translations are derived, use the `makemessages` management command:
|
To update the English `.po` file from which all translations are derived, use the `makemessages` management command (ignoring the `project-static/` directory):
|
||||||
|
|
||||||
```nohighlight
|
```nohighlight
|
||||||
./manage.py makemessages -l en
|
./manage.py makemessages -l en -i "project-static/*"
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, commit the change and push to the `develop` branch on GitHub. After some time, any new strings will appear for translation on Transifex automatically.
|
Then, commit the change and push to the `develop` branch on GitHub. Any new strings will appear for translation on Transifex automatically.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
It is typically not necessary to update source strings manually, as this is done nightly by a [GitHub action](https://github.com/netbox-community/netbox/blob/develop/.github/workflows/update-translation-strings.yml).
|
||||||
|
|
||||||
|
## Updating Translated Strings
|
||||||
|
|
||||||
|
Typically, translated strings need to be updated only as part of the NetBox [release process](./release-checklist.md).
|
||||||
|
|
||||||
|
Check the Transifex dashboard for languages that are not marked _ready for use_, being sure to click _Show all languages_ if it appears at the bottom of the list. Use machine translation to round out any not-ready languages. It's not necessary to review the machine translation immediately as the translation teams will handle that aspect; the goal at this stage is to get translations included in the Transifex pull request.
|
||||||
|
|
||||||
|
To download translated strings automatically, you'll need to:
|
||||||
|
|
||||||
|
1. Install the [Transifex CLI client](https://github.com/transifex/cli)
|
||||||
|
2. Generate a [Transifex API token](https://app.transifex.com/user/settings/api/)
|
||||||
|
|
||||||
|
Once you have the client set up, run the following command:
|
||||||
|
|
||||||
|
```no-highlight
|
||||||
|
TX_TOKEN=$TOKEN tx pull
|
||||||
|
```
|
||||||
|
|
||||||
|
This will download all portable (`.po`) translation files from Transifex, updating them locally as needed.
|
||||||
|
|
||||||
|
Once retrieved, the updated strings need to be compiled into new `.mo` files so they can be used by the application. Run Django's [`compilemessages`](https://docs.djangoproject.com/en/stable/ref/django-admin/#django-admin-compilemessages) management command to compile them:
|
||||||
|
|
||||||
|
```no-highlight
|
||||||
|
./manage.py compilemessages
|
||||||
|
```
|
||||||
|
|
||||||
|
Once any new `.mo` files have been generated, they need to be committed and pushed back up to GitHub. (Again, this is typically done as part of publishing a new NetBox release.)
|
||||||
|
|
||||||
## Proposing New Languages
|
## Proposing New Languages
|
||||||
|
|
||||||
|
@ -5,6 +5,10 @@ img {
|
|||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.md-content img {
|
||||||
|
background-color: rgba(255, 255, 255, 0.64);
|
||||||
|
}
|
||||||
|
|
||||||
/* Tables */
|
/* Tables */
|
||||||
table {
|
table {
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
|
@ -41,7 +41,7 @@ NetBox integrates with the open source [python-social-auth](https://github.com/p
|
|||||||
* Google
|
* Google
|
||||||
* Hashicorp Vault
|
* Hashicorp Vault
|
||||||
* Keycloak
|
* Keycloak
|
||||||
* Microsoft Azure AD
|
* Microsoft Entra ID
|
||||||
* Microsoft Graph
|
* Microsoft Graph
|
||||||
* Okta
|
* Okta
|
||||||
* OIDC
|
* OIDC
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
# Event Rules
|
# Event Rules
|
||||||
|
|
||||||
NetBox includes the ability to execute certain functions in response to internal object changes. These include:
|
NetBox includes the ability to automatically perform certain functions in response to internal events. These include:
|
||||||
|
|
||||||
* [Scripts](../customization/custom-scripts.md) execution
|
* Executing a [custom script](../customization/custom-scripts.md)
|
||||||
* [Webhooks](../integrations/webhooks.md) execution
|
* Sending a [webhook](../integrations/webhooks.md)
|
||||||
|
* Generating [user notifications](../features/notifications.md)
|
||||||
|
|
||||||
For example, suppose you want to automatically configure a monitoring system to start monitoring a device when its operational status is changed to active, and remove it from monitoring for any other status. You can create a webhook in NetBox for the device model and craft its content and destination URL to effect the desired change on the receiving system. You can then associate an event rule with this webhook and the webhook will be sent automatically by NetBox whenever the configured constraints are met.
|
For example, suppose you want to automatically configure a monitoring system to start monitoring a device when its operational status is changed to active, and remove it from monitoring for any other status. You can create a webhook in NetBox for the device model and craft its content and destination URL to effect the desired change on the receiving system. You can then associate an event rule with this webhook and the webhook will be sent automatically by NetBox whenever the configured constraints are met.
|
||||||
|
|
||||||
|
@ -56,6 +56,10 @@ A site typically represents a building within a region and/or site group. Each s
|
|||||||
|
|
||||||
A location can be any logical subdivision within a building, such as a floor or room. Like regions and site groups, locations can be nested into a self-recursive hierarchy for maximum flexibility. And like sites, each location has an operational status assigned to it.
|
A location can be any logical subdivision within a building, such as a floor or room. Like regions and site groups, locations can be nested into a self-recursive hierarchy for maximum flexibility. And like sites, each location has an operational status assigned to it.
|
||||||
|
|
||||||
|
## Rack Types
|
||||||
|
|
||||||
|
A rack type represents a unique specification of a rack which exists in the real world. Each rack type can be setup with weight, height, and unit ordering. New racks of this type can then be created in NetBox, and any associated specifications will be automatically replicated from the device type.
|
||||||
|
|
||||||
## Racks
|
## Racks
|
||||||
|
|
||||||
Finally, NetBox models each equipment rack as a discrete object within a site and location. These are physical objects into which devices are installed. Each rack can be assigned an operational status, type, facility ID, and other attributes related to inventory tracking. Each rack also must define a height (in rack units) and width, and may optionally specify its physical dimensions.
|
Finally, NetBox models each equipment rack as a discrete object within a site and location. These are physical objects into which devices are installed. Each rack can be assigned an operational status, type, facility ID, and other attributes related to inventory tracking. Each rack also must define a height (in rack units) and width, and may optionally specify its physical dimensions.
|
||||||
|
8
docs/features/notifications.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Notifications
|
||||||
|
|
||||||
|
NetBox includes a system for generating user notifications, which can be marked as read or deleted by individual users. There are two built-in mechanisms for generating a notification:
|
||||||
|
|
||||||
|
* A user can subscribe to an object. When that object is modified, a notification is created to inform the user of the change.
|
||||||
|
* An [event rule](./event-rules.md) can be defined to automatically generate a notification for one or more users in response to specific system events.
|
||||||
|
|
||||||
|
Additionally, NetBox plugins can generate notifications for their own purposes.
|
@ -13,6 +13,9 @@ To enable remote data synchronization, the NetBox administrator first designates
|
|||||||
!!! info
|
!!! info
|
||||||
Data backends which connect to external sources typically require the installation of one or more supporting Python libraries. The Git backend requires the [`dulwich`](https://www.dulwich.io/) package, and the S3 backend requires the [`boto3`](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) package. These must be installed within NetBox's environment to enable these backends.
|
Data backends which connect to external sources typically require the installation of one or more supporting Python libraries. The Git backend requires the [`dulwich`](https://www.dulwich.io/) package, and the S3 backend requires the [`boto3`](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) package. These must be installed within NetBox's environment to enable these backends.
|
||||||
|
|
||||||
|
!!! info
|
||||||
|
If you are configuring Git and have `HTTP_PROXIES` configured to use the SOCKS protocol, you will also need to install the [`python_socks`](https://pypi.org/project/python-socks/) Python library.
|
||||||
|
|
||||||
Each type of remote source has its own configuration parameters. For instance, a git source will ask the user to specify a branch and authentication credentials. Once the source has been created, a synchronization job is run to automatically replicate remote files in the local database.
|
Each type of remote source has its own configuration parameters. For instance, a git source will ask the user to specify a branch and authentication credentials. Once the source has been created, a synchronization job is run to automatically replicate remote files in the local database.
|
||||||
|
|
||||||
The following NetBox models can be associated with replicated data files:
|
The following NetBox models can be associated with replicated data files:
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
{style="height: 100px; margin-bottom: 3em"}
|
{style="height: 100px; margin-bottom: 3em; background: none;"}
|
||||||
|
{style="height: 100px; margin-bottom: 3em; background: none;"}
|
||||||
|
|
||||||
# The Premier Network Source of Truth
|
# The Premier Network Source of Truth
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ pip3 install pyuwsgi
|
|||||||
Once installed, add the package to `local_requirements.txt` to ensure it is re-installed during future rebuilds of the virtual environment:
|
Once installed, add the package to `local_requirements.txt` to ensure it is re-installed during future rebuilds of the virtual environment:
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
sudo sh -c "echo 'pyuwgsi' >> /opt/netbox/local_requirements.txt"
|
sudo sh -c "echo 'pyuwsgi' >> /opt/netbox/local_requirements.txt"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# GraphQL API Overview
|
# GraphQL API Overview
|
||||||
|
|
||||||
NetBox provides a read-only [GraphQL](https://graphql.org/) API to complement its REST API. This API is powered by the [Graphene](https://graphene-python.org/) library and [Graphene-Django](https://docs.graphene-python.org/projects/django/en/latest/).
|
NetBox provides a read-only [GraphQL](https://graphql.org/) API to complement its REST API. This API is powered by [Strawberry Django](https://strawberry-graphql.github.io/strawberry-django/).
|
||||||
|
|
||||||
## Queries
|
## Queries
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ NetBox provides both a singular and plural query field for each object type:
|
|||||||
|
|
||||||
For example, query `device(id:123)` to fetch a specific device (identified by its unique ID), and query `device_list` (with an optional set of filters) to fetch all devices.
|
For example, query `device(id:123)` to fetch a specific device (identified by its unique ID), and query `device_list` (with an optional set of filters) to fetch all devices.
|
||||||
|
|
||||||
For more detail on constructing GraphQL queries, see the [Graphene documentation](https://docs.graphene-python.org/en/latest/) as well as the [GraphQL queries documentation](https://graphql.org/learn/queries/).
|
For more detail on constructing GraphQL queries, see the [GraphQL queries documentation](https://graphql.org/learn/queries/). For filtering and lookup syntax, please refer to the [Strawberry Django documentation](https://strawberry-graphql.github.io/strawberry-django/guide/filters/).
|
||||||
|
|
||||||
## Filtering
|
## Filtering
|
||||||
|
|
||||||
@ -112,4 +112,4 @@ Authorization: Token $TOKEN
|
|||||||
|
|
||||||
## Disabling the GraphQL API
|
## Disabling the GraphQL API
|
||||||
|
|
||||||
If not needed, the GraphQL API can be disabled by setting the [`GRAPHQL_ENABLED`](../configuration/miscellaneous.md#graphql_enabled) configuration parameter to False and restarting NetBox.
|
If not needed, the GraphQL API can be disabled by setting the [`GRAPHQL_ENABLED`](../configuration/graphql-api.md#graphql_enabled) configuration parameter to False and restarting NetBox.
|
||||||
|
@ -101,7 +101,7 @@ See the [filtering documentation](../reference/filtering.md) for more details on
|
|||||||
|
|
||||||
## Serialization
|
## Serialization
|
||||||
|
|
||||||
The REST API employs two types of serializers to represent model data: base serializers and nested serializers. The base serializer is used to present the complete view of a model. This includes all database table fields which comprise the model, and may include additional metadata. A base serializer includes relationships to parent objects, but **does not** include child objects. For example, the `VLANSerializer` includes a nested representation its parent VLANGroup (if any), but does not include any assigned Prefixes.
|
The REST API generally represents objects in one of two ways: complete or brief. The base serializer is used to present the complete view of an object. This includes all database table fields which comprise the model, and may include additional metadata. A base serializer includes relationships to parent objects, but **does not** include child objects. For example, the `VLANSerializer` includes a nested representation its parent VLANGroup (if any), but does not include any assigned Prefixes. Serializers employ a minimal "brief" representation of related objects, which includes only the attributes prudent for identifying the object.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@ -139,7 +139,7 @@ The REST API employs two types of serializers to represent model data: base seri
|
|||||||
|
|
||||||
### Related Objects
|
### Related Objects
|
||||||
|
|
||||||
Related objects (e.g. `ForeignKey` fields) are represented using nested serializers. A nested serializer provides a minimal representation of an object, including only its direct URL and enough information to display the object to a user. When performing write API actions (`POST`, `PUT`, and `PATCH`), related objects may be specified by either numeric ID (primary key), or by a set of attributes sufficiently unique to return the desired object.
|
Related objects (e.g. `ForeignKey` fields) are included using nested brief representations. This is a minimal representation of an object, including only its direct URL and enough information to display the object to a user. When performing write API actions (`POST`, `PUT`, and `PATCH`), related objects may be specified by either numeric ID (primary key), or by a set of attributes sufficiently unique to return the desired object.
|
||||||
|
|
||||||
For example, when creating a new device, its rack can be specified by NetBox ID (PK):
|
For example, when creating a new device, its rack can be specified by NetBox ID (PK):
|
||||||
|
|
||||||
@ -151,7 +151,7 @@ For example, when creating a new device, its rack can be specified by NetBox ID
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Or by a set of nested attributes which uniquely identify the rack:
|
Or by a set of attributes which uniquely identify the rack:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
BIN
docs/media/authentication/google_login_portal.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
docs/media/authentication/netbox_google_login.png
Normal file
After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 403 KiB |
Before Width: | Height: | Size: 422 KiB After Width: | Height: | Size: 548 KiB |
Before Width: | Height: | Size: 433 KiB After Width: | Height: | Size: 481 KiB |
Before Width: | Height: | Size: 510 KiB After Width: | Height: | Size: 562 KiB |
Before Width: | Height: | Size: 341 KiB After Width: | Height: | Size: 372 KiB |
@ -36,6 +36,12 @@ The operational status of the circuit. By default, the following statuses are av
|
|||||||
!!! tip "Custom circuit statuses"
|
!!! tip "Custom circuit statuses"
|
||||||
Additional circuit statuses may be defined by setting `Circuit.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
Additional circuit statuses may be defined by setting `Circuit.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
||||||
|
|
||||||
|
### Distance
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The distance between the circuit's two endpoints, including a unit designation (e.g. 100 meters or 25 feet).
|
||||||
|
|
||||||
### Description
|
### Description
|
||||||
|
|
||||||
A brief description of the circuit.
|
A brief description of the circuit.
|
||||||
|
13
docs/models/circuits/circuitgroup.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Circuit Groups
|
||||||
|
|
||||||
|
[Circuits](./circuit.md) can be arranged into administrative groups for organization. The assignment of a circuit to a group is optional.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Name
|
||||||
|
|
||||||
|
A unique human-friendly name.
|
||||||
|
|
||||||
|
### Slug
|
||||||
|
|
||||||
|
A unique URL-friendly identifier. (This value can be used for filtering.)
|
25
docs/models/circuits/circuitgroupassignment.md
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# Circuit Group Assignments
|
||||||
|
|
||||||
|
Circuits can be assigned to [circuit groups](./circuitgroup.md) for correlation purposes. For instance, three circuits, each belonging to a different provider, may each be assigned to the same circuit group. Each assignment may optionally include a priority designation.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Group
|
||||||
|
|
||||||
|
The [circuit group](./circuitgroup.md) being assigned.
|
||||||
|
|
||||||
|
### Member
|
||||||
|
|
||||||
|
The [circuit](./circuit.md) or [virtual circuit](./virtualcircuit.md) assigned to the group.
|
||||||
|
|
||||||
|
### Priority
|
||||||
|
|
||||||
|
The circuit's operation priority relative to its peers within the group. The assignment of a priority is optional. Choices include:
|
||||||
|
|
||||||
|
* Primary
|
||||||
|
* Secondary
|
||||||
|
* Tertiary
|
||||||
|
* Inactive
|
||||||
|
|
||||||
|
!!! tip
|
||||||
|
Additional priority choices may be defined by setting `CircuitGroupAssignment.priority` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
@ -21,13 +21,11 @@ Designates the termination as forming either the A or Z end of the circuit.
|
|||||||
|
|
||||||
If selected, the circuit termination will be considered "connected" even if no cable has been connected to it in NetBox.
|
If selected, the circuit termination will be considered "connected" even if no cable has been connected to it in NetBox.
|
||||||
|
|
||||||
### Site
|
### Termination
|
||||||
|
|
||||||
The [site](../dcim/site.md) with which this circuit termination is associated. Once created, a cable can be connected between the circuit termination and a device interface (or similar component).
|
!!! info "This field replaced the `site` and `provider_network` fields in NetBox v4.2."
|
||||||
|
|
||||||
### Provider Network
|
The [region](../dcim/region.md), [site group](../dcim/sitegroup.md), [site](../dcim/site.md), [location](../dcim/location.md) or [provider network](./providernetwork.md) with which this circuit termination is associated. Once created, a cable can be connected between the circuit termination and a device interface (or similar component).
|
||||||
|
|
||||||
Circuits which do not connect to a site modeled by NetBox can instead be terminated to a [provider network](./providernetwork.md) representing an unknown network operated by a [provider](./provider.md).
|
|
||||||
|
|
||||||
### Port Speed
|
### Port Speed
|
||||||
|
|
||||||
|
39
docs/models/circuits/virtualcircuit.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Virtual Circuits
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
A virtual circuit can connect two or more interfaces atop a set of decoupled physical connections. For example, it's very common to form a virtual connection between two virtual interfaces, each of which is bound to a physical interface on its respective device and physically connected to a [provider network](./providernetwork.md) via an independent [physical circuit](./circuit.md).
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Provider Network
|
||||||
|
|
||||||
|
The [provider network](./providernetwork.md) across which the virtual circuit is formed.
|
||||||
|
|
||||||
|
### Provider Account
|
||||||
|
|
||||||
|
The [provider account](./provideraccount.md) with which the virtual circuit is associated (if any).
|
||||||
|
|
||||||
|
### Circuit ID
|
||||||
|
|
||||||
|
The unique identifier assigned to the virtual circuit by its [provider](./provider.md).
|
||||||
|
|
||||||
|
### Type
|
||||||
|
|
||||||
|
The assigned [virtual circuit type](./virtualcircuittype.md).
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
The operational status of the virtual circuit. By default, the following statuses are available:
|
||||||
|
|
||||||
|
| Name |
|
||||||
|
|----------------|
|
||||||
|
| Planned |
|
||||||
|
| Provisioning |
|
||||||
|
| Active |
|
||||||
|
| Offline |
|
||||||
|
| Deprovisioning |
|
||||||
|
| Decommissioned |
|
||||||
|
|
||||||
|
!!! tip "Custom circuit statuses"
|
||||||
|
Additional circuit statuses may be defined by setting `Circuit.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
23
docs/models/circuits/virtualcircuittermination.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Virtual Circuit Terminations
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
This model represents the connection of a virtual [interface](../dcim/interface.md) to a [virtual circuit](./virtualcircuit.md).
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Virtual Circuit
|
||||||
|
|
||||||
|
The [virtual circuit](./virtualcircuit.md) to which the interface is connected.
|
||||||
|
|
||||||
|
### Interface
|
||||||
|
|
||||||
|
The [interface](../dcim/interface.md) connected to the virtual circuit.
|
||||||
|
|
||||||
|
### Role
|
||||||
|
|
||||||
|
The functional role of the termination. This depends on the virtual circuit's topology, which is typically either peer-to-peer or hub-and-spoke (multipoint). Valid choices include:
|
||||||
|
|
||||||
|
* Peer
|
||||||
|
* Hub
|
||||||
|
* Spoke
|
13
docs/models/circuits/virtualcircuittype.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Virtual Circuit Types
|
||||||
|
|
||||||
|
Like physical [circuits](./circuit.md), [virtual circuits](./virtualcircuit.md) are classified by functional type. These types are completely customizable, and can help categorize circuits by function or technology.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Name
|
||||||
|
|
||||||
|
A unique human-friendly name.
|
||||||
|
|
||||||
|
### Slug
|
||||||
|
|
||||||
|
A unique URL-friendly identifier. (This value can be used for filtering.)
|
@ -45,9 +45,12 @@ The operation duplex (full, half, or auto).
|
|||||||
|
|
||||||
The [virtual routing and forwarding](../ipam/vrf.md) instance to which this interface is assigned.
|
The [virtual routing and forwarding](../ipam/vrf.md) instance to which this interface is assigned.
|
||||||
|
|
||||||
### MAC Address
|
### Primary MAC Address
|
||||||
|
|
||||||
The 48-bit MAC address (for Ethernet interfaces).
|
The [MAC address](./macaddress.md) assigned to this interface which is designated as its primary.
|
||||||
|
|
||||||
|
!!! note "Changed in NetBox v4.2"
|
||||||
|
The MAC address of an interface (formerly a concrete database field) is available as a property, `mac_address`, which reflects the value of the primary linked [MAC address](./macaddress.md) object.
|
||||||
|
|
||||||
### WWN
|
### WWN
|
||||||
|
|
||||||
@ -109,6 +112,7 @@ For switched Ethernet interfaces, this identifies the 802.1Q encapsulation strat
|
|||||||
* **Access:** All traffic is assigned to a single VLAN, with no tagging.
|
* **Access:** All traffic is assigned to a single VLAN, with no tagging.
|
||||||
* **Tagged:** One untagged "native" VLAN is allowed, as well as any number of tagged VLANs.
|
* **Tagged:** One untagged "native" VLAN is allowed, as well as any number of tagged VLANs.
|
||||||
* **Tagged (all):** Implies that all VLANs are carried by the interface. One untagged VLAN may be designated.
|
* **Tagged (all):** Implies that all VLANs are carried by the interface. One untagged VLAN may be designated.
|
||||||
|
* **Q-in-Q:** Q-in-Q (IEEE 802.1ad) encapsulation is performed using the assigned SVLAN.
|
||||||
|
|
||||||
This field must be left blank for routed interfaces which do employ 802.1Q encapsulation.
|
This field must be left blank for routed interfaces which do employ 802.1Q encapsulation.
|
||||||
|
|
||||||
@ -120,6 +124,12 @@ The "native" (untagged) VLAN for the interface. Valid only when one of the above
|
|||||||
|
|
||||||
The tagged VLANs which are configured to be carried by this interface. Valid only for the "tagged" 802.1Q mode above.
|
The tagged VLANs which are configured to be carried by this interface. Valid only for the "tagged" 802.1Q mode above.
|
||||||
|
|
||||||
|
### Q-in-Q SVLAN
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The assigned service VLAN (for Q-in-Q/802.1ad interfaces).
|
||||||
|
|
||||||
### Wireless Role
|
### Wireless Role
|
||||||
|
|
||||||
Indicates the configured role for wireless interfaces (access point or station).
|
Indicates the configured role for wireless interfaces (access point or station).
|
||||||
@ -142,3 +152,9 @@ The configured channel width of a wireless interface, in MHz. This is typically
|
|||||||
### Wireless LANs
|
### Wireless LANs
|
||||||
|
|
||||||
The [wireless LANs](../wireless/wirelesslan.md) for which this interface carries traffic. (Valid for wireless interfaces only.)
|
The [wireless LANs](../wireless/wirelesslan.md) for which this interface carries traffic. (Valid for wireless interfaces only.)
|
||||||
|
|
||||||
|
### VLAN Translation Policy
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The [VLAN translation policy](../ipam/vlantranslationpolicy.md) that applies to this interface (optional).
|
||||||
|
@ -25,6 +25,12 @@ The inventory item's name. If the inventory item is assigned to a parent item, i
|
|||||||
|
|
||||||
An alternative physical label identifying the inventory item.
|
An alternative physical label identifying the inventory item.
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The inventory item's operational status.
|
||||||
|
|
||||||
### Role
|
### Role
|
||||||
|
|
||||||
The functional [role](./inventoryitemrole.md) assigned to this inventory item.
|
The functional [role](./inventoryitemrole.md) assigned to this inventory item.
|
||||||
|
13
docs/models/dcim/macaddress.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# MAC Addresses
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
A MAC address object in NetBox comprises a single Ethernet link layer address, and represents a MAC address as reported by or assigned to a network interface. MAC addresses can be assigned to [device](../dcim/device.md) and [virtual machine](../virtualization/virtualmachine.md) interfaces. A MAC address can be specified as the primary MAC address for a given device or VM interface.
|
||||||
|
|
||||||
|
Most interfaces have only a single MAC address, hard-coded at the factory. However, on some devices (particularly virtual interfaces) it is possible to assign additional MAC addresses or change existing ones. For this reason NetBox allows multiple MACAddress objects to be assigned to a single interface.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### MAC Address
|
||||||
|
|
||||||
|
The 48-bit MAC address, in colon-hexadecimal notation (e.g. `aa:bb:cc:11:22:33`).
|
@ -14,6 +14,10 @@ Module bays represent a space or slot within a device in which a field-replaceab
|
|||||||
|
|
||||||
The device to which this module bay belongs.
|
The device to which this module bay belongs.
|
||||||
|
|
||||||
|
### Module
|
||||||
|
|
||||||
|
The module to which this bay belongs (optional).
|
||||||
|
|
||||||
### Name
|
### Name
|
||||||
|
|
||||||
The module bay's name. Must be unique to the parent device.
|
The module bay's name. Must be unique to the parent device.
|
||||||
|
@ -39,3 +39,7 @@ An alternative part number to uniquely identify the module type.
|
|||||||
### Weight
|
### Weight
|
||||||
|
|
||||||
The numeric weight of the module, including a unit designation (e.g. 3 kilograms or 1 pound).
|
The numeric weight of the module, including a unit designation (e.g. 3 kilograms or 1 pound).
|
||||||
|
|
||||||
|
### Airflow
|
||||||
|
|
||||||
|
The direction in which air circulates through the device chassis for cooling.
|
||||||
|
@ -29,6 +29,12 @@ An alternative physical label identifying the power outlet.
|
|||||||
|
|
||||||
The type of power outlet.
|
The type of power outlet.
|
||||||
|
|
||||||
|
### Color
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The power outlet's color (optional).
|
||||||
|
|
||||||
### Power Port
|
### Power Port
|
||||||
|
|
||||||
When modeling a device which redistributes power from an upstream supply, such as a power distribution unit (PDU), each power outlet should be mapped to the respective [power port](./powerport.md) on the device which supplies power. For example, a 24-outlet PDU may two power ports, each distributing power to 12 of its outlets.
|
When modeling a device which redistributes power from an upstream supply, such as a power distribution unit (PDU), each power outlet should be mapped to the respective [power port](./powerport.md) on the device which supplies power. For example, a 24-outlet PDU may two power ports, each distributing power to 12 of its outlets.
|
||||||
|
@ -20,6 +20,10 @@ The [location](./location.md) within a site where the rack has been installed (o
|
|||||||
|
|
||||||
The rack's name or identifier. Must be unique to the rack's location, if assigned.
|
The rack's name or identifier. Must be unique to the rack's location, if assigned.
|
||||||
|
|
||||||
|
### Rack Type
|
||||||
|
|
||||||
|
The [physical type](./racktype.md) of this rack. The rack type defines physical attributes such as height and weight.
|
||||||
|
|
||||||
### Status
|
### Status
|
||||||
|
|
||||||
Operational status.
|
Operational status.
|
||||||
@ -43,44 +47,5 @@ The unique physical serial number assigned to this rack.
|
|||||||
|
|
||||||
A unique, locally-administered label used to identify hardware resources.
|
A unique, locally-administered label used to identify hardware resources.
|
||||||
|
|
||||||
### Type
|
!!! note
|
||||||
|
Some additional fields pertaining to physical attributes such as height and weight can also be defined on each rack, but should generally be defined instead on the [rack type](./racktype.md).
|
||||||
A rack can be designated as one of the following types:
|
|
||||||
|
|
||||||
* 2-post frame
|
|
||||||
* 4-post frame
|
|
||||||
* 4-post cabinet
|
|
||||||
* Wall-mounted frame
|
|
||||||
* Wall-mounted cabinet
|
|
||||||
|
|
||||||
### Width
|
|
||||||
|
|
||||||
The canonical distance between the two vertical rails on a face. (This is typically 19 inches, however other standard widths exist.)
|
|
||||||
|
|
||||||
### Height
|
|
||||||
|
|
||||||
The height of the rack, measured in units.
|
|
||||||
|
|
||||||
### Starting Unit
|
|
||||||
|
|
||||||
The number of the numerically lowest unit in the rack. This value defaults to one, but may be higher in certain situations. For example, you may want to model only a select range of units within a shared physical rack (e.g. U13 through U24).
|
|
||||||
|
|
||||||
### Outer Dimensions
|
|
||||||
|
|
||||||
The external width and depth of the rack can be tracked to aid in floorplan calculations. These measurements must be designated in either millimeters or inches.
|
|
||||||
|
|
||||||
### Mounting Depth
|
|
||||||
|
|
||||||
The maximum depth of a mounted device that the rack can accommodate, in millimeters. For four-post frames or cabinets, this is the horizontal distance between the front and rear vertical rails. (Note that this measurement does _not_ include space between the rails and the cabinet doors.)
|
|
||||||
|
|
||||||
### Weight
|
|
||||||
|
|
||||||
The numeric weight of the rack, including a unit designation (e.g. 10 kilograms or 20 pounds).
|
|
||||||
|
|
||||||
### Maximum Weight
|
|
||||||
|
|
||||||
The maximum total weight capacity for all installed devices, inclusive of the rack itself.
|
|
||||||
|
|
||||||
### Descending Units
|
|
||||||
|
|
||||||
If selected, the rack's elevation will display unit 1 at the top of the rack. (Most racks use ascending numbering, with unit 1 assigned to the bottommost position.)
|
|
||||||
|
59
docs/models/dcim/racktype.md
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
# Rack Types
|
||||||
|
|
||||||
|
A rack type defines the physical characteristics of a particular model of [rack](./rack.md).
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Manufacturer
|
||||||
|
|
||||||
|
The [manufacturer](./manufacturer.md) which produces this type of rack.
|
||||||
|
|
||||||
|
### Model
|
||||||
|
|
||||||
|
The model number assigned to this rack type by its manufacturer. Must be unique to the manufacturer.
|
||||||
|
|
||||||
|
### Slug
|
||||||
|
|
||||||
|
A unique URL-friendly representation of the model identifier. (This value can be used for filtering.)
|
||||||
|
|
||||||
|
### Form Factor
|
||||||
|
|
||||||
|
A rack can be designated as one of the following form factors:
|
||||||
|
|
||||||
|
* 2-post frame
|
||||||
|
* 4-post frame
|
||||||
|
* 4-post cabinet
|
||||||
|
* Wall-mounted frame
|
||||||
|
* Wall-mounted cabinet
|
||||||
|
|
||||||
|
### Width
|
||||||
|
|
||||||
|
The canonical distance between the two vertical rails on a face. (This is typically 19 inches, however other standard widths exist.)
|
||||||
|
|
||||||
|
### Height
|
||||||
|
|
||||||
|
The height of the rack, measured in units.
|
||||||
|
|
||||||
|
### Starting Unit
|
||||||
|
|
||||||
|
The number of the numerically lowest unit in the rack. This value defaults to one, but may be higher in certain situations. For example, you may want to model only a select range of units within a shared physical rack (e.g. U13 through U24).
|
||||||
|
|
||||||
|
### Outer Dimensions
|
||||||
|
|
||||||
|
The external width and depth of the rack can be tracked to aid in floorplan calculations. These measurements must be designated in either millimeters or inches.
|
||||||
|
|
||||||
|
### Mounting Depth
|
||||||
|
|
||||||
|
The maximum depth of a mounted device that the rack can accommodate, in millimeters. For four-post frames or cabinets, this is the horizontal distance between the front and rear vertical rails. (Note that this measurement does _not_ include space between the rails and the cabinet doors.)
|
||||||
|
|
||||||
|
### Weight
|
||||||
|
|
||||||
|
The numeric weight of the rack, including a unit designation (e.g. 10 kilograms or 20 pounds).
|
||||||
|
|
||||||
|
### Maximum Weight
|
||||||
|
|
||||||
|
The maximum total weight capacity for all installed devices, inclusive of the rack itself.
|
||||||
|
|
||||||
|
### Descending Units
|
||||||
|
|
||||||
|
If selected, the rack's elevation will display unit 1 at the top of the rack. (Most racks use ascending numbering, with unit 1 assigned to the bottommost position.)
|
@ -1,5 +1,8 @@
|
|||||||
# Branches
|
# Branches
|
||||||
|
|
||||||
|
!!! danger "Deprecated Feature"
|
||||||
|
This feature has been deprecated in NetBox v4.2 and will be removed in a future release. Please consider using the [netbox-branching plugin](https://github.com/netboxlabs/netbox-branching), which provides much more robust functionality.
|
||||||
|
|
||||||
A branch is a collection of related [staged changes](./stagedchange.md) that have been prepared for merging into the active database. A branch can be merged by executing its `commit()` method. Deleting a branch will delete all its related changes.
|
A branch is a collection of related [staged changes](./stagedchange.md) that have been prepared for merging into the active database. A branch can be merged by executing its `commit()` method. Deleting a branch will delete all its related changes.
|
||||||
|
|
||||||
## Fields
|
## Fields
|
||||||
|
@ -42,13 +42,24 @@ The type of data this field holds. This must be one of the following:
|
|||||||
|
|
||||||
For object and multiple-object fields only. Designates the type of NetBox object being referenced.
|
For object and multiple-object fields only. Designates the type of NetBox object being referenced.
|
||||||
|
|
||||||
|
### Related Object Filter
|
||||||
|
|
||||||
|
For object and multi-object custom fields, a filter may be defined to limit the available objects when populating a field value. This filter maps object attributes to values. For example, `{"status": "active"}` will include only objects with a status of "active."
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
This setting is employed for convenience only, and should not be relied upon to enforce data integrity.
|
||||||
|
|
||||||
### Weight
|
### Weight
|
||||||
|
|
||||||
A numeric weight used to override alphabetic ordering of fields by name. Custom fields with a lower weight will be listed before those with a higher weight. (Note that weight applies within the context of a custom field group, if defined.)
|
A numeric weight used to override alphabetic ordering of fields by name. Custom fields with a lower weight will be listed before those with a higher weight. (Note that weight applies within the context of a custom field group, if defined.)
|
||||||
|
|
||||||
### Required
|
### Required
|
||||||
|
|
||||||
If checked, this custom field must be populated with a valid value for the object to pass validation.
|
If enabled, this custom field must be populated with a valid value for the object to pass validation.
|
||||||
|
|
||||||
|
### Unique
|
||||||
|
|
||||||
|
If enabled, each object must have a unique value set for this custom field (per object type).
|
||||||
|
|
||||||
### Description
|
### Description
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ See the [event rules documentation](../../features/event-rules.md) for more inf
|
|||||||
|
|
||||||
A unique human-friendly name.
|
A unique human-friendly name.
|
||||||
|
|
||||||
### Content Types
|
### Object Types
|
||||||
|
|
||||||
The type(s) of object in NetBox that will trigger the rule.
|
The type(s) of object in NetBox that will trigger the rule.
|
||||||
|
|
||||||
@ -18,18 +18,35 @@ The type(s) of object in NetBox that will trigger the rule.
|
|||||||
|
|
||||||
If not selected, the event rule will not be processed.
|
If not selected, the event rule will not be processed.
|
||||||
|
|
||||||
### Events
|
### Events Types
|
||||||
|
|
||||||
The events which will trigger the rule. At least one event type must be selected.
|
The event types which will trigger the rule. At least one event type must be selected.
|
||||||
|
|
||||||
| Name | Description |
|
| Name | Description |
|
||||||
|------------|--------------------------------------|
|
|----------------|---------------------------------------------|
|
||||||
| Creations | A new object has been created |
|
| Object created | A new object has been created |
|
||||||
| Updates | An existing object has been modified |
|
| Object updated | An existing object has been modified |
|
||||||
| Deletions | An object has been deleted |
|
| Object deleted | An object has been deleted |
|
||||||
| Job starts | A job for an object starts |
|
| Job started | A background job is initiated |
|
||||||
| Job ends | A job for an object terminates |
|
| Job completed | A background job completes successfully |
|
||||||
|
| Job failed | A background job fails |
|
||||||
|
| Job errored | A background job is aborted due to an error |
|
||||||
|
|
||||||
|
!!! tip "Custom Event Types"
|
||||||
|
The above list includes only built-in event types. NetBox plugins can also register their own custom event types.
|
||||||
|
|
||||||
### Conditions
|
### Conditions
|
||||||
|
|
||||||
A set of [prescribed conditions](../../reference/conditions.md) against which the triggering object will be evaluated. If the conditions are defined but not met by the object, no action will be taken. An event rule that does not define any conditions will _always_ trigger.
|
A set of [prescribed conditions](../../reference/conditions.md) against which the triggering object will be evaluated. If the conditions are defined but not met by the object, no action will be taken. An event rule that does not define any conditions will _always_ trigger.
|
||||||
|
|
||||||
|
### Action Type
|
||||||
|
|
||||||
|
The type of action to take when the rule triggers. This must be one of the following choices:
|
||||||
|
|
||||||
|
* Webhook
|
||||||
|
* Custom script
|
||||||
|
* Notification
|
||||||
|
|
||||||
|
### Action Data
|
||||||
|
|
||||||
|
An optional dictionary of JSON data to pass when executing the rule. This can be useful to include additional context data, e.g. when transmitting a webhook.
|
||||||
|
17
docs/models/extras/notification.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Notification
|
||||||
|
|
||||||
|
A notification alerts a user that a specific action has taken place in NetBox, such as an object being modified or a background job completing. A notification may be generated via a user's [subscription](./subscription.md) to a particular object, or by an event rule targeting a [notification group](./notificationgroup.md) of which the user is a member.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### User
|
||||||
|
|
||||||
|
The recipient of the notification.
|
||||||
|
|
||||||
|
### Object
|
||||||
|
|
||||||
|
The object to which the notification relates.
|
||||||
|
|
||||||
|
### Event Type
|
||||||
|
|
||||||
|
The type of event indicated by the notification.
|
17
docs/models/extras/notificationgroup.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Notification Group
|
||||||
|
|
||||||
|
A set of NetBox users and/or groups of users identified as recipients for certain [notifications](./notification.md).
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Name
|
||||||
|
|
||||||
|
The name of the notification group.
|
||||||
|
|
||||||
|
### Users
|
||||||
|
|
||||||
|
One or more users directly designated as members of the notification group.
|
||||||
|
|
||||||
|
### Groups
|
||||||
|
|
||||||
|
All users of any selected groups are considered as members of the notification group.
|
@ -1,5 +1,8 @@
|
|||||||
# Staged Changes
|
# Staged Changes
|
||||||
|
|
||||||
|
!!! danger "Deprecated Feature"
|
||||||
|
This feature has been deprecated in NetBox v4.2 and will be removed in a future release. Please consider using the [netbox-branching plugin](https://github.com/netboxlabs/netbox-branching), which provides much more robust functionality.
|
||||||
|
|
||||||
A staged change represents the creation of a new object or the modification or deletion of an existing object to be performed at some future point. Each change must be assigned to a [branch](./branch.md).
|
A staged change represents the creation of a new object or the modification or deletion of an existing object to be performed at some future point. Each change must be assigned to a [branch](./branch.md).
|
||||||
|
|
||||||
Changes can be applied individually via the `apply()` method, however it is recommended to apply changes in bulk using the parent branch's `commit()` method.
|
Changes can be applied individually via the `apply()` method, however it is recommended to apply changes in bulk using the parent branch's `commit()` method.
|
||||||
|
15
docs/models/extras/subscription.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Subscription
|
||||||
|
|
||||||
|
A record indicating that a user is to be notified of any changes to a particular NetBox object. A notification maps exactly one user to exactly one object.
|
||||||
|
|
||||||
|
When an object to which a user is subscribed changes, a [notification](./notification.md) is generated for the user.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### User
|
||||||
|
|
||||||
|
The subscribed user.
|
||||||
|
|
||||||
|
### Object
|
||||||
|
|
||||||
|
The object to which the user is subscribed.
|
@ -1,6 +1,6 @@
|
|||||||
# ASNs
|
# ASNs
|
||||||
|
|
||||||
An Autonomous System Number (ASN) is a numeric identifier used in the BGP protocol to identify which [autonomous system](https://en.wikipedia.org/wiki/Autonomous_system_%28Internet%29) a particular prefix is originating and transiting through. NetBox support both 32- and 64- ASNs.
|
An Autonomous System Number (ASN) is a numeric identifier used in the Border Gateway Protocol (BGP) to identify which [autonomous system](https://en.wikipedia.org/wiki/Autonomous_system_%28Internet%29) a particular prefix is originating from or transiting through. NetBox supports both 16- and 32-bit ASNs.
|
||||||
|
|
||||||
ASNs must be globally unique within NetBox, and may be allocated from within a [defined range](./asnrange.md). Each ASN may be assigned to multiple [sites](../dcim/site.md).
|
ASNs must be globally unique within NetBox, and may be allocated from within a [defined range](./asnrange.md). Each ASN may be assigned to multiple [sites](../dcim/site.md).
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ ASNs must be globally unique within NetBox, and may be allocated from within a [
|
|||||||
|
|
||||||
### AS Number
|
### AS Number
|
||||||
|
|
||||||
The 32- or 64-bit AS number.
|
The 16- or 32-bit AS number.
|
||||||
|
|
||||||
### RIR
|
### RIR
|
||||||
|
|
||||||
|
@ -34,9 +34,11 @@ Designates whether the prefix should be treated as a pool. If selected, the firs
|
|||||||
|
|
||||||
If selected, this prefix will report 100% utilization regardless of how many child objects have been defined within it.
|
If selected, this prefix will report 100% utilization regardless of how many child objects have been defined within it.
|
||||||
|
|
||||||
### Site
|
### Scope
|
||||||
|
|
||||||
The [site](../dcim/site.md) to which this prefix is assigned (optional).
|
!!! info "This field replaced the `site` field in NetBox v4.2."
|
||||||
|
|
||||||
|
The [region](../dcim/region.md), [site](../dcim/site.md), [site group](../dcim/sitegroup.md) or [location](../dcim/location.md) to which the prefix is assigned (optional).
|
||||||
|
|
||||||
### VLAN
|
### VLAN
|
||||||
|
|
||||||
|
@ -26,3 +26,15 @@ The user-defined functional [role](./role.md) assigned to the VLAN.
|
|||||||
### VLAN Group or Site
|
### VLAN Group or Site
|
||||||
|
|
||||||
The [VLAN group](./vlangroup.md) or [site](../dcim/site.md) to which the VLAN is assigned.
|
The [VLAN group](./vlangroup.md) or [site](../dcim/site.md) to which the VLAN is assigned.
|
||||||
|
|
||||||
|
### Q-in-Q Role
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
For VLANs which comprise a Q-in-Q/IEEE 802.1ad topology, this field indicates whether the VLAN is treated as a service or customer VLAN.
|
||||||
|
|
||||||
|
### Q-in-Q Service VLAN
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The designated parent service VLAN for a Q-in-Q customer VLAN. This may be set only for Q-in-Q custom VLANs.
|
||||||
|
@ -14,9 +14,9 @@ A unique human-friendly name.
|
|||||||
|
|
||||||
A unique URL-friendly identifier. (This value can be used for filtering.)
|
A unique URL-friendly identifier. (This value can be used for filtering.)
|
||||||
|
|
||||||
### Minimum & Maximum VLAN IDs
|
### VLAN ID Ranges
|
||||||
|
|
||||||
A minimum and maximum child VLAN ID must be set for each group. (These default to 1 and 4094 respectively.) VLANs created within a group must have a VID that falls between these values (inclusive).
|
The set of VLAN IDs which are encompassed by the group. By default, this will be the entire range of valid IEEE 802.1Q VLAN IDs (1 to 4094, inclusive). VLANs created within a group must have a VID that falls within one of these ranges. Ranges may not overlap.
|
||||||
|
|
||||||
### Scope
|
### Scope
|
||||||
|
|
||||||
|
28
docs/models/ipam/vlantranslationpolicy.md
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# VLAN Translation Policies
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
VLAN translation is a feature that consists of VLAN translation policies and [VLAN translation rules](./vlantranslationrule.md). Many rules can belong to a policy, and each rule defines a mapping of a local to remote VLAN ID (VID). A policy can then be assigned to an [Interface](../dcim/interface.md) or [VMInterface](../virtualization/vminterface.md), and all VLAN translation rules associated with that policy will be visible in the interface details.
|
||||||
|
|
||||||
|
There are uniqueness constraints on `(policy, local_vid)` and on `(policy, remote_vid)` in the `VLANTranslationRule` model. Thus, you cannot have multiple rules linked to the same policy that have the same local VID or the same remote VID. A set of policies and rules might look like this:
|
||||||
|
|
||||||
|
Policy 1:
|
||||||
|
- Rule: 100 -> 200
|
||||||
|
- Rule: 101 -> 201
|
||||||
|
|
||||||
|
Policy 2:
|
||||||
|
- Rule: 100 -> 300
|
||||||
|
- Rule: 101 -> 301
|
||||||
|
|
||||||
|
However this is not allowed:
|
||||||
|
|
||||||
|
Policy 3:
|
||||||
|
- Rule: 100 -> 200
|
||||||
|
- Rule: 100 -> 300
|
||||||
|
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Name
|
||||||
|
|
||||||
|
A unique human-friendly name.
|
21
docs/models/ipam/vlantranslationrule.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# VLAN Translation Rules
|
||||||
|
|
||||||
|
!!! info "This feature was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
A VLAN translation rule represents a one-to-one mapping of a local VLAN ID (VID) to a remote VID. Many rules can belong to a single policy.
|
||||||
|
|
||||||
|
See [VLAN translation policies](./vlantranslationpolicy.md) for an overview of the VLAN Translation feature.
|
||||||
|
|
||||||
|
## Fields
|
||||||
|
|
||||||
|
### Policy
|
||||||
|
|
||||||
|
The [VLAN Translation Policy](./vlantranslationpolicy.md) to which this rule belongs.
|
||||||
|
|
||||||
|
### Local VID
|
||||||
|
|
||||||
|
VLAN ID (1-4094) in the local network which is to be translated to a remote VID.
|
||||||
|
|
||||||
|
### Remote VID
|
||||||
|
|
||||||
|
VLAN ID (1-4094) in the remote network to which the local VID will be translated.
|
@ -23,6 +23,8 @@ The cluster's operational status.
|
|||||||
!!! tip
|
!!! tip
|
||||||
Additional statuses may be defined by setting `Cluster.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
Additional statuses may be defined by setting `Cluster.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter.
|
||||||
|
|
||||||
### Site
|
### Scope
|
||||||
|
|
||||||
The [site](../dcim/site.md) with which the cluster is associated.
|
!!! info "This field replaced the `site` field in NetBox v4.2."
|
||||||
|
|
||||||
|
The [region](../dcim/region.md), [site](../dcim/site.md), [site group](../dcim/sitegroup.md) or [location](../dcim/location.md) with which this cluster is associated.
|
||||||
|
@ -10,4 +10,4 @@ A human-friendly name that is unique to the assigned virtual machine.
|
|||||||
|
|
||||||
### Size
|
### Size
|
||||||
|
|
||||||
The allocated disk size, in gigabytes.
|
The allocated disk size, in megabytes.
|
||||||
|
@ -50,4 +50,11 @@ The amount of running memory provisioned, in megabytes.
|
|||||||
|
|
||||||
### Disk
|
### Disk
|
||||||
|
|
||||||
The amount of disk storage provisioned, in gigabytes.
|
The amount of disk storage provisioned, in megabytes.
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
This field may be directly modified only on virtual machines which do not define discrete [virtual disks](./virtualdisk.md). Otherwise, it will report the sum of all attached disks.
|
||||||
|
|
||||||
|
### Serial Number
|
||||||
|
|
||||||
|
Optional serial number assigned to this virtual machine. Unlike devices, uniqueness is not enforced for virtual machine serial numbers.
|
||||||
|
@ -27,9 +27,12 @@ An interface on the same VM with which this interface is bridged.
|
|||||||
|
|
||||||
If not selected, this interface will be treated as disabled/inoperative.
|
If not selected, this interface will be treated as disabled/inoperative.
|
||||||
|
|
||||||
### MAC Address
|
### Primary MAC Address
|
||||||
|
|
||||||
The 48-bit MAC address (for Ethernet interfaces).
|
The [MAC address](../dcim/macaddress.md) assigned to this interface which is designated as its primary.
|
||||||
|
|
||||||
|
!!! note "Changed in NetBox v4.2"
|
||||||
|
The MAC address of an interface (formerly a concrete database field) is available as a property, `mac_address`, which reflects the value of the primary linked [MAC address](../dcim/macaddress.md) object.
|
||||||
|
|
||||||
### MTU
|
### MTU
|
||||||
|
|
||||||
@ -42,6 +45,7 @@ For switched Ethernet interfaces, this identifies the 802.1Q encapsulation strat
|
|||||||
* **Access:** All traffic is assigned to a single VLAN, with no tagging.
|
* **Access:** All traffic is assigned to a single VLAN, with no tagging.
|
||||||
* **Tagged:** One untagged "native" VLAN is allowed, as well as any number of tagged VLANs.
|
* **Tagged:** One untagged "native" VLAN is allowed, as well as any number of tagged VLANs.
|
||||||
* **Tagged (all):** Implies that all VLANs are carried by the interface. One untagged VLAN may be designated.
|
* **Tagged (all):** Implies that all VLANs are carried by the interface. One untagged VLAN may be designated.
|
||||||
|
* **Q-in-Q:** Q-in-Q (IEEE 802.1ad) encapsulation is performed using the assigned SVLAN.
|
||||||
|
|
||||||
This field must be left blank for routed interfaces which do employ 802.1Q encapsulation.
|
This field must be left blank for routed interfaces which do employ 802.1Q encapsulation.
|
||||||
|
|
||||||
@ -53,6 +57,18 @@ The "native" (untagged) VLAN for the interface. Valid only when one of the above
|
|||||||
|
|
||||||
The tagged VLANs which are configured to be carried by this interface. Valid only for the "tagged" 802.1Q mode above.
|
The tagged VLANs which are configured to be carried by this interface. Valid only for the "tagged" 802.1Q mode above.
|
||||||
|
|
||||||
|
### Q-in-Q SVLAN
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The assigned service VLAN (for Q-in-Q/802.1ad interfaces).
|
||||||
|
|
||||||
### VRF
|
### VRF
|
||||||
|
|
||||||
The [virtual routing and forwarding](../ipam/vrf.md) instance to which this interface is assigned.
|
The [virtual routing and forwarding](../ipam/vrf.md) instance to which this interface is assigned.
|
||||||
|
|
||||||
|
### VLAN Translation Policy
|
||||||
|
|
||||||
|
!!! info "This field was introduced in NetBox v4.2."
|
||||||
|
|
||||||
|
The [VLAN translation policy](../ipam/vlantranslationpolicy.md) that applies to this interface (optional).
|
||||||
|