Compare commits

..

No commits in common. "release" and "2.9.0" have entirely different histories.

30 changed files with 447 additions and 602 deletions

View file

@ -5,9 +5,6 @@ docker-compose*
env env
test-configuration test-configuration
.netbox/.git* .netbox/.git*
.netbox/.pre-commit-config.yaml
.netbox/.readthedocs.yaml
.netbox/.tx
.netbox/contrib .netbox/contrib
.netbox/scripts .netbox/scripts
.netbox/upgrade.sh .netbox/upgrade.sh

View file

@ -2,12 +2,17 @@
"Verbose": false, "Verbose": false,
"Debug": false, "Debug": false,
"IgnoreDefaults": false, "IgnoreDefaults": false,
"SpacesAfterTabs": false, "SpacesAftertabs": false,
"NoColor": false, "NoColor": false,
"Exclude": ["LICENSE", "\\.initializers", "\\.vscode"], "Exclude": [
"LICENSE",
"\\.initializers",
"\\.vscode"
],
"AllowedContentTypes": [], "AllowedContentTypes": [],
"PassedFiles": [], "PassedFiles": [],
"Disable": { "Disable": {
// set these options to true to disable specific checks
"EndOfLine": false, "EndOfLine": false,
"Indentation": false, "Indentation": false,
"InsertFinalNewline": false, "InsertFinalNewline": false,

View file

@ -9,6 +9,3 @@ indent_size = 2
[*.py] [*.py]
indent_size = 4 indent_size = 4
[VERSION]
insert_final_newline = false

4
.github/FUNDING.yml vendored
View file

@ -1,8 +1,8 @@
# These are supported funding model platforms # These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
- cimnine - cimnine
- tobiasge - tobiasge
patreon: # Replace with a single Patreon username patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username ko_fi: # Replace with a single Ko-fi username

View file

@ -1,147 +1,148 @@
name: Bug report name: Bug report
description: Create a report about a malfunction of the Docker setup description: Create a report about a malfunction of the Docker setup
body: body:
- type: markdown - type: markdown
attributes: attributes:
value: | value: |
Please only raise an issue if you're certain that you've found a bug. Please only raise an issue if you're certain that you've found a bug.
Else, see these other means to get help: Else, see these other means to get help:
- See our troubleshooting section: - See our troubleshooting section:
https://github.com/netbox-community/netbox-docker/wiki/Troubleshooting https://github.com/netbox-community/netbox-docker/wiki/Troubleshooting
- Have a look at the rest of the wiki: - Have a look at the rest of the wiki:
https://github.com/netbox-community/netbox-docker/wiki https://github.com/netbox-community/netbox-docker/wiki
- Check the release notes: - Check the release notes:
https://github.com/netbox-community/netbox-docker/releases https://github.com/netbox-community/netbox-docker/releases
- Look through the issues already resolved: - Look through the issues already resolved:
https://github.com/netbox-community/netbox-docker/issues?q=is%3Aclosed https://github.com/netbox-community/netbox-docker/issues?q=is%3Aclosed
If you did not find what you're looking for, If you did not find what you're looking for,
try the help of our community: try the help of our community:
- Post to Github Discussions: - Post to Github Discussions:
https://github.com/netbox-community/netbox-docker/discussions https://github.com/netbox-community/netbox-docker/discussions
- Join the `#netbox-docker` channel on our Slack: - Join the `#netbox-docker` channel on our Slack:
https://join.slack.com/t/netdev-community/shared_invite/zt-mtts8g0n-Sm6Wutn62q_M4OdsaIycrQ https://join.slack.com/t/netdev-community/shared_invite/zt-mtts8g0n-Sm6Wutn62q_M4OdsaIycrQ
- Ask on the NetBox mailing list: - Ask on the NetBox mailing list:
https://groups.google.com/d/forum/netbox-discuss https://groups.google.com/d/forum/netbox-discuss
Please don't open an issue to open a PR. Please don't open an issue to open a PR.
Just submit the PR, that's good enough. Just submit the PR, that's good enough.
- type: textarea - type: textarea
id: current-behavior id: current-behavior
attributes: attributes:
label: Current Behavior label: Current Behavior
description: Please describe what you did and how you think it misbehaved description: Please describe what you did and how you think it misbehaved
placeholder: I tried to … by doing …, but it … placeholder: I tried to … by doing …, but it …
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: expected-behavior id: expected-behavior
attributes: attributes:
label: Expected Behavior label: Expected Behavior
description: Please describe what you expected instead description: Please describe what you expected instead
placeholder: I expected that … when I do … placeholder: I expected that … when I do …
validations: validations:
required: true required: true
- type: input - type: input
id: docker-compose-version id: docker-compose-version
attributes: attributes:
label: Docker Compose Version label: Docker Compose Version
description: Please paste the output of `docker-compose version` (or `docker compose version`) description: Please paste the output of `docker-compose version`
placeholder: Docker Compose version vX.Y.Z placeholder: Docker Compose version vX.Y.Z
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: docker-version id: docker-version
attributes: attributes:
label: Docker Version label: Docker Version
description: Please paste the output of `docker version` description: Please paste the output of `docker version`
render: text render: text
placeholder: | placeholder: |
Client: Client:
Cloud integration: 1.0.17 Cloud integration: 1.0.17
Version: 20.10.8 Version: 20.10.8
API version: 1.41 API version: 1.41
Go version: go1.16.6 Go version: go1.16.6
Git commit: 3967b7d Git commit: 3967b7d
Built: Fri Jul 30 19:55:20 2021 Built: Fri Jul 30 19:55:20 2021
OS/Arch: darwin/amd64 OS/Arch: darwin/amd64
Context: default Context: default
Experimental: true Experimental: true
Server: Docker Engine - Community Server: Docker Engine - Community
Engine: Engine:
Version: 20.10.8 Version: 20.10.8
API version: 1.41 (minimum version 1.12) API version: 1.41 (minimum version 1.12)
Go version: go1.16.6 Go version: go1.16.6
Git commit: 75249d8 Git commit: 75249d8
Built: Fri Jul 30 19:52:10 2021 Built: Fri Jul 30 19:52:10 2021
OS/Arch: linux/amd64 OS/Arch: linux/amd64
Experimental: false Experimental: false
containerd: containerd:
Version: 1.4.9 Version: 1.4.9
GitCommit: e25210fe30a0a703442421b0f60afac609f950a3 GitCommit: e25210fe30a0a703442421b0f60afac609f950a3
runc: runc:
Version: 1.0.1 Version: 1.0.1
GitCommit: v1.0.1-0-g4144b63 GitCommit: v1.0.1-0-g4144b63
docker-init: docker-init:
Version: 0.19.0 Version: 0.19.0
GitCommit: de40ad0 GitCommit: de40ad0
validations: validations:
required: true required: true
- type: input - type: input
id: git-rev id: git-rev
attributes: attributes:
label: The git Revision label: The git Revision
description: Please paste the output of `git rev-parse HEAD` description: Please paste the output of `git rev-parse HEAD`
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: git-status id: git-status
attributes: attributes:
label: The git Status label: The git Status
description: Please paste the output of `git status` description: Please paste the output of `git status`
render: text render: text
placeholder: | placeholder: |
On branch main On branch main
nothing to commit, working tree clean nothing to commit, working tree clean
validations: validations:
required: true required: true
- type: input - type: input
id: run-command id: run-command
attributes: attributes:
label: Startup Command label: Startup Command
description: Please specify the command you used to start the project description: Please specify the command you used to start the project
placeholder: docker compose up placeholder: docker compose up
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: netbox-logs id: netbox-logs
attributes: attributes:
label: NetBox Logs label: NetBox Logs
description: Please paste the output of `docker-compose logs netbox` (or `docker compose logs netbox`) description: Please paste the output of `docker-compose logs netbox` (or `docker compose logs netbox`)
render: text render: text
placeholder: | placeholder: |
netbox_1 | ⚙️ Applying database migrations netbox_1 | ⚙️ Applying database migrations
netbox_1 | 🧬 loaded config '/etc/netbox/config/configuration.py' netbox_1 | 🧬 loaded config '/etc/netbox/config/configuration.py'
netbox_1 | 🧬 loaded config '/etc/netbox/config/a.py' netbox_1 | 🧬 loaded config '/etc/netbox/config/a.py'
netbox_1 | 🧬 loaded config '/etc/netbox/config/extra.py' netbox_1 | 🧬 loaded config '/etc/netbox/config/extra.py'
netbox_1 | 🧬 loaded config '/etc/netbox/config/logging.py' netbox_1 | 🧬 loaded config '/etc/netbox/config/logging.py'
netbox_1 | 🧬 loaded config '/etc/netbox/config/plugins.py' netbox_1 | 🧬 loaded config '/etc/netbox/config/plugins.py'
... ...
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: docker-compose-override-yml id: docker-compose-override-yml
attributes: attributes:
label: Content of docker-compose.override.yml label: Content of docker-compose.override.yml
description: Please paste the output of `cat docker-compose.override.yml` description: Please paste the output of `cat docker-compose.override.yml`
render: yaml render: yaml
placeholder: | placeholder: |
services: version: '3.4'
netbox: services:
ports: netbox:
- '8080:8080' ports:
validations: - '8080:8080'
required: true validations:
required: true

View file

@ -6,7 +6,7 @@ contact_links:
- name: Chat - name: Chat
url: https://join.slack.com/t/netdev-community/shared_invite/zt-mtts8g0n-Sm6Wutn62q_M4OdsaIycrQ url: https://join.slack.com/t/netdev-community/shared_invite/zt-mtts8g0n-Sm6Wutn62q_M4OdsaIycrQ
about: "Usually the quickest way to seek help with small issues is to join our #netbox-docker Slack channel." about: 'Usually the quickest way to seek help with small issues is to join our #netbox-docker Slack channel.'
- name: Community Wiki - name: Community Wiki
url: https://github.com/netbox-community/netbox-docker/wiki url: https://github.com/netbox-community/netbox-docker/wiki

View file

@ -1,68 +1,68 @@
name: Feature or Change Request name: Feature or Change Request
description: Request a new feature or a change of the current behavior description: Request a new feature or a change of the current behavior
body: body:
- type: markdown - type: markdown
attributes: attributes:
value: | value: |
This issue type is to propose new features for the Docker setup. This issue type is to propose new features for the Docker setup.
To just spin an idea, see the Github Discussions section, please. To just spin an idea, see the Github Discussions section, please.
Before asking for help, see these links first: Before asking for help, see these links first:
- See our troubleshooting section: - See our troubleshooting section:
https://github.com/netbox-community/netbox-docker/wiki/Troubleshooting https://github.com/netbox-community/netbox-docker/wiki/Troubleshooting
- Have a look at the rest of the wiki: - Have a look at the rest of the wiki:
https://github.com/netbox-community/netbox-docker/wiki https://github.com/netbox-community/netbox-docker/wiki
- Check the release notes: - Check the release notes:
https://github.com/netbox-community/netbox-docker/releases https://github.com/netbox-community/netbox-docker/releases
- Look through the issues already resolved: - Look through the issues already resolved:
https://github.com/netbox-community/netbox-docker/issues?q=is%3Aclosed https://github.com/netbox-community/netbox-docker/issues?q=is%3Aclosed
If you did not find what you're looking for, If you did not find what you're looking for,
try the help of our community: try the help of our community:
- Post to Github Discussions: - Post to Github Discussions:
https://github.com/netbox-community/netbox-docker/discussions https://github.com/netbox-community/netbox-docker/discussions
- Join the `#netbox-docker` channel on our Slack: - Join the `#netbox-docker` channel on our Slack:
https://join.slack.com/t/netdev-community/shared_invite/zt-mtts8g0n-Sm6Wutn62q_M4OdsaIycrQ https://join.slack.com/t/netdev-community/shared_invite/zt-mtts8g0n-Sm6Wutn62q_M4OdsaIycrQ
- Ask on the NetBox mailing list: - Ask on the NetBox mailing list:
https://groups.google.com/d/forum/netbox-discuss https://groups.google.com/d/forum/netbox-discuss
Please don't open an issue to open a PR. Please don't open an issue to open a PR.
Just submit the PR, that's good enough. Just submit the PR, that's good enough.
- type: textarea - type: textarea
id: desired-behavior id: desired-behavior
attributes: attributes:
label: Desired Behavior label: Desired Behavior
description: Please describe the desired behavior description: Please describe the desired behavior
placeholder: To me, it would be useful, if … because … placeholder: To me, it would be useful, if … because …
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: contrast-to-current id: contrast-to-current
attributes: attributes:
label: Contrast to Current Behavior label: Contrast to Current Behavior
description: Please describe how the desired behavior is different from the current behavior description: Please describe how the desired behavior is different from the current behavior
placeholder: The current behavior is …, but this lacks … placeholder: The current behavior is …, but this lacks …
validations: validations:
required: true required: true
- type: textarea - type: textarea
id: required-changes id: required-changes
attributes: attributes:
label: Required Changes label: Required Changes
description: If you can, please elaborate what changes will be required to implement the desired behavior description: If you can, please elaborate what changes will be required to implement the desired behavior
placeholder: I suggest to change the file … placeholder: I suggest to change the file …
validations: validations:
required: false required: false
- type: textarea - type: textarea
id: discussion id: discussion
attributes: attributes:
label: "Discussion: Benefits and Drawbacks" label: 'Discussion: Benefits and Drawbacks'
description: | description: |
Please make your case here: Please make your case here:
- Why do you think this project and the community will benefit from your suggestion? - Why do you think this project and the community will benefit from your suggestion?
- What are the drawbacks of this change? Is it backwards-compatible? - What are the drawbacks of this change? Is it backwards-compatible?
- Anything else that you think is relevant to the discussion of this feature/change request. - Anything else that you think is relevant to the discussion of this feature/change request.
placeholder: I suggest to change the file … placeholder: I suggest to change the file …
validations: validations:
required: false required: false

View file

@ -80,6 +80,6 @@ into the release notes.
Please put an x into the brackets (like `[x]`) if you've completed that task. Please put an x into the brackets (like `[x]`) if you've completed that task.
--> -->
- [ ] I have read the comments and followed the PR template. * [ ] I have read the comments and followed the PR template.
- [ ] I have explained my PR according to the information in the comments. * [ ] I have explained my PR according to the information in the comments.
- [ ] My PR targets the `develop` branch. * [ ] My PR targets the `develop` branch.

View file

@ -16,35 +16,31 @@ concurrency:
jobs: jobs:
lint: lint:
runs-on: ubuntu-24.04 runs-on: ubuntu-latest
name: Checks syntax of our code name: Checks syntax of our code
permissions:
contents: read
packages: read
statuses: write
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
with: with:
# Full git history is needed to get a proper # Full git history is needed to get a proper
# list of changed files within `super-linter` # list of changed files within `super-linter`
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: '3.9'
- name: Lint Code Base - name: Lint Code Base
uses: super-linter/super-linter@v8 uses: github/super-linter@v6
env: env:
DEFAULT_BRANCH: develop DEFAULT_BRANCH: develop
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SUPPRESS_POSSUM: true SUPPRESS_POSSUM: true
LINTER_RULES_PATH: / LINTER_RULES_PATH: /
VALIDATE_ALL_CODEBASE: false VALIDATE_ALL_CODEBASE: false
VALIDATE_BIOME_FORMAT: false
VALIDATE_CHECKOV: false VALIDATE_CHECKOV: false
VALIDATE_DOCKERFILE: false VALIDATE_DOCKERFILE: false
VALIDATE_GITHUB_ACTIONS_ZIZMOR: false
VALIDATE_GITLEAKS: false VALIDATE_GITLEAKS: false
VALIDATE_JSCPD: false VALIDATE_JSCPD: false
VALIDATE_TRIVY: false
FILTER_REGEX_EXCLUDE: (.*/)?(LICENSE|configuration/.*) FILTER_REGEX_EXCLUDE: (.*/)?(LICENSE|configuration/.*)
EDITORCONFIG_FILE_NAME: .editorconfig-checker.json EDITORCONFIG_FILE_NAME: .ecrc
DOCKERFILE_HADOLINT_FILE_NAME: .hadolint.yaml DOCKERFILE_HADOLINT_FILE_NAME: .hadolint.yaml
MARKDOWN_CONFIG_FILE: .markdown-lint.yml MARKDOWN_CONFIG_FILE: .markdown-lint.yml
PYTHON_BLACK_CONFIG_FILE: pyproject.toml PYTHON_BLACK_CONFIG_FILE: pyproject.toml
@ -59,10 +55,10 @@ jobs:
- ./build-latest.sh - ./build-latest.sh
- PRERELEASE=true ./build-latest.sh - PRERELEASE=true ./build-latest.sh
- ./build.sh feature - ./build.sh feature
- ./build.sh main - ./build.sh develop
os: os:
- ubuntu-24.04 - ubuntu-latest
- ubuntu-24.04-arm - self-hosted
fail-fast: false fail-fast: false
env: env:
GH_ACTION: enable GH_ACTION: enable
@ -73,18 +69,13 @@ jobs:
steps: steps:
- id: git-checkout - id: git-checkout
name: Checkout name: Checkout
uses: actions/checkout@v5 uses: actions/checkout@v4
- id: buildx-setup - id: buildx-setup
name: Set up Docker Buildx name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
- id: arm-install-skopeo
name: Install 'skopeo' on ARM64
if: matrix.os == 'ubuntu-24.04-arm'
run: |
sudo apt-get install -y skopeo
- id: arm-buildx-platform - id: arm-buildx-platform
name: Set BUILDX_PLATFORM to ARM64 name: Set BUILDX_PLATFORM to ARM64
if: matrix.os == 'ubuntu-24.04-arm' if: matrix.os == 'self-hosted'
run: | run: |
echo "BUILDX_PLATFORM=linux/arm64" >>"${GITHUB_ENV}" echo "BUILDX_PLATFORM=linux/arm64" >>"${GITHUB_ENV}"
- id: docker-build - id: docker-build
@ -94,7 +85,7 @@ jobs:
BUILDX_BUILDER_NAME: ${{ steps.buildx-setup.outputs.name }} BUILDX_BUILDER_NAME: ${{ steps.buildx-setup.outputs.name }}
- id: arm-time-limit - id: arm-time-limit
name: Set Netbox container start_period higher on ARM64 name: Set Netbox container start_period higher on ARM64
if: matrix.os == 'ubuntu-24.04-arm' if: matrix.os == 'self-hosted'
run: | run: |
echo "NETBOX_START_PERIOD=240s" >>"${GITHUB_ENV}" echo "NETBOX_START_PERIOD=240s" >>"${GITHUB_ENV}"
- id: docker-test - id: docker-test

View file

@ -6,24 +6,22 @@ on:
types: types:
- published - published
schedule: schedule:
- cron: "45 5 * * *" - cron: '45 5 * * *'
workflow_dispatch: workflow_dispatch:
jobs: jobs:
build: build:
strategy: strategy:
matrix: matrix:
build: build_cmd:
- { "cmd": "./build-latest.sh", "branch": "release" } - ./build-latest.sh
- { "cmd": "./build.sh main", "branch": "release" } - PRERELEASE=true ./build-latest.sh
# Build pre release images from our develop branch - ./build.sh feature
# This is used to test the latest changes before they are merged into the main branch - ./build.sh develop
- { "cmd": "PRERELEASE=true ./build-latest.sh", "branch": "develop" }
- { "cmd": "./build.sh feature", "branch": "develop" }
platform: platform:
- linux/amd64,linux/arm64 - linux/amd64,linux/arm64
fail-fast: false fail-fast: false
runs-on: ubuntu-24.04 runs-on: ubuntu-latest
name: Builds new NetBox Docker Images name: Builds new NetBox Docker Images
env: env:
GH_ACTION: enable GH_ACTION: enable
@ -32,18 +30,24 @@ jobs:
steps: steps:
- id: source-checkout - id: source-checkout
name: Checkout name: Checkout
uses: actions/checkout@v5 uses: actions/checkout@v4
with:
ref: ${{ matrix.build.branch }}
- id: set-netbox-docker-version - id: set-netbox-docker-version
name: Get Version of NetBox Docker name: Get Version of NetBox Docker
run: echo "version=$(cat VERSION)" >>"$GITHUB_OUTPUT" run: echo "version=$(cat VERSION)" >>"$GITHUB_OUTPUT"
shell: bash shell: bash
- id: check-build-needed - id: qemu-setup
name: Check if the build is needed for '${{ matrix.build.cmd }}' name: Set up QEMU
env: uses: docker/setup-qemu-action@v3
CHECK_ONLY: "true" - id: buildx-setup
run: ${{ matrix.build.cmd }} name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- id: docker-build
name: Build the image with '${{ matrix.build_cmd }}'
run: ${{ matrix.build_cmd }}
- id: test-image
name: Test the image
run: IMAGE="${FINAL_DOCKER_TAG}" ./test.sh
if: steps.docker-build.outputs.skipped != 'true'
# docker.io # docker.io
- id: docker-io-login - id: docker-io-login
name: Login to docker.io name: Login to docker.io
@ -52,15 +56,7 @@ jobs:
registry: docker.io registry: docker.io
username: ${{ secrets.dockerhub_username }} username: ${{ secrets.dockerhub_username }}
password: ${{ secrets.dockerhub_password }} password: ${{ secrets.dockerhub_password }}
if: steps.check-build-needed.outputs.skipped != 'true' if: steps.docker-build.outputs.skipped != 'true'
- id: buildx-setup
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
version: "lab:latest"
driver: cloud
endpoint: "netboxcommunity/netbox-default"
if: steps.check-build-needed.outputs.skipped != 'true'
# quay.io # quay.io
- id: quay-io-login - id: quay-io-login
name: Login to Quay.io name: Login to Quay.io
@ -69,7 +65,7 @@ jobs:
registry: quay.io registry: quay.io
username: ${{ secrets.quayio_username }} username: ${{ secrets.quayio_username }}
password: ${{ secrets.quayio_password }} password: ${{ secrets.quayio_password }}
if: steps.check-build-needed.outputs.skipped != 'true' if: steps.docker-build.outputs.skipped != 'true'
# ghcr.io # ghcr.io
- id: ghcr-io-login - id: ghcr-io-login
name: Login to GitHub Container Registry name: Login to GitHub Container Registry
@ -78,11 +74,11 @@ jobs:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
if: steps.check-build-needed.outputs.skipped != 'true' if: steps.docker-build.outputs.skipped != 'true'
- id: build-and-push - id: build-and-push
name: Push the image name: Push the image
run: ${{ matrix.build.cmd }} --push run: ${{ matrix.build_cmd }} --push
if: steps.check-build-needed.outputs.skipped != 'true' if: steps.docker-build.outputs.skipped != 'true'
env: env:
BUILDX_PLATFORM: ${{ matrix.platform }} BUILDX_PLATFORM: ${{ matrix.platform }}
BUILDX_BUILDER_NAME: ${{ steps.buildx-setup.outputs.name }} BUILDX_BUILDER_NAME: ${{ steps.buildx-setup.outputs.name }}

View file

@ -1,4 +1,5 @@
--- ---
rules: rules:
line-length: line-length:
max: 160 max: 120

View file

@ -1,7 +1,6 @@
ARG FROM ARG FROM
FROM ${FROM} AS builder FROM ${FROM} as builder
COPY --from=ghcr.io/astral-sh/uv:0.9 /uv /usr/local/bin/
RUN export DEBIAN_FRONTEND=noninteractive \ RUN export DEBIAN_FRONTEND=noninteractive \
&& apt-get update -qq \ && apt-get update -qq \
&& apt-get upgrade \ && apt-get upgrade \
@ -21,11 +20,16 @@ RUN export DEBIAN_FRONTEND=noninteractive \
libxslt-dev \ libxslt-dev \
pkg-config \ pkg-config \
python3-dev \ python3-dev \
&& /usr/local/bin/uv venv /opt/netbox/venv python3-pip \
python3-venv \
&& python3 -m venv /opt/netbox/venv \
&& /opt/netbox/venv/bin/python3 -m pip install --upgrade \
pip \
setuptools \
wheel
ARG NETBOX_PATH ARG NETBOX_PATH
COPY ${NETBOX_PATH}/requirements.txt requirements-container.txt / COPY ${NETBOX_PATH}/requirements.txt requirements-container.txt /
ENV VIRTUAL_ENV=/opt/netbox/venv
RUN \ RUN \
# Gunicorn is not needed because we use Nginx Unit # Gunicorn is not needed because we use Nginx Unit
sed -i -e '/gunicorn/d' /requirements.txt && \ sed -i -e '/gunicorn/d' /requirements.txt && \
@ -33,9 +37,7 @@ RUN \
# we have potential version conflicts and the build will fail. # we have potential version conflicts and the build will fail.
# That's why we just replace it in the original requirements.txt. # That's why we just replace it in the original requirements.txt.
sed -i -e 's/social-auth-core/social-auth-core\[all\]/g' /requirements.txt && \ sed -i -e 's/social-auth-core/social-auth-core\[all\]/g' /requirements.txt && \
# The same is true for 'django-storages' /opt/netbox/venv/bin/pip install \
sed -i -e 's/django-storages/django-storages\[azure,boto3,dropbox,google,libcloud,sftp\]/g' /requirements.txt && \
/usr/local/bin/uv pip install \
-r /requirements.txt \ -r /requirements.txt \
-r /requirements-container.txt -r /requirements-container.txt
@ -44,10 +46,8 @@ RUN \
### ###
ARG FROM ARG FROM
FROM ${FROM} AS main FROM ${FROM} as main
COPY docker/unit.list /etc/apt/sources.list.d/unit.list
ADD --chmod=444 --chown=0:0 https://unit.nginx.org/keys/nginx-keyring.gpg /usr/share/keyrings/nginx-keyring.gpg
RUN export DEBIAN_FRONTEND=noninteractive \ RUN export DEBIAN_FRONTEND=noninteractive \
&& apt-get update -qq \ && apt-get update -qq \
&& apt-get upgrade \ && apt-get upgrade \
@ -63,41 +63,46 @@ RUN export DEBIAN_FRONTEND=noninteractive \
openssh-client \ openssh-client \
openssl \ openssl \
python3 \ python3 \
python3-distutils \
tini \ tini \
unit-python3.12=1.34.2-1~noble \ && curl --silent --output /usr/share/keyrings/nginx-keyring.gpg \
unit=1.34.2-1~noble \ https://unit.nginx.org/keys/nginx-keyring.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ mantic unit" \
> /etc/apt/sources.list.d/unit.list \
&& apt-get update -qq \
&& apt-get install \
--yes -qq --no-install-recommends \
unit=1.32.0-1~mantic \
unit-python3.11=1.32.0-1~mantic \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
# Copy the modified 'requirements*.txt' files, to have the files actually used during installation
COPY --from=builder /requirements.txt /requirements-container.txt /opt/netbox/
COPY --from=builder /usr/local/bin/uv /usr/local/bin/
COPY --from=builder /opt/netbox/venv /opt/netbox/venv COPY --from=builder /opt/netbox/venv /opt/netbox/venv
ARG NETBOX_PATH ARG NETBOX_PATH
COPY ${NETBOX_PATH} /opt/netbox COPY ${NETBOX_PATH} /opt/netbox
# Copy the modified 'requirements*.txt' files, to have the files actually used during installation
COPY --from=builder /requirements.txt /requirements-container.txt /opt/netbox/
COPY docker/configuration.docker.py /opt/netbox/netbox/netbox/configuration.py COPY docker/configuration.docker.py /opt/netbox/netbox/netbox/configuration.py
COPY docker/ldap_config.docker.py /opt/netbox/netbox/netbox/ldap_config.py COPY docker/ldap_config.docker.py /opt/netbox/netbox/netbox/ldap_config.py
COPY docker/docker-entrypoint.sh /opt/netbox/docker-entrypoint.sh COPY docker/docker-entrypoint.sh /opt/netbox/docker-entrypoint.sh
COPY docker/housekeeping.sh /opt/netbox/housekeeping.sh
COPY docker/launch-netbox.sh /opt/netbox/launch-netbox.sh COPY docker/launch-netbox.sh /opt/netbox/launch-netbox.sh
COPY configuration/ /etc/netbox/config/ COPY configuration/ /etc/netbox/config/
COPY docker/nginx-unit.json /etc/unit/ COPY docker/nginx-unit.json /etc/unit/
COPY VERSION /opt/netbox/VERSION
WORKDIR /opt/netbox/netbox WORKDIR /opt/netbox/netbox
# Must set permissions for '/opt/netbox/netbox/media' directory # Must set permissions for '/opt/netbox/netbox/media' directory
# to g+w so that pictures can be uploaded to netbox. # to g+w so that pictures can be uploaded to netbox.
RUN mkdir -p static media /opt/unit/state/ /opt/unit/tmp/ \ RUN mkdir -p static /opt/unit/state/ /opt/unit/tmp/ \
&& chown -R unit:root /opt/unit/ media reports scripts \ && chown -R unit:root /opt/unit/ media reports scripts \
&& chmod -R g+w /opt/unit/ media reports scripts \ && chmod -R g+w /opt/unit/ media reports scripts \
&& cd /opt/netbox/ && SECRET_KEY="dummyKeyWithMinimumLength-------------------------" /opt/netbox/venv/bin/python -m mkdocs build \ && cd /opt/netbox/ && SECRET_KEY="dummyKeyWithMinimumLength-------------------------" /opt/netbox/venv/bin/python -m mkdocs build \
--config-file /opt/netbox/mkdocs.yml --site-dir /opt/netbox/netbox/project-static/docs/ \ --config-file /opt/netbox/mkdocs.yml --site-dir /opt/netbox/netbox/project-static/docs/ \
&& DEBUG="true" SECRET_KEY="dummyKeyWithMinimumLength-------------------------" /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py collectstatic --no-input \ && SECRET_KEY="dummyKeyWithMinimumLength-------------------------" /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py collectstatic --no-input
&& mkdir /opt/netbox/netbox/local \
&& echo "build: Docker-$(cat /opt/netbox/VERSION)" > /opt/netbox/netbox/local/release.yaml
ENV LANG=C.utf8 PATH=/opt/netbox/venv/bin:$PATH VIRTUAL_ENV=/opt/netbox/venv UV_NO_CACHE=1 ENV LANG=C.utf8 PATH=/opt/netbox/venv/bin:$PATH
ENTRYPOINT [ "/usr/bin/tini", "--" ] ENTRYPOINT [ "/usr/bin/tini", "--" ]
CMD [ "/opt/netbox/docker-entrypoint.sh", "/opt/netbox/launch-netbox.sh" ] CMD [ "/opt/netbox/docker-entrypoint.sh", "/opt/netbox/launch-netbox.sh" ]

View file

@ -1,19 +0,0 @@
# Maintainers of _NetBox Docker_
This file lists all currently recognized maintainers of the _NetBox Docker_ project in alphabetical order:
- @cimnine
- @tobiasge
## Stepping Down
Every maintainer is a volunteer and may step down as maintainer at any time without providing any reason.
To make this explicit, the maintainer is asked to update this file.
The last maintainer stepping down is asked to archive the project on GitHub to indicate that the project is no longer maintained.
## Signing up
Everyone is welcome to sign up as maintainer by creating a PR and add their own username to the list.
The current maintainers shall discuss the application.
They may turn down an application if they don't feel confident that the new maintainer is a positive addition.

View file

@ -1,71 +0,0 @@
# Development, Maintenance and Community Principals for _NetBox Docker_
These principals shall guide the development and the maintenance of _NetBox Docker_.
## Basic principals
This project is maintained on voluntary basis.
Everyone is asked to respect that.
This means, that …
- … sometimes features are not implemented as fast as one might like -- or not at all.
- … sometimes nobody is looking at bugs, or they are not fixed as fast as one might like -- or not at all.
- … sometimes PRs are not reviewed for an extended period.
Everyone is welcome to provide improvements and bugfixes to the benefit of everyone else.
## Development Principals
The goal of the _NetBox Docker_ project is to provide a container to run the basic NetBox project.
The container should feel like a native container -- as if it were provided by NetBox itself:
- Configuration via environment variables where feasible.
- Except: Whenever a complex type such as a `dict` is required as value of a configuration setting,
then it shall not be provided through an environment variable.
- Configuration of secrets via secret files.
- Log output to standard out (STDOUT/`&1`) / standard error (STDERR/`&2`).
- Volumes for data and cache directories.
- Otherwise, no mounts shall be necessary.
- Runs a non-root user by default.
- One process / role for each instance.
The container generally does not provide more features than the basic NetBox project itself provides.
It may provide additional Python dependencies than the upstream project,
so that all configurable features of NetBox can be used in the container without further modification.
The container may provide helpers, so that it feels and behaves like a native container.
The container does not bundle any community plugins.
## Maintenance Principals
The main goals of maintaining _NetBox Docker_ are:
- Keeping the project at a high quality level.
- Keeping the maintenance effort minimal.
- Coordinating development efforts.
The following guidelines help us to achieve these goals:
- As many maintenance tasks as possible shall be automated or scripted.
- All manual tasks must be documented.
- All changes are reviewed by at least one maintainer.
- Changes of maintainers are reviewed by at least one other maintainer.
(Except if there's only one maintainer left.)
- The infrastructure beyond what GitHub provides shall be kept to a minimum.
- On request, every maintainer shall get access to infrastructure that is beyond GitHub
(at the time of writing that's _Docker Hub_ and _Quay_ in particular).
## Community Principals
This project is developed by the NetBox community for the NetBox community.
We welcome contributions, as long as they are in line with the principals above.
The maintainers of NetBox Docker are not the support team.
The community is expected to help each other out.
Always remember:
Behind every screen (or screen-reader) on the other end is a fellow human.
Be nice and respectful, thankful for help,
and value ideas and contributions,
even when they don't fit the goals.

View file

@ -8,16 +8,11 @@
[![GitHub license](https://img.shields.io/github/license/netbox-community/netbox-docker)][netbox-docker-license] [![GitHub license](https://img.shields.io/github/license/netbox-community/netbox-docker)][netbox-docker-license]
[The GitHub repository][netbox-docker-github] houses the components needed to build NetBox as a container. [The GitHub repository][netbox-docker-github] houses the components needed to build NetBox as a container.
Images are built regularly using the code in that repository Images are built regularly using the code in that repository and are pushed to [Docker Hub][netbox-dockerhub], [Quay.io][netbox-quayio] and [GitHub Container Registry][netbox-ghcr].
and are pushed to [Docker Hub][netbox-dockerhub],
[Quay.io][netbox-quayio] and [GitHub Container Registry][netbox-ghcr].
_NetBox Docker_ is a project developed and maintained by the _NetBox_ community.
Do you have any questions? Do you have any questions?
Before opening an issue on GitHub, Before opening an issue on Github,
please join [our Slack][netbox-docker-slack] please join [our Slack][netbox-docker-slack] and ask for help in the [`#netbox-docker`][netbox-docker-slack-channel] channel.
and ask for help in the [`#netbox-docker`][netbox-docker-slack-channel] channel,
or start a new [GitHub Discussion][github-discussions].
[github-stargazers]: https://github.com/netbox-community/netbox-docker/stargazers [github-stargazers]: https://github.com/netbox-community/netbox-docker/stargazers
[github-release]: https://github.com/netbox-community/netbox-docker/releases [github-release]: https://github.com/netbox-community/netbox-docker/releases
@ -29,7 +24,6 @@ or start a new [GitHub Discussion][github-discussions].
[netbox-docker-slack-channel]: https://netdev-community.slack.com/archives/C01P0GEVBU7 [netbox-docker-slack-channel]: https://netdev-community.slack.com/archives/C01P0GEVBU7
[netbox-slack-channel]: https://netdev-community.slack.com/archives/C01P0FRSXRV [netbox-slack-channel]: https://netdev-community.slack.com/archives/C01P0FRSXRV
[netbox-docker-license]: https://github.com/netbox-community/netbox-docker/blob/release/LICENSE [netbox-docker-license]: https://github.com/netbox-community/netbox-docker/blob/release/LICENSE
[github-discussions]: https://github.com/netbox-community/netbox-docker/discussions
## Quickstart ## Quickstart
@ -39,9 +33,12 @@ There is a more complete [_Getting Started_ guide on our wiki][wiki-getting-star
```bash ```bash
git clone -b release https://github.com/netbox-community/netbox-docker.git git clone -b release https://github.com/netbox-community/netbox-docker.git
cd netbox-docker cd netbox-docker
# Copy the example override file tee docker-compose.override.yml <<EOF
cp docker-compose.override.yml.example docker-compose.override.yml services:
# Read and edit the file to your liking netbox:
ports:
- 8000:8080
EOF
docker compose pull docker compose pull
docker compose up docker compose up
``` ```
@ -56,8 +53,7 @@ To create the first admin user run this command:
docker compose exec netbox /opt/netbox/netbox/manage.py createsuperuser docker compose exec netbox /opt/netbox/netbox/manage.py createsuperuser
``` ```
If you need to restart Netbox from an empty database often, If you need to restart Netbox from an empty database often, you can also set the `SUPERUSER_*` variables in your `docker-compose.override.yml` as shown in the example.
you can also set the `SUPERUSER_*` variables in your `docker-compose.override.yml`.
[wiki-getting-started]: https://github.com/netbox-community/netbox-docker/wiki/Getting-Started [wiki-getting-started]: https://github.com/netbox-community/netbox-docker/wiki/Getting-Started
@ -67,34 +63,37 @@ New container images are built and published automatically every ~24h.
> We recommend to use either the `vX.Y.Z-a.b.c` tags or the `vX.Y-a.b.c` tags in production! > We recommend to use either the `vX.Y.Z-a.b.c` tags or the `vX.Y-a.b.c` tags in production!
- `vX.Y.Z-a.b.c`, `vX.Y-a.b.c`: * `vX.Y.Z-a.b.c`, `vX.Y-a.b.c`:
These are release builds containing _NetBox version_ `vX.Y.Z`. These are release builds containing _NetBox version_ `vX.Y.Z`.
They contain the support files of _NetBox Docker version_ `a.b.c`. They contain the support files of _NetBox Docker version_ `a.b.c`.
You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility. You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility.
These images are automatically built from [the corresponding releases of NetBox][netbox-releases]. These images are automatically built from [the corresponding releases of NetBox][netbox-releases].
- `latest-a.b.c`: * `latest-a.b.c`:
These are release builds, containing the latest stable version of NetBox. These are release builds, containing the latest stable version of NetBox.
They contain the support files of _NetBox Docker version_ `a.b.c`. They contain the support files of _NetBox Docker version_ `a.b.c`.
You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility. You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility.
- `snapshot-a.b.c`: These images are automatically built from [the `master` branch of NetBox][netbox-master].
* `snapshot-a.b.c`:
These are prerelease builds. These are prerelease builds.
They contain the support files of _NetBox Docker version_ `a.b.c`. They contain the support files of _NetBox Docker version_ `a.b.c`.
You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility. You must use _NetBox Docker version_ `a.b.c` to guarantee the compatibility.
These images are automatically built from the [`main` branch of NetBox][netbox-main]. These images are automatically built from the [`develop` branch of NetBox][netbox-develop].
For each of the above tag, there is an extra tag: For each of the above tag, there is an extra tag:
- `vX.Y.Z`, `vX.Y`: * `vX.Y.Z`, `vX.Y`:
This is the same version as `vX.Y.Z-a.b.c` (or `vX.Y-a.b.c`, respectively). This is the same version as `vX.Y.Z-a.b.c` (or `vX.Y-a.b.c`, respectively).
- `latest` It always points to the latest version of _NetBox Docker_.
* `latest`
This is the same version as `latest-a.b.c`. This is the same version as `latest-a.b.c`.
It always points to the latest version of _NetBox Docker_. It always points to the latest version of _NetBox Docker_.
- `snapshot` * `snapshot`
This is the same version as `snapshot-a.b.c`. This is the same version as `snapshot-a.b.c`.
It always points to the latest version of _NetBox Docker_. It always points to the latest version of _NetBox Docker_.
[netbox-releases]: https://github.com/netbox-community/netbox/releases [netbox-releases]: https://github.com/netbox-community/netbox/releases
[netbox-main]: https://github.com/netbox-community/netbox/tree/main [netbox-master]: https://github.com/netbox-community/netbox/tree/master
[netbox-develop]: https://github.com/netbox-community/netbox/tree/develop
## Documentation ## Documentation
@ -110,7 +109,7 @@ Feel free to correct errors, update outdated information or provide additional g
Feel free to ask questions in our [GitHub Community][netbox-community] Feel free to ask questions in our [GitHub Community][netbox-community]
or [join our Slack][netbox-docker-slack] and ask [in our channel `#netbox-docker`][netbox-docker-slack-channel], or [join our Slack][netbox-docker-slack] and ask [in our channel `#netbox-docker`][netbox-docker-slack-channel],
which is free to use and where there are almost always people online that can help you. which is free to use and where there are almost always people online that can help you in the Slack channel.
If you need help with using NetBox or developing for it or against it's API If you need help with using NetBox or developing for it or against it's API
you may find [the `#netbox` channel][netbox-slack-channel] on the same Slack instance very helpful. you may find [the `#netbox` channel][netbox-slack-channel] on the same Slack instance very helpful.
@ -121,16 +120,16 @@ you may find [the `#netbox` channel][netbox-slack-channel] on the same Slack ins
This project relies only on _Docker_ and _docker-compose_ meeting these requirements: This project relies only on _Docker_ and _docker-compose_ meeting these requirements:
- The _Docker version_ must be at least `20.10.10`. * The _Docker version_ must be at least `20.10.10`.
- The _containerd version_ must be at least `1.5.6`. * The _containerd version_ must be at least `1.5.6`.
- The _docker-compose version_ must be at least `1.28.0`. * The _docker-compose version_ must be at least `1.28.0`.
To check the version installed on your system run `docker --version` and `docker compose version`. To check the version installed on your system run `docker --version` and `docker compose version`.
## Updating ## Updating
Please read [the release notes][releases] carefully when updating to a new image version. Please read [the release notes][releases] carefully when updating to a new image version.
Note that the version of the NetBox Docker container image must stay in sync with the version of the Git repository. Note that the version of the NetBox Docker container image must stay in sync with the code.
If you update for the first time, be sure [to follow our _How To Update NetBox Docker_ guide in the wiki][netbox-docker-wiki-updating]. If you update for the first time, be sure [to follow our _How To Update NetBox Docker_ guide in the wiki][netbox-docker-wiki-updating].
@ -139,8 +138,7 @@ If you update for the first time, be sure [to follow our _How To Update NetBox D
## Rebuilding the Image ## Rebuilding the Image
`./build.sh` can be used to rebuild the container image. `./build.sh` can be used to rebuild the container image. See `./build.sh --help` for more information.
See `./build.sh --help` for more information or `./build-latest.sh` for an example.
For more details on custom builds [consult our wiki][netbox-docker-wiki-build]. For more details on custom builds [consult our wiki][netbox-docker-wiki-build].
@ -149,15 +147,13 @@ For more details on custom builds [consult our wiki][netbox-docker-wiki-build].
## Tests ## Tests
We have a test script. We have a test script.
It runs NetBox's own unit tests and ensures that NetBox starts: It runs NetBox's own unit tests and ensures that all initializers work:
```bash ```bash
IMAGE=docker.io/netboxcommunity/netbox:latest ./test.sh IMAGE=netboxcommunity/netbox:latest ./test.sh
``` ```
## Support ## Support
This repository is currently maintained by the community. This repository is currently maintained by the community.
The community is expected to help each other.
Please consider sponsoring the maintainers of this project. Please consider sponsoring the maintainers of this project.

View file

@ -1 +1 @@
3.4.2 2.9.0

View file

@ -1,5 +0,0 @@
---
paths:
.github/workflows/**/*.{yml,yaml}:
ignore:
- ".*ubuntu-24.04-arm.*"

View file

@ -39,8 +39,9 @@ SKIP_GIT If defined, git is not invoked and \${NETBOX_PATH} will not be alter
TAG The version part of the image tag. TAG The version part of the image tag.
${_GREEN}Default:${_CLEAR} ${_GREEN}Default:${_CLEAR}
When <branch>=main: snapshot When <branch>=master: latest
Else: same as <branch> When <branch>=develop: snapshot
Else: same as <branch>
IMAGE_NAMES The names used for the image including the registry IMAGE_NAMES The names used for the image including the registry
Used for tagging the image. Used for tagging the image.
@ -60,9 +61,9 @@ DOCKERFILE The name of Dockerfile to use.
${_GREEN}Default:${_CLEAR} Dockerfile ${_GREEN}Default:${_CLEAR} Dockerfile
DOCKER_FROM The base image to use. DOCKER_FROM The base image to use.
${_GREEN}Default:${_CLEAR} 'ubuntu:24.04' ${_GREEN}Default:${_CLEAR} 'ubuntu:23.10'
BUILDX_PLATFORM BUILDX_PLATFORMS
Specifies the platform(s) to build the image for. Specifies the platform(s) to build the image for.
${_CYAN}Example:${_CLEAR} 'linux/amd64,linux/arm64' ${_CYAN}Example:${_CLEAR} 'linux/amd64,linux/arm64'
${_GREEN}Default:${_CLEAR} 'linux/amd64' ${_GREEN}Default:${_CLEAR} 'linux/amd64'
@ -102,22 +103,23 @@ GH_ACTION If defined, special 'echo' statements are enabled that set the
- FINAL_DOCKER_TAG: The final value of the DOCKER_TAG env variable - FINAL_DOCKER_TAG: The final value of the DOCKER_TAG env variable
${_GREEN}Default:${_CLEAR} undefined ${_GREEN}Default:${_CLEAR} undefined
CHECK_ONLY Only checks if the build is needed and sets the GH Action output.
${_GREEN}Default:${_CLEAR} undefined
${_BOLD}Examples:${_CLEAR} ${_BOLD}Examples:${_CLEAR}
${0} main ${0} master
This will fetch the latest 'main' branch, build a Docker Image and tag it This will fetch the latest 'master' branch, build a Docker Image and tag it
'netboxcommunity/netbox:latest'.
${0} develop
This will fetch the latest 'develop' branch, build a Docker Image and tag it
'netboxcommunity/netbox:snapshot'. 'netboxcommunity/netbox:snapshot'.
${0} v4.2.0 ${0} v2.6.6
This will fetch the 'v4.2.0' tag, build a Docker Image and tag it This will fetch the 'v2.6.6' tag, build a Docker Image and tag it
'netboxcommunity/netbox:v4.2.0' and 'netboxcommunity/netbox:v4.2'. 'netboxcommunity/netbox:v2.6.6' and 'netboxcommunity/netbox:v2.6'.
${0} feature ${0} develop-2.7
This will fetch the 'feature' branch, build a Docker Image and tag it This will fetch the 'develop-2.7' branch, build a Docker Image and tag it
'netboxcommunity/netbox:feature'. 'netboxcommunity/netbox:develop-2.7'.
SRC_ORG=cimnine ${0} feature-x SRC_ORG=cimnine ${0} feature-x
This will fetch the 'feature-x' branch from https://github.com/cimnine/netbox.git, This will fetch the 'feature-x' branch from https://github.com/cimnine/netbox.git,
@ -217,13 +219,13 @@ fi
# Determining the value for DOCKER_FROM # Determining the value for DOCKER_FROM
### ###
if [ -z "$DOCKER_FROM" ]; then if [ -z "$DOCKER_FROM" ]; then
DOCKER_FROM="docker.io/ubuntu:24.04" DOCKER_FROM="docker.io/ubuntu:23.10"
fi fi
### ###
# Variables for labelling the docker image # Variables for labelling the docker image
### ###
BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%S+00:00')" BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M+00:00')"
if [ -d ".git" ] && [ -z "${SKIP_GIT}" ]; then if [ -d ".git" ] && [ -z "${SKIP_GIT}" ]; then
GIT_REF="$(git rev-parse HEAD)" GIT_REF="$(git rev-parse HEAD)"
@ -255,7 +257,10 @@ DOCKER_REGISTRY="${DOCKER_REGISTRY-docker.io}"
DOCKER_ORG="${DOCKER_ORG-netboxcommunity}" DOCKER_ORG="${DOCKER_ORG-netboxcommunity}"
DOCKER_REPO="${DOCKER_REPO-netbox}" DOCKER_REPO="${DOCKER_REPO-netbox}"
case "${NETBOX_BRANCH}" in case "${NETBOX_BRANCH}" in
main) master)
TAG="${TAG-latest}"
;;
develop)
TAG="${TAG-snapshot}" TAG="${TAG-snapshot}"
;; ;;
*) *)
@ -271,7 +276,7 @@ TARGET_DOCKER_TAG_PROJECT="${TARGET_DOCKER_TAG}-${PROJECT_VERSION}"
### ###
# composing the additional DOCKER_SHORT_TAG, # composing the additional DOCKER_SHORT_TAG,
# i.e. "v4.2.0" becomes "v4.2", # i.e. "v2.6.1" becomes "v2.6",
# which is only relevant for version tags # which is only relevant for version tags
# Also let "latest" follow the highest version # Also let "latest" follow the highest version
### ###
@ -350,11 +355,6 @@ else
fi fi
gh_echo "::endgroup::" gh_echo "::endgroup::"
if [ "${CHECK_ONLY}" = "true" ]; then
echo "Only check if build needed was requested. Exiting"
exit 0
fi
### ###
# Build the image # Build the image
### ###

View file

@ -64,21 +64,19 @@ if '*' not in ALLOWED_HOSTS and 'localhost' not in ALLOWED_HOSTS:
# PostgreSQL database configuration. See the Django documentation for a complete list of available parameters: # PostgreSQL database configuration. See the Django documentation for a complete list of available parameters:
# https://docs.djangoproject.com/en/stable/ref/settings/#databases # https://docs.djangoproject.com/en/stable/ref/settings/#databases
DATABASES = { DATABASE = {
'default': { 'NAME': environ.get('DB_NAME', 'netbox'), # Database name
'NAME': environ.get('DB_NAME', 'netbox'), # Database name 'USER': environ.get('DB_USER', ''), # PostgreSQL username
'USER': environ.get('DB_USER', ''), # PostgreSQL username 'PASSWORD': _read_secret('db_password', environ.get('DB_PASSWORD', '')),
'PASSWORD': _read_secret('db_password', environ.get('DB_PASSWORD', '')), # PostgreSQL password
# PostgreSQL password 'HOST': environ.get('DB_HOST', 'localhost'), # Database server
'HOST': environ.get('DB_HOST', 'localhost'), # Database server 'PORT': environ.get('DB_PORT', ''), # Database port (leave blank for default)
'PORT': environ.get('DB_PORT', ''), # Database port (leave blank for default) 'OPTIONS': {'sslmode': environ.get('DB_SSLMODE', 'prefer')},
'OPTIONS': {'sslmode': environ.get('DB_SSLMODE', 'prefer')}, # Database connection SSLMODE
# Database connection SSLMODE 'CONN_MAX_AGE': _environ_get_and_map('DB_CONN_MAX_AGE', '300', _AS_INT),
'CONN_MAX_AGE': _environ_get_and_map('DB_CONN_MAX_AGE', '300', _AS_INT), # Max database connection age
# Max database connection age 'DISABLE_SERVER_SIDE_CURSORS': _environ_get_and_map('DB_DISABLE_SERVER_SIDE_CURSORS', 'False', _AS_BOOL),
'DISABLE_SERVER_SIDE_CURSORS': _environ_get_and_map('DB_DISABLE_SERVER_SIDE_CURSORS', 'False', _AS_BOOL), # Disable the use of server-side cursors transaction pooling
# Disable the use of server-side cursors transaction pooling
}
} }
# Redis database settings. Redis is used for caching and for queuing background tasks such as webhook events. A separate # Redis database settings. Redis is used for caching and for queuing background tasks such as webhook events. A separate
@ -116,11 +114,6 @@ REDIS = {
# https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-SECRET_KEY # https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-SECRET_KEY
SECRET_KEY = _read_secret('secret_key', environ.get('SECRET_KEY', '')) SECRET_KEY = _read_secret('secret_key', environ.get('SECRET_KEY', ''))
API_TOKEN_PEPPERS = {}
if api_token_pepper := _read_secret('api_token_pepper_1', environ.get('API_TOKEN_PEPPER_1', '')):
API_TOKEN_PEPPERS.update({1: api_token_pepper})
######################### #########################
# # # #
@ -207,10 +200,10 @@ if 'CENSUS_REPORTING_ENABLED' in environ:
EXEMPT_VIEW_PERMISSIONS = _environ_get_and_map('EXEMPT_VIEW_PERMISSIONS', '', _AS_LIST) EXEMPT_VIEW_PERMISSIONS = _environ_get_and_map('EXEMPT_VIEW_PERMISSIONS', '', _AS_LIST)
# HTTP proxies NetBox should use when sending outbound HTTP requests (e.g. for webhooks). # HTTP proxies NetBox should use when sending outbound HTTP requests (e.g. for webhooks).
HTTP_PROXIES = { # HTTP_PROXIES = {
'http': environ.get('HTTP_PROXY', None), # 'http': 'http://10.10.1.10:3128',
'https': environ.get('HTTPS_PROXY', None), # 'https': 'http://10.10.1.10:1080',
} # }
# IP addresses recognized as internal to the system. The debugging toolbar will be available only to clients accessing # IP addresses recognized as internal to the system. The debugging toolbar will be available only to clients accessing
# NetBox from an internal IP. # NetBox from an internal IP.
@ -228,9 +221,9 @@ if 'GRAPHQL_ENABLED' in environ:
# authenticated to NetBox indefinitely. # authenticated to NetBox indefinitely.
LOGIN_PERSISTENCE = _environ_get_and_map('LOGIN_PERSISTENCE', 'False', _AS_BOOL) LOGIN_PERSISTENCE = _environ_get_and_map('LOGIN_PERSISTENCE', 'False', _AS_BOOL)
# When enabled, only authenticated users are permitted to access any part of NetBox. # Setting this to True will permit only authenticated users to access any part of NetBox. By default, anonymous users
# Disabling this will allow unauthenticated users to access most areas of NetBox (but not make any changes). # are permitted to access most data in NetBox (excluding secrets) but not make any changes.
LOGIN_REQUIRED = _environ_get_and_map('LOGIN_REQUIRED', 'True', _AS_BOOL) LOGIN_REQUIRED = _environ_get_and_map('LOGIN_REQUIRED', 'False', _AS_BOOL)
# The length of time (in seconds) for which a user will remain logged into the web UI before being prompted to # The length of time (in seconds) for which a user will remain logged into the web UI before being prompted to
# re-authenticate. (Default: 1209600 [14 days]) # re-authenticate. (Default: 1209600 [14 days])
@ -293,23 +286,12 @@ if 'RACK_ELEVATION_DEFAULT_UNIT_WIDTH' in environ:
RACK_ELEVATION_DEFAULT_UNIT_WIDTH = _environ_get_and_map('RACK_ELEVATION_DEFAULT_UNIT_WIDTH', None, _AS_INT) RACK_ELEVATION_DEFAULT_UNIT_WIDTH = _environ_get_and_map('RACK_ELEVATION_DEFAULT_UNIT_WIDTH', None, _AS_INT)
# Remote authentication support # Remote authentication support
REMOTE_AUTH_AUTO_CREATE_GROUPS = _environ_get_and_map('REMOTE_AUTH_AUTO_CREATE_GROUPS', 'False', _AS_BOOL)
REMOTE_AUTH_AUTO_CREATE_USER = _environ_get_and_map('REMOTE_AUTH_AUTO_CREATE_USER', 'False', _AS_BOOL)
REMOTE_AUTH_BACKEND = _environ_get_and_map('REMOTE_AUTH_BACKEND', 'netbox.authentication.RemoteUserBackend', _AS_LIST)
REMOTE_AUTH_DEFAULT_GROUPS = _environ_get_and_map('REMOTE_AUTH_DEFAULT_GROUPS', '', _AS_LIST)
# REMOTE_AUTH_DEFAULT_PERMISSIONS = {} # dicts can't be configured via environment variables. See extra.py instead.
REMOTE_AUTH_ENABLED = _environ_get_and_map('REMOTE_AUTH_ENABLED', 'False', _AS_BOOL) REMOTE_AUTH_ENABLED = _environ_get_and_map('REMOTE_AUTH_ENABLED', 'False', _AS_BOOL)
REMOTE_AUTH_GROUP_HEADER = _environ_get_and_map('REMOTE_AUTH_GROUP_HEADER', 'HTTP_REMOTE_USER_GROUP') REMOTE_AUTH_BACKEND = _environ_get_and_map('REMOTE_AUTH_BACKEND', 'netbox.authentication.RemoteUserBackend', _AS_LIST)
REMOTE_AUTH_GROUP_SEPARATOR = _environ_get_and_map('REMOTE_AUTH_GROUP_SEPARATOR', '|')
REMOTE_AUTH_GROUP_SYNC_ENABLED = _environ_get_and_map('REMOTE_AUTH_GROUP_SYNC_ENABLED', 'False', _AS_BOOL)
REMOTE_AUTH_HEADER = environ.get('REMOTE_AUTH_HEADER', 'HTTP_REMOTE_USER') REMOTE_AUTH_HEADER = environ.get('REMOTE_AUTH_HEADER', 'HTTP_REMOTE_USER')
REMOTE_AUTH_USER_EMAIL = environ.get('REMOTE_AUTH_USER_EMAIL', 'HTTP_REMOTE_USER_EMAIL') REMOTE_AUTH_AUTO_CREATE_USER = _environ_get_and_map('REMOTE_AUTH_AUTO_CREATE_USER', 'False', _AS_BOOL)
REMOTE_AUTH_USER_FIRST_NAME = environ.get('REMOTE_AUTH_USER_FIRST_NAME', 'HTTP_REMOTE_USER_FIRST_NAME') REMOTE_AUTH_DEFAULT_GROUPS = _environ_get_and_map('REMOTE_AUTH_DEFAULT_GROUPS', '', _AS_LIST)
REMOTE_AUTH_USER_LAST_NAME = environ.get('REMOTE_AUTH_USER_LAST_NAME', 'HTTP_REMOTE_USER_LAST_NAME') # REMOTE_AUTH_DEFAULT_PERMISSIONS = {}
REMOTE_AUTH_SUPERUSER_GROUPS = _environ_get_and_map('REMOTE_AUTH_SUPERUSER_GROUPS', '', _AS_LIST)
REMOTE_AUTH_SUPERUSERS = _environ_get_and_map('REMOTE_AUTH_SUPERUSERS', '', _AS_LIST)
REMOTE_AUTH_STAFF_GROUPS = _environ_get_and_map('REMOTE_AUTH_STAFF_GROUPS', '', _AS_LIST)
REMOTE_AUTH_STAFF_USERS = _environ_get_and_map('REMOTE_AUTH_STAFF_USERS', '', _AS_LIST)
# This repository is used to check whether there is a new release of NetBox available. Set to None to disable the # This repository is used to check whether there is a new release of NetBox available. Set to None to disable the
# version check or use the URL below to check for release in the official NetBox repository. # version check or use the URL below to check for release in the official NetBox repository.
@ -355,5 +337,3 @@ SESSION_FILE_PATH = environ.get('SESSION_FILE_PATH', environ.get('SESSIONS_ROOT'
# Time zone (default: UTC) # Time zone (default: UTC)
TIME_ZONE = environ.get('TIME_ZONE', 'UTC') TIME_ZONE = environ.get('TIME_ZONE', 'UTC')
# If true disables miscellaneous functionality which depends on access to the Internet.
ISOLATED_DEPLOYMENT = _environ_get_and_map('ISOLATED_DEPLOYMENT', 'False', _AS_BOOL)

View file

@ -109,6 +109,3 @@ AUTH_LDAP_USER_ATTR_MAP = {
"last_name": environ.get('AUTH_LDAP_ATTR_LASTNAME', 'sn'), "last_name": environ.get('AUTH_LDAP_ATTR_LASTNAME', 'sn'),
"email": environ.get('AUTH_LDAP_ATTR_MAIL', 'mail') "email": environ.get('AUTH_LDAP_ATTR_MAIL', 'mail')
} }
# Update user object with the latest values from the LDAP directory every time the user logs in.
AUTH_LDAP_ALWAYS_UPDATE_USER = environ.get('AUTH_LDAP_ALWAYS_UPDATE_USER', 'True').lower() == 'true'

View file

@ -1,6 +1,6 @@
services: services:
netbox: &netbox netbox: &netbox
image: ${IMAGE-docker.io/netboxcommunity/netbox:latest} image: ${IMAGE-netboxcommunity/netbox:latest}
depends_on: depends_on:
postgres: postgres:
condition: service_healthy condition: service_healthy
@ -9,53 +9,57 @@ services:
redis-cache: redis-cache:
condition: service_healthy condition: service_healthy
env_file: env/netbox.env env_file: env/netbox.env
user: "unit:root" user: 'unit:root'
volumes: volumes:
- ./test-configuration/test_config.py:/etc/netbox/config/test_config.py:z,ro - ./test-configuration/test_config.py:/etc/netbox/config/test_config.py:z,ro
healthcheck: healthcheck:
test: curl -f http://localhost:8080/login/ || exit 1
start_period: ${NETBOX_START_PERIOD-120s} start_period: ${NETBOX_START_PERIOD-120s}
timeout: 3s timeout: 3s
interval: 15s interval: 15s
test: "curl -f http://localhost:8080/api/ || exit 1"
netbox-worker: netbox-worker:
<<: *netbox <<: *netbox
command: command:
- /opt/netbox/venv/bin/python - /opt/netbox/venv/bin/python
- /opt/netbox/netbox/manage.py - /opt/netbox/netbox/manage.py
- rqworker - rqworker
healthcheck: healthcheck:
test: ps -aux | grep -v grep | grep -q rqworker || exit 1
start_period: 40s start_period: 40s
timeout: 3s timeout: 3s
interval: 15s interval: 15s
test: "ps -aux | grep -v grep | grep -q rqworker || exit 1"
netbox-housekeeping:
<<: *netbox
command:
- /opt/netbox/housekeeping.sh
healthcheck:
start_period: 40s
timeout: 3s
interval: 15s
test: "ps -aux | grep -v grep | grep -q housekeeping || exit 1"
postgres: postgres:
image: docker.io/postgres:17-alpine image: postgres:16-alpine
env_file: env/postgres.env env_file: env/postgres.env
healthcheck: healthcheck:
test: pg_isready -q -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER ## $$ because of docker-compose test: "pg_isready -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER" ## $$ because of docker-compose
start_period: 20s interval: 10s
interval: 1s
timeout: 5s timeout: 5s
retries: 5 retries: 5
redis: &redis redis: &redis
image: docker.io/valkey/valkey:8.1-alpine image: redis:7-alpine
command: command:
- sh - sh
- -c # this is to evaluate the $REDIS_PASSWORD from the env - -c # this is to evaluate the $REDIS_PASSWORD from the env
- valkey-server --save "" --appendonly no --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose - redis-server --appendonly yes --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose
env_file: env/redis.env env_file: env/redis.env
healthcheck: healthcheck:
test: '[ $$(valkey-cli --pass "$${REDIS_PASSWORD}" ping) = ''PONG'' ]' start_period: 20s
start_period: 5s
timeout: 3s timeout: 3s
interval: 1s interval: 15s
retries: 5 test: "timeout 2 redis-cli ping"
redis-cache: redis-cache:
<<: *redis <<: *redis
env_file: env/redis-cache.env env_file: env/redis-cache.env
volumes: volumes:
netbox-media-files: netbox-media-files:
driver: local driver: local

View file

@ -1,76 +1,75 @@
services: services:
netbox: &netbox netbox: &netbox
image: docker.io/netboxcommunity/netbox:${VERSION-v4.4-3.4.1} image: docker.io/netboxcommunity/netbox:${VERSION-v4.0-2.9.0}
depends_on: depends_on:
- postgres - postgres
- redis - redis
- redis-cache - redis-cache
env_file: env/netbox.env env_file: env/netbox.env
user: "unit:root" user: 'unit:root'
healthcheck: healthcheck:
test: curl -f http://localhost:8080/login/ || exit 1 start_period: 60s
start_period: 90s
timeout: 3s timeout: 3s
interval: 15s interval: 15s
test: "curl -f http://localhost:8080/api/ || exit 1"
volumes: volumes:
- ./configuration:/etc/netbox/config:z,ro - ./configuration:/etc/netbox/config:z,ro
- netbox-media-files:/opt/netbox/netbox/media:rw - netbox-media-files:/opt/netbox/netbox/media:rw
- netbox-reports-files:/opt/netbox/netbox/reports:rw - netbox-reports-files:/opt/netbox/netbox/reports:rw
- netbox-scripts-files:/opt/netbox/netbox/scripts:rw - netbox-scripts-files:/opt/netbox/netbox/scripts:rw
netbox-worker: netbox-worker:
<<: *netbox <<: *netbox
depends_on: depends_on:
netbox: netbox:
condition: service_healthy condition: service_healthy
command: command:
- /opt/netbox/venv/bin/python - /opt/netbox/venv/bin/python
- /opt/netbox/netbox/manage.py - /opt/netbox/netbox/manage.py
- rqworker - rqworker
healthcheck: healthcheck:
test: ps -aux | grep -v grep | grep -q rqworker || exit 1
start_period: 20s start_period: 20s
timeout: 3s timeout: 3s
interval: 15s interval: 15s
test: "ps -aux | grep -v grep | grep -q rqworker || exit 1"
netbox-housekeeping:
<<: *netbox
depends_on:
netbox:
condition: service_healthy
command:
- /opt/netbox/housekeeping.sh
healthcheck:
start_period: 20s
timeout: 3s
interval: 15s
test: "ps -aux | grep -v grep | grep -q housekeeping || exit 1"
# postgres # postgres
postgres: postgres:
image: docker.io/postgres:17-alpine image: docker.io/postgres:16-alpine
healthcheck:
test: pg_isready -q -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER
start_period: 20s
timeout: 30s
interval: 10s
retries: 5
env_file: env/postgres.env env_file: env/postgres.env
volumes: volumes:
- netbox-postgres-data:/var/lib/postgresql/data - netbox-postgres-data:/var/lib/postgresql/data
# redis # redis
redis: redis:
image: docker.io/valkey/valkey:8.1-alpine image: docker.io/redis:7-alpine
command: command:
- sh - sh
- -c # this is to evaluate the $REDIS_PASSWORD from the env - -c # this is to evaluate the $REDIS_PASSWORD from the env
- valkey-server --appendonly yes --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose - redis-server --appendonly yes --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose
healthcheck: &redis-healthcheck
test: '[ $$(valkey-cli --pass "$${REDIS_PASSWORD}" ping) = ''PONG'' ]'
start_period: 5s
timeout: 3s
interval: 1s
retries: 5
env_file: env/redis.env env_file: env/redis.env
volumes: volumes:
- netbox-redis-data:/data - netbox-redis-data:/data
redis-cache: redis-cache:
image: docker.io/valkey/valkey:8.1-alpine image: docker.io/redis:7-alpine
command: command:
- sh - sh
- -c # this is to evaluate the $REDIS_PASSWORD from the env - -c # this is to evaluate the $REDIS_PASSWORD from the env
- valkey-server --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose - redis-server --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose
healthcheck: *redis-healthcheck
env_file: env/redis-cache.env env_file: env/redis-cache.env
volumes: volumes:
- netbox-redis-cache-data:/data - netbox-redis-cache-data:/data
volumes: volumes:
netbox-media-files: netbox-media-files:

8
docker/housekeeping.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/bash
SLEEP_SECONDS=${HOUSEKEEPING_INTERVAL:=86400}
echo "Interval set to ${SLEEP_SECONDS} seconds"
while true; do
date
/opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py housekeeping
sleep "${SLEEP_SECONDS}s"
done

View file

@ -36,7 +36,7 @@ load_configuration() {
http://localhost/config http://localhost/config
) )
if [ "$RESP_CODE" != "200" ]; then if [ "$RESP_CODE" != "200" ]; then
echo "⚠️ Could not load Unit configuration" echo "⚠️ Could no load Unit configuration"
kill "$(cat /opt/unit/unit.pid)" kill "$(cat /opt/unit/unit.pid)"
return 1 return 1
fi fi

View file

@ -1,36 +1,16 @@
{ {
"listeners": { "listeners": {
"0.0.0.0:8080": { "0.0.0.0:8080": {
"pass": "routes/main", "pass": "routes/main"
"forwarded": {
"client_ip": "X-Forwarded-For",
"protocol": "X-Forwarded-Proto",
"source": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
}
},
"0.0.0.0:8081": {
"pass": "routes/status",
"forwarded": {
"client_ip": "X-Forwarded-For",
"protocol": "X-Forwarded-Proto",
"source": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
}
}, },
"[::]:8080": { "[::]:8080": {
"pass": "routes/main", "pass": "routes/main"
"forwarded": { },
"client_ip": "X-Forwarded-For", "0.0.0.0:8081": {
"protocol": "X-Forwarded-Proto", "pass": "routes/status"
"source": ["fc00::/7", "fe80::/10"]
}
}, },
"[::]:8081": { "[::]:8081": {
"pass": "routes/status", "pass": "routes/status"
"forwarded": {
"client_ip": "X-Forwarded-For",
"protocol": "X-Forwarded-Proto",
"source": ["fc00::/7", "fe80::/10"]
}
} }
}, },
"routes": { "routes": {
@ -73,10 +53,5 @@
} }
} }
}, },
"access_log": "/dev/stdout", "access_log": "/dev/stdout"
"settings": {
"http": {
"max_body_size": 104857600
}
}
} }

