Compare commits
19 Commits
Author | SHA1 | Date | |
---|---|---|---|
7bf9e1af5a | |||
1e588431e2 | |||
41fd4e5d67 | |||
17f1bb0af0 | |||
9cc58918ab | |||
831867499b | |||
d5dde45bec | |||
6576c18a9c | |||
efd6e6a3c2 | |||
47a7eee16a | |||
5eac65b8f6 | |||
2ba441124e | |||
f2d070fc49 | |||
97ee353b00 | |||
c001b88a81 | |||
b131b07af8 | |||
311629ade4 | |||
256f23b4ad | |||
29e37a31d7 |
@ -6,11 +6,6 @@ get_image_label() {
|
||||
skopeo inspect "docker://$image" | jq -r ".Labels[\"$label\"]"
|
||||
}
|
||||
|
||||
get_image_layers() {
|
||||
local image=$1
|
||||
skopeo inspect "docker://$image" | jq -r ".Layers"
|
||||
}
|
||||
|
||||
get_image_last_layer() {
|
||||
local image=$1
|
||||
skopeo inspect "docker://$image" | jq -r ".Layers | last"
|
||||
|
5
build.sh
5
build.sh
@ -324,11 +324,11 @@ else
|
||||
source ./build-functions/get-public-image-config.sh
|
||||
echo "Checking labels for '${FINAL_DOCKER_TAG}'"
|
||||
BASE_LAST_LAYER=$(get_image_last_layer "${DOCKER_FROM}")
|
||||
mapfile -t IMAGES_LAYERS_OLD < <(get_image_layers "${FINAL_DOCKER_TAG}")
|
||||
OLD_BASE_LAST_LAYER=$(get_image_label netbox.last-base-image-layer "${FINAL_DOCKER_TAG}")
|
||||
NETBOX_GIT_REF_OLD=$(get_image_label netbox.git-ref "${FINAL_DOCKER_TAG}")
|
||||
GIT_REF_OLD=$(get_image_label org.opencontainers.image.revision "${FINAL_DOCKER_TAG}")
|
||||
|
||||
if ! printf '%s\n' "${IMAGES_LAYERS_OLD[@]}" | grep -q -P "^${BASE_LAST_LAYER}\$"; then
|
||||
if [ "${BASE_LAST_LAYER}" != "${OLD_BASE_LAST_LAYER}" ]; then
|
||||
SHOULD_BUILD="true"
|
||||
BUILD_REASON="${BUILD_REASON} ubuntu"
|
||||
fi
|
||||
@ -388,6 +388,7 @@ fi
|
||||
if [ -n "${BUILD_REASON}" ]; then
|
||||
BUILD_REASON=$(sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' <<<"$BUILD_REASON")
|
||||
DOCKER_BUILD_ARGS+=(--label "netbox.build-reason=${BUILD_REASON}")
|
||||
DOCKER_BUILD_ARGS+=(--label "netbox.last-base-image-layer=${BASE_LAST_LAYER}")
|
||||
fi
|
||||
|
||||
# --build-arg
|
||||
|
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'
|
||||
services:
|
||||
netbox:
|
||||
netbox: &netbox
|
||||
image: ${IMAGE-netboxcommunity/netbox:latest}
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_started
|
||||
condition: service_healthy
|
||||
redis-cache:
|
||||
condition: service_started
|
||||
condition: service_healthy
|
||||
env_file: env/netbox.env
|
||||
user: 'unit:root'
|
||||
volumes:
|
||||
- ./configuration:/etc/netbox/config:z,ro
|
||||
- ./test-configuration/logging.py:/etc/netbox/config/logging.py:z,ro
|
||||
- ./reports:/etc/netbox/reports:z,ro
|
||||
- ./scripts:/etc/netbox/scripts:z,ro
|
||||
- netbox-media-files:/opt/netbox/netbox/media:z
|
||||
healthcheck:
|
||||
start_period: 120s
|
||||
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:
|
||||
image: postgres:15-alpine
|
||||
env_file: env/postgres.env
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready"]
|
||||
test: "pg_isready -t 2 -d $$POSTGRES_DB -U $$POSTGRES_USER" ## $$ because of docker-compose
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
redis:
|
||||
redis: &redis
|
||||
image: redis:7-alpine
|
||||
command:
|
||||
- sh
|
||||
- -c # this is to evaluate the $REDIS_PASSWORD from the env
|
||||
- redis-server --appendonly yes --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose
|
||||
env_file: env/redis.env
|
||||
healthcheck:
|
||||
start_period: 20s
|
||||
timeout: 3s
|
||||
interval: 15s
|
||||
test: "timeout 2 redis-cli ping"
|
||||
redis-cache:
|
||||
image: redis:7-alpine
|
||||
command:
|
||||
- sh
|
||||
- -c # this is to evaluate the $REDIS_PASSWORD from the env
|
||||
- redis-server --requirepass $$REDIS_PASSWORD ## $$ because of docker-compose
|
||||
<<: *redis
|
||||
env_file: env/redis-cache.env
|
||||
volumes:
|
||||
netbox-media-files:
|
||||
|
@ -1,7 +1,7 @@
|
||||
version: '3.4'
|
||||
services:
|
||||
netbox: &netbox
|
||||
image: docker.io/netboxcommunity/netbox:${VERSION-v3.4-2.5.0}
|
||||
image: docker.io/netboxcommunity/netbox:${VERSION-v3.4-2.5.2}
|
||||
depends_on:
|
||||
- postgres
|
||||
- redis
|
||||
@ -63,7 +63,7 @@ services:
|
||||
volumes:
|
||||
- netbox-redis-data:/data
|
||||
redis-cache:
|
||||
image: redis:7-alpine
|
||||
image: docker.io/redis:7-alpine
|
||||
command:
|
||||
- sh
|
||||
- -c # this is to evaluate the $REDIS_PASSWORD from the env
|
||||
|
@ -84,9 +84,12 @@ fi
|
||||
|
||||
./manage.py shell --interface python <<END
|
||||
from users.models import Token
|
||||
old_default_token = Token.objects.get(key="0123456789abcdef0123456789abcdef01234567")
|
||||
if old_default_token:
|
||||
print("⚠️ Warning: You have the old default admin token in your database. This token is widely known; please remove it.")
|
||||
try:
|
||||
old_default_token = Token.objects.get(key="0123456789abcdef0123456789abcdef01234567")
|
||||
if old_default_token:
|
||||
print("⚠️ Warning: You have the old default admin token in your database. This token is widely known; please remove it.")
|
||||
except Token.DoesNotExist:
|
||||
pass
|
||||
END
|
||||
|
||||
echo "✅ Initialisation is done."
|
||||
|
@ -1,6 +1,6 @@
|
||||
django-auth-ldap==4.1.0
|
||||
django-auth-ldap==4.2.0
|
||||
django-storages[azure,boto3,dropbox,google,libcloud,sftp]==1.13.2
|
||||
napalm==4.0.0
|
||||
psycopg2==2.9.5
|
||||
python3-saml==1.15.0
|
||||
social-auth-core[all]==4.3.0
|
||||
social-auth-core[all]==4.4.0
|
||||
|
49
test.sh
49
test.sh
@ -14,6 +14,8 @@
|
||||
# exit when a command exits with an exit code != 0
|
||||
set -e
|
||||
|
||||
source ./build-functions/gh-functions.sh
|
||||
|
||||
# IMAGE is used by `docker-compose.yml` do determine the tag
|
||||
# of the Docker Image that is to be used
|
||||
if [ "${1}x" != "x" ]; then
|
||||
@ -35,29 +37,72 @@ if [ -z "${IMAGE}" ]; then
|
||||
fi
|
||||
|
||||
# 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() {
|
||||
gh_echo "::group:: Test setup"
|
||||
echo "🏗 Setup up test environment"
|
||||
$doco up --detach --quiet-pull --wait --force-recreate --renew-anon-volumes --no-start
|
||||
$doco start postgres
|
||||
$doco start redis
|
||||
$doco start redis-cache
|
||||
gh_echo "::endgroup::"
|
||||
}
|
||||
|
||||
test_netbox_unit_tests() {
|
||||
gh_echo "::group:: Netbox unit tests"
|
||||
echo "⏱ Running NetBox Unit Tests"
|
||||
$doco run --rm netbox /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py test
|
||||
gh_echo "::endgroup::"
|
||||
}
|
||||
|
||||
test_compose_db_setup() {
|
||||
gh_echo "::group:: Netbox DB migrations"
|
||||
echo "⏱ Running NetBox DB migrations"
|
||||
$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() {
|
||||
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
|
||||
gh_echo "::endgroup::"
|
||||
}
|
||||
|
||||
echo "🐳🐳🐳 Start testing '${IMAGE}'"
|
||||
@ -68,5 +113,7 @@ test_setup
|
||||
|
||||
test_netbox_unit_tests
|
||||
test_compose_db_setup
|
||||
test_netbox_start
|
||||
test_netbox_web
|
||||
|
||||
echo "🐳🐳🐳 Done testing '${IMAGE}'"
|
||||
|
Reference in New Issue
Block a user