diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index c4f22d6..a4833e1 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -23,13 +23,13 @@ jobs: packages: read statuses: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: # Full git history is needed to get a proper # list of changed files within `super-linter` fetch-depth: 0 - name: Lint Code Base - uses: super-linter/super-linter@v7 + uses: super-linter/super-linter@v8 env: DEFAULT_BRANCH: develop GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -40,6 +40,8 @@ jobs: VALIDATE_DOCKERFILE: false VALIDATE_GITLEAKS: false VALIDATE_JSCPD: false + VALIDATE_TRIVY: false + VALIDATE_GITHUB_ACTIONS_ZIZMOR: false FILTER_REGEX_EXCLUDE: (.*/)?(LICENSE|configuration/.*) EDITORCONFIG_FILE_NAME: .editorconfig-checker.json DOCKERFILE_HADOLINT_FILE_NAME: .hadolint.yaml @@ -70,7 +72,7 @@ jobs: steps: - id: git-checkout name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - id: buildx-setup name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 71b718c..2d83729 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,7 +32,7 @@ jobs: steps: - id: source-checkout name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: ref: ${{ matrix.build.branch }} - id: set-netbox-docker-version diff --git a/Dockerfile b/Dockerfile index ffb3682..452b44c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG FROM FROM ${FROM} AS builder -COPY --from=ghcr.io/astral-sh/uv:0.7 /uv /usr/local/bin/ +COPY --from=ghcr.io/astral-sh/uv:0.8 /uv /usr/local/bin/ RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get update -qq \ && apt-get upgrade \ @@ -79,7 +79,6 @@ COPY ${NETBOX_PATH} /opt/netbox 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/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 configuration/ /etc/netbox/config/ COPY docker/nginx-unit.json /etc/unit/ @@ -89,7 +88,7 @@ WORKDIR /opt/netbox/netbox # Must set permissions for '/opt/netbox/netbox/media' directory # to g+w so that pictures can be uploaded to netbox. -RUN mkdir -p static /opt/unit/state/ /opt/unit/tmp/ \ +RUN mkdir -p static media /opt/unit/state/ /opt/unit/tmp/ \ && chown -R unit:root /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 \ diff --git a/VERSION b/VERSION index 0fa4ae4..fbcbf73 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.3.0 \ No newline at end of file +3.4.0 \ No newline at end of file diff --git a/build.sh b/build.sh index a7ac817..c12fbe4 100755 --- a/build.sh +++ b/build.sh @@ -62,7 +62,7 @@ DOCKERFILE The name of Dockerfile to use. DOCKER_FROM The base image to use. ${_GREEN}Default:${_CLEAR} 'ubuntu:24.04' -BUILDX_PLATFORMS +BUILDX_PLATFORM Specifies the platform(s) to build the image for. ${_CYAN}Example:${_CLEAR} 'linux/amd64,linux/arm64' ${_GREEN}Default:${_CLEAR} 'linux/amd64' diff --git a/configuration/configuration.py b/configuration/configuration.py index 577c3f4..6125e2b 100644 --- a/configuration/configuration.py +++ b/configuration/configuration.py @@ -64,19 +64,21 @@ 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: # https://docs.djangoproject.com/en/stable/ref/settings/#databases -DATABASE = { - 'NAME': environ.get('DB_NAME', 'netbox'), # Database name - 'USER': environ.get('DB_USER', ''), # PostgreSQL username - 'PASSWORD': _read_secret('db_password', environ.get('DB_PASSWORD', '')), - # PostgreSQL password - 'HOST': environ.get('DB_HOST', 'localhost'), # Database server - 'PORT': environ.get('DB_PORT', ''), # Database port (leave blank for default) - 'OPTIONS': {'sslmode': environ.get('DB_SSLMODE', 'prefer')}, - # Database connection SSLMODE - 'CONN_MAX_AGE': _environ_get_and_map('DB_CONN_MAX_AGE', '300', _AS_INT), - # Max database connection age - '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 +DATABASES = { + 'default': { + 'NAME': environ.get('DB_NAME', 'netbox'), # Database name + 'USER': environ.get('DB_USER', ''), # PostgreSQL username + 'PASSWORD': _read_secret('db_password', environ.get('DB_PASSWORD', '')), + # PostgreSQL password + 'HOST': environ.get('DB_HOST', 'localhost'), # Database server + 'PORT': environ.get('DB_PORT', ''), # Database port (leave blank for default) + 'OPTIONS': {'sslmode': environ.get('DB_SSLMODE', 'prefer')}, + # Database connection SSLMODE + 'CONN_MAX_AGE': _environ_get_and_map('DB_CONN_MAX_AGE', '300', _AS_INT), + # Max database connection age + '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 + } } # Redis database settings. Redis is used for caching and for queuing background tasks such as webhook events. A separate diff --git a/configuration/ldap/ldap_config.py b/configuration/ldap/ldap_config.py index 82fad72..59e6aea 100644 --- a/configuration/ldap/ldap_config.py +++ b/configuration/ldap/ldap_config.py @@ -109,3 +109,6 @@ AUTH_LDAP_USER_ATTR_MAP = { "last_name": environ.get('AUTH_LDAP_ATTR_LASTNAME', 'sn'), "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' diff --git a/docker-compose.test.yml b/docker-compose.test.yml index bbc139c..9388022 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -28,15 +28,6 @@ services: start_period: 40s timeout: 3s interval: 15s - netbox-housekeeping: - <<: *netbox - command: - - /opt/netbox/housekeeping.sh - healthcheck: - test: ps -aux | grep -v grep | grep -q housekeeping || exit 1 - start_period: 40s - timeout: 3s - interval: 15s postgres: image: docker.io/postgres:17-alpine diff --git a/docker-compose.yml b/docker-compose.yml index 3ba2fd4..a5e78d4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: netbox: &netbox - image: docker.io/netboxcommunity/netbox:${VERSION-v4.3-3.3.0} + image: docker.io/netboxcommunity/netbox:${VERSION-v4.4-3.4.0} depends_on: - postgres - redis @@ -31,18 +31,6 @@ services: start_period: 20s timeout: 3s interval: 15s - netbox-housekeeping: - <<: *netbox - depends_on: - netbox: - condition: service_healthy - command: - - /opt/netbox/housekeeping.sh - healthcheck: - test: ps -aux | grep -v grep | grep -q housekeeping || exit 1 - start_period: 20s - timeout: 3s - interval: 15s # postgres postgres: diff --git a/docker/housekeeping.sh b/docker/housekeeping.sh deleted file mode 100755 index 47a4a3d..0000000 --- a/docker/housekeeping.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/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 diff --git a/env/netbox.env b/env/netbox.env index ca22549..c89844f 100644 --- a/env/netbox.env +++ b/env/netbox.env @@ -15,7 +15,6 @@ EMAIL_USERNAME=netbox EMAIL_USE_SSL=false EMAIL_USE_TLS=false GRAPHQL_ENABLED=true -HOUSEKEEPING_INTERVAL=86400 MEDIA_ROOT=/opt/netbox/netbox/media METRICS_ENABLED=false REDIS_CACHE_DATABASE=1 diff --git a/requirements-container.txt b/requirements-container.txt index b1a8304..0867083 100644 --- a/requirements-container.txt +++ b/requirements-container.txt @@ -1,6 +1,6 @@ -django-auth-ldap==5.1.0 -dulwich==0.22.8 +django-auth-ldap==5.2.0 +dulwich==0.24.1 python3-saml==1.16.0 --no-binary lxml --no-binary xmlsec -sentry-sdk[django]==2.27.0 +sentry-sdk[django]==2.35.2