Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
3286faa94c | |||
788cd03a35 | |||
0911c2251d | |||
c698496e36 | |||
23a262d72f | |||
5273e17d89 | |||
e44f0398fb | |||
7c2e012523 | |||
5a29364bca | |||
5d5b01f6b5 | |||
5d6e733bce | |||
87a9808bc2 | |||
7bf9e1af5a | |||
1e588431e2 | |||
41fd4e5d67 | |||
17f1bb0af0 | |||
9cc58918ab | |||
831867499b | |||
d5dde45bec | |||
6576c18a9c | |||
efd6e6a3c2 | |||
47a7eee16a | |||
5eac65b8f6 | |||
2ba441124e | |||
f2d070fc49 |
7
.github/workflows/push.yml
vendored
7
.github/workflows/push.yml
vendored
@ -23,7 +23,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.9'
|
python-version: '3.9'
|
||||||
- name: Lint Code Base
|
- name: Lint Code Base
|
||||||
uses: github/super-linter@v4
|
uses: github/super-linter@v5
|
||||||
env:
|
env:
|
||||||
DEFAULT_BRANCH: develop
|
DEFAULT_BRANCH: develop
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@ -75,6 +75,11 @@ jobs:
|
|||||||
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 }}
|
||||||
|
- id: arm-time-limit
|
||||||
|
name: Set Netbox container start_period higher on ARM64
|
||||||
|
if: matrix.platform == 'linux/arm64'
|
||||||
|
run: |
|
||||||
|
echo "NETBOX_START_PERIOD=240s" >>"${GITHUB_ENV}"
|
||||||
- id: docker-test
|
- id: docker-test
|
||||||
name: Test the image
|
name: Test the image
|
||||||
run: IMAGE="${FINAL_DOCKER_TAG}" ./test.sh
|
run: IMAGE="${FINAL_DOCKER_TAG}" ./test.sh
|
||||||
|
@ -14,7 +14,6 @@ RUN export DEBIAN_FRONTEND=noninteractive \
|
|||||||
libsasl2-dev \
|
libsasl2-dev \
|
||||||
libssl-dev \
|
libssl-dev \
|
||||||
libxml2-dev \
|
libxml2-dev \
|
||||||
libxml2-dev \
|
|
||||||
libxmlsec1 \
|
libxmlsec1 \
|
||||||
libxmlsec1-dev \
|
libxmlsec1-dev \
|
||||||
libxmlsec1-openssl \
|
libxmlsec1-openssl \
|
||||||
@ -31,7 +30,11 @@ RUN export DEBIAN_FRONTEND=noninteractive \
|
|||||||
|
|
||||||
ARG NETBOX_PATH
|
ARG NETBOX_PATH
|
||||||
COPY ${NETBOX_PATH}/requirements.txt requirements-container.txt /
|
COPY ${NETBOX_PATH}/requirements.txt requirements-container.txt /
|
||||||
RUN sed -i -e '/psycopg2-binary/d' requirements.txt && \
|
RUN sed -i -e '/psycopg2-binary/d' /requirements.txt && \
|
||||||
|
# We need 'social-auth-core[all]' in the Docker image. But if we put it in our own requirements-container.txt
|
||||||
|
# we have potential version conflicts and the build will fail.
|
||||||
|
# That's why we just replace it in the original requirements.txt.
|
||||||
|
sed -i -e 's/social-auth-core\[openidconnect\]/social-auth-core\[all\]/g' /requirements.txt && \
|
||||||
/opt/netbox/venv/bin/pip install \
|
/opt/netbox/venv/bin/pip install \
|
||||||
-r /requirements.txt \
|
-r /requirements.txt \
|
||||||
-r /requirements-container.txt
|
-r /requirements-container.txt
|
||||||
@ -74,6 +77,8 @@ 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
|
||||||
|
6
docker-compose.test.override.yml
Normal file
6
docker-compose.test.override.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
version: '3.4'
|
||||||
|
services:
|
||||||
|
netbox:
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:8000:8080"
|
||||||
|
|
@ -1,43 +1,65 @@
|
|||||||
version: '3.4'
|
version: '3.4'
|
||||||
services:
|
services:
|
||||||
netbox:
|
netbox: &netbox
|
||||||
image: ${IMAGE-netboxcommunity/netbox:latest}
|
image: ${IMAGE-netboxcommunity/netbox:latest}
|
||||||
depends_on:
|
depends_on:
|
||||||
postgres:
|
postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
redis:
|
redis:
|
||||||
condition: service_started
|
condition: service_healthy
|
||||||
redis-cache:
|
redis-cache:
|
||||||
condition: service_started
|
condition: service_healthy
|
||||||
env_file: env/netbox.env
|
env_file: env/netbox.env
|
||||||
user: 'unit:root'
|
user: 'unit:root'
|
||||||
volumes:
|
volumes:
|
||||||
- ./configuration:/etc/netbox/config:z,ro
|
|
||||||
- ./test-configuration/logging.py:/etc/netbox/config/logging.py:z,ro
|
- ./test-configuration/logging.py:/etc/netbox/config/logging.py:z,ro
|
||||||
- ./reports:/etc/netbox/reports:z,ro
|
healthcheck:
|
||||||
- ./scripts:/etc/netbox/scripts:z,ro
|
start_period: ${NETBOX_START_PERIOD-120s}
|
||||||
- netbox-media-files:/opt/netbox/netbox/media:z
|
timeout: 3s
|
||||||
|
interval: 15s
|
||||||
|
test: "curl -f http://localhost:8080/api/ || exit 1"
|
||||||
|
netbox-worker:
|
||||||
|
<<: *netbox
|
||||||
|
command:
|
||||||
|
- /opt/netbox/venv/bin/python
|
||||||
|
- /opt/netbox/netbox/manage.py
|
||||||
|
- rqworker
|
||||||
|
healthcheck:
|
||||||
|
start_period: 40s
|
||||||
|
timeout: 3s
|
||||||
|
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: postgres:15-alpine
|
image: postgres:15-alpine
|
||||||
env_file: env/postgres.env
|
env_file: env/postgres.env
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "pg_isready"]
|
test: "pg_isready -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER" ## $$ because of docker-compose
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
redis:
|
redis: &redis
|
||||||
image: redis:7-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
|
||||||
- redis-server --appendonly yes --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:
|
||||||
|
start_period: 20s
|
||||||
|
timeout: 3s
|
||||||
|
interval: 15s
|
||||||
|
test: "timeout 2 redis-cli ping"
|
||||||
redis-cache:
|
redis-cache:
|
||||||
image: redis:7-alpine
|
<<: *redis
|
||||||
command:
|
|
||||||
- sh
|
|
||||||
- -c # this is to evaluate the $REDIS_PASSWORD from the env
|
|
||||||
- redis-server --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose
|
|
||||||
env_file: env/redis-cache.env
|
env_file: env/redis-cache.env
|
||||||
volumes:
|
volumes:
|
||||||
netbox-media-files:
|
netbox-media-files:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
version: '3.4'
|
version: '3.4'
|
||||||
services:
|
services:
|
||||||
netbox: &netbox
|
netbox: &netbox
|
||||||
image: docker.io/netboxcommunity/netbox:${VERSION-v3.4-2.5.1}
|
image: docker.io/netboxcommunity/netbox:${VERSION-v3.4-2.5.3}
|
||||||
depends_on:
|
depends_on:
|
||||||
- postgres
|
- postgres
|
||||||
- redis
|
- redis
|
||||||
@ -63,7 +63,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- netbox-redis-data:/data
|
- netbox-redis-data:/data
|
||||||
redis-cache:
|
redis-cache:
|
||||||
image: redis:7-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
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
django-auth-ldap==4.1.0
|
django-auth-ldap==4.2.0
|
||||||
django-storages[azure,boto3,dropbox,google,libcloud,sftp]==1.13.2
|
django-storages[azure,boto3,dropbox,google,libcloud,sftp]==1.13.2
|
||||||
napalm==4.0.0
|
napalm==4.0.0
|
||||||
psycopg2==2.9.5
|
psycopg2==2.9.6
|
||||||
python3-saml==1.15.0
|
python3-saml==1.15.0
|
||||||
social-auth-core[all]==4.3.0
|
|
||||||
|
49
test.sh
49
test.sh
@ -14,6 +14,8 @@
|
|||||||
# exit when a command exits with an exit code != 0
|
# exit when a command exits with an exit code != 0
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
source ./build-functions/gh-functions.sh
|
||||||
|
|
||||||
# IMAGE is used by `docker-compose.yml` do determine the tag
|
# IMAGE is used by `docker-compose.yml` do determine the tag
|
||||||
# of the Docker Image that is to be used
|
# of the Docker Image that is to be used
|
||||||
if [ "${1}x" != "x" ]; then
|
if [ "${1}x" != "x" ]; then
|
||||||
@ -35,29 +37,72 @@ if [ -z "${IMAGE}" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# The docker compose command to use
|
# The docker compose command to use
|
||||||
doco="docker compose --file docker-compose.test.yml --project-name netbox_docker_test"
|
doco="docker compose --file docker-compose.test.yml --file docker-compose.test.override.yml --project-name netbox_docker_test"
|
||||||
|
|
||||||
test_setup() {
|
test_setup() {
|
||||||
|
gh_echo "::group:: Test setup"
|
||||||
echo "🏗 Setup up test environment"
|
echo "🏗 Setup up test environment"
|
||||||
$doco up --detach --quiet-pull --wait --force-recreate --renew-anon-volumes --no-start
|
$doco up --detach --quiet-pull --wait --force-recreate --renew-anon-volumes --no-start
|
||||||
$doco start postgres
|
$doco start postgres
|
||||||
$doco start redis
|
$doco start redis
|
||||||
$doco start redis-cache
|
$doco start redis-cache
|
||||||
|
gh_echo "::endgroup::"
|
||||||
}
|
}
|
||||||
|
|
||||||
test_netbox_unit_tests() {
|
test_netbox_unit_tests() {
|
||||||
|
gh_echo "::group:: Netbox unit tests"
|
||||||
echo "⏱ Running NetBox Unit Tests"
|
echo "⏱ Running NetBox Unit Tests"
|
||||||
$doco run --rm netbox /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py test
|
$doco run --rm netbox /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py test
|
||||||
|
gh_echo "::endgroup::"
|
||||||
}
|
}
|
||||||
|
|
||||||
test_compose_db_setup() {
|
test_compose_db_setup() {
|
||||||
|
gh_echo "::group:: Netbox DB migrations"
|
||||||
echo "⏱ Running NetBox DB migrations"
|
echo "⏱ Running NetBox DB migrations"
|
||||||
$doco run --rm netbox /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py migrate
|
$doco run --rm netbox /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py migrate
|
||||||
|
gh_echo "::endgroup::"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_netbox_start() {
|
||||||
|
gh_echo "::group:: Start Netbox service"
|
||||||
|
echo "⏱ Starting NetBox services"
|
||||||
|
$doco up --detach --wait
|
||||||
|
gh_echo "::endgroup::"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_netbox_web() {
|
||||||
|
gh_echo "::group:: Web service test"
|
||||||
|
echo "⏱ Starting web service test"
|
||||||
|
RESP_CODE=$(
|
||||||
|
curl \
|
||||||
|
--silent \
|
||||||
|
--output /dev/null \
|
||||||
|
--write-out '%{http_code}' \
|
||||||
|
--request GET \
|
||||||
|
--connect-timeout 5 \
|
||||||
|
--max-time 10 \
|
||||||
|
--retry 5 \
|
||||||
|
--retry-delay 0 \
|
||||||
|
--retry-max-time 40 \
|
||||||
|
http://127.0.0.1:8000/
|
||||||
|
)
|
||||||
|
if [ "$RESP_CODE" == "200" ]; then
|
||||||
|
echo "Webservice running"
|
||||||
|
else
|
||||||
|
echo "⚠️ Got response code '$RESP_CODE' but expected '200'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
gh_echo "::endgroup::"
|
||||||
}
|
}
|
||||||
|
|
||||||
test_cleanup() {
|
test_cleanup() {
|
||||||
echo "💣 Cleaning Up"
|
echo "💣 Cleaning Up"
|
||||||
|
gh_echo "::group:: Docker compose logs"
|
||||||
|
$doco logs --no-color
|
||||||
|
gh_echo "::endgroup::"
|
||||||
|
gh_echo "::group:: Docker compose down"
|
||||||
$doco down --volumes
|
$doco down --volumes
|
||||||
|
gh_echo "::endgroup::"
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "🐳🐳🐳 Start testing '${IMAGE}'"
|
echo "🐳🐳🐳 Start testing '${IMAGE}'"
|
||||||
@ -68,5 +113,7 @@ test_setup
|
|||||||
|
|
||||||
test_netbox_unit_tests
|
test_netbox_unit_tests
|
||||||
test_compose_db_setup
|
test_compose_db_setup
|
||||||
|
test_netbox_start
|
||||||
|
test_netbox_web
|
||||||
|
|
||||||
echo "🐳🐳🐳 Done testing '${IMAGE}'"
|
echo "🐳🐳🐳 Done testing '${IMAGE}'"
|
||||||
|
Reference in New Issue
Block a user