View file

@ -1 +0,0 @@
deb [signed-by=/usr/share/keyrings/nginx-keyring.gpg] http://packages.nginx.org/unit/ubuntu/ noble unit

2
env/netbox.env vendored
View file

@ -1,4 +1,3 @@
API_TOKEN_PEPPER_1=Qy+F=OTeGskWQ(wTMgjc+NPPlz6YwFXY=KHIIg=wpYXT&e(6u8
CORS_ORIGIN_ALLOW_ALL=True CORS_ORIGIN_ALLOW_ALL=True
DB_HOST=postgres DB_HOST=postgres
DB_NAME=netbox DB_NAME=netbox
@ -16,6 +15,7 @@ EMAIL_USERNAME=netbox
EMAIL_USE_SSL=false EMAIL_USE_SSL=false
EMAIL_USE_TLS=false EMAIL_USE_TLS=false
GRAPHQL_ENABLED=true GRAPHQL_ENABLED=true
HOUSEKEEPING_INTERVAL=86400
MEDIA_ROOT=/opt/netbox/netbox/media MEDIA_ROOT=/opt/netbox/netbox/media
METRICS_ENABLED=false METRICS_ENABLED=false
REDIS_CACHE_DATABASE=1 REDIS_CACHE_DATABASE=1

View file

@ -1,6 +1,5 @@
django-auth-ldap==5.2.0 django-auth-ldap==4.8.0
dulwich==0.24.8 django-storages[azure,boto3,dropbox,google,libcloud,sftp]==1.14.3
python3-saml==1.16.0 dulwich==0.22.1
--no-binary lxml python3-saml==1.16.0 --no-binary lxml
--no-binary xmlsec sentry-sdk==2.1.1
sentry-sdk[django]==2.43.0

View file

@ -3,14 +3,4 @@ LOGGING = {
'disable_existing_loggers': True 'disable_existing_loggers': True
} }
PLUGINS = [
'netbox.tests.dummy_plugin',
]
ALLOW_TOKEN_RETRIEVAL = True
DEFAULT_PERMISSIONS = {} DEFAULT_PERMISSIONS = {}
API_TOKEN_PEPPERS = {
1: 'TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE',
}

View file

@ -84,7 +84,7 @@ test_netbox_web() {
--retry 5 \ --retry 5 \
--retry-delay 0 \ --retry-delay 0 \
--retry-max-time 40 \ --retry-max-time 40 \
http://127.0.0.1:8000/login/ http://127.0.0.1:8000/
) )
if [ "$RESP_CODE" == "200" ]; then if [ "$RESP_CODE" == "200" ]; then
echo "Webservice running" echo "Webservice running"