mirror of
https://github.com/offen/docker-volume-backup.git
synced 2025-09-08 23:45:48 +08:00
Add test demonstrating failure when running on worker node
This commit is contained in:
parent
5291c5cc1c
commit
7806e56eab
5 changed files with 102 additions and 4 deletions
|
@ -1,5 +1,6 @@
|
|||
services:
|
||||
manager: &node
|
||||
hostname: manager
|
||||
privileged: true
|
||||
image: offen/docker-volume-backup:test-sandbox
|
||||
healthcheck:
|
||||
|
@ -8,17 +9,19 @@ services:
|
|||
timeout: 5s
|
||||
retries: 50
|
||||
volumes:
|
||||
- $SOURCE:/code
|
||||
- $TARBALL:/cache/image.tar.gz
|
||||
- ./:/code
|
||||
- ${TARBALL:-.}:/cache/image.tar.gz
|
||||
- docker_volume_backup_test_sandbox_image:/var/lib/docker/image
|
||||
- docker_volume_backup_test_sandbox_overlay2:/var/lib/docker/overlay2
|
||||
|
||||
worker1:
|
||||
<<: *node
|
||||
hostname: worker1
|
||||
profiles:
|
||||
- multinode
|
||||
worker2:
|
||||
<<: *node
|
||||
hostname: worker2
|
||||
profiles:
|
||||
- multinode
|
||||
|
||||
|
|
|
@ -46,18 +46,23 @@ for dir in $(find $find_args | sort); do
|
|||
|
||||
docker compose --profile $compose_profile up -d --wait
|
||||
|
||||
test_context=manager
|
||||
if [ -f "${dir}/.swarm" ]; then
|
||||
docker compose exec manager docker swarm init
|
||||
elif [ -f "${dir}/.multinode" ]; then
|
||||
test_context=$(cat $dir/.multinode)
|
||||
|
||||
docker compose exec manager docker swarm init
|
||||
manager_ip=$(docker compose exec manager docker node inspect $(docker compose exec manager docker node ls -q) --format '{{ .Status.Addr }}')
|
||||
token=$(docker compose exec manager docker swarm join-token -q worker)
|
||||
docker compose exec worker1 docker swarm join --token $token $manager_ip:2377
|
||||
docker compose exec worker2 docker swarm join --token $token $manager_ip:2377
|
||||
|
||||
docker compose exec -w "/code/$dir" manager docker stack deploy --compose-file="docker-compose.yml" test_stack
|
||||
fi
|
||||
|
||||
docker compose exec manager /bin/sh -c "docker load -i /cache/image.tar.gz"
|
||||
docker compose exec -e TEST_VERSION=$IMAGE_TAG manager /bin/sh -c "/code/test/$test"
|
||||
docker compose exec $test_context /bin/sh -c "docker load -i /cache/image.tar.gz"
|
||||
docker compose exec -e TEST_VERSION=$IMAGE_TAG $test_context /bin/sh -c "/code/$test"
|
||||
|
||||
docker compose --profile $compose_profile down
|
||||
echo ""
|
||||
|
|
1
test/worker-node/.multinode
Normal file
1
test/worker-node/.multinode
Normal file
|
@ -0,0 +1 @@
|
|||
worker1
|
56
test/worker-node/docker-compose.yml
Normal file
56
test/worker-node/docker-compose.yml
Normal file
|
@ -0,0 +1,56 @@
|
|||
services:
|
||||
database:
|
||||
image: mariadb:10.7
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
placement:
|
||||
constraints:
|
||||
- node.hostname == worker1
|
||||
environment:
|
||||
MARIADB_ROOT_PASSWORD: test
|
||||
MARIADB_DATABASE: backup
|
||||
labels:
|
||||
- docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -ptest --all-databases > /tmp/volume/dump.sql'
|
||||
- docker-volume-backup.copy-post=/bin/sh -c 'echo "post" > /tmp/volume/post.txt'
|
||||
- docker-volume-backup.stop-during-backup=true
|
||||
volumes:
|
||||
- app_data:/tmp/volume
|
||||
|
||||
other_database:
|
||||
image: mariadb:10.7
|
||||
deploy:
|
||||
placement:
|
||||
constraints:
|
||||
- node.hostname == manager
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
environment:
|
||||
MARIADB_ROOT_PASSWORD: test
|
||||
MARIADB_DATABASE: backup
|
||||
labels:
|
||||
- docker-volume-backup.archive-pre=touch /tmp/volume/not-relevant.txt
|
||||
- docker-volume-backup.exec-label=not-relevant
|
||||
volumes:
|
||||
- app_data:/tmp/volume
|
||||
|
||||
backup:
|
||||
image: offen/docker-volume-backup:${TEST_VERSION:-canary}
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
placement:
|
||||
constraints:
|
||||
- node.hostname == worker1
|
||||
environment:
|
||||
BACKUP_FILENAME: test.tar.gz
|
||||
BACKUP_CRON_EXPRESSION: 0 0 5 31 2 ?
|
||||
EXEC_FORWARD_OUTPUT: "true"
|
||||
volumes:
|
||||
- backup_archive:/archive
|
||||
- app_data:/backup/data:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
|
||||
volumes:
|
||||
app_data:
|
||||
backup_archive:
|
33
test/worker-node/run.sh
Executable file
33
test/worker-node/run.sh
Executable file
|
@ -0,0 +1,33 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)
|
||||
. ../util.sh
|
||||
current_test=$(basename $(pwd))
|
||||
|
||||
export TMP_DIR=$(mktemp -d)
|
||||
export LOCAL_DIR=$(mktemp -d)
|
||||
|
||||
while [ -z $(docker ps -q -f name=backup) ]; do
|
||||
info "Backup container not ready yet. Retrying."
|
||||
sleep 1
|
||||
done
|
||||
|
||||
sleep 20
|
||||
|
||||
docker exec $(docker ps -q -f name=backup) backup
|
||||
|
||||
mkdir -p /archive
|
||||
docker cp $(docker ps -q -f name=backup):/archive $LOCAL_DIR
|
||||
|
||||
tar -xvf "$LOCAL_DIR/archive/test.tar.gz" -C $TMP_DIR
|
||||
if [ ! -f "$TMP_DIR/backup/data/dump.sql" ]; then
|
||||
fail "Could not find file written by pre command."
|
||||
fi
|
||||
pass "Found expected file."
|
||||
|
||||
if [ -f "$TMP_DIR/backup/data/post.txt" ]; then
|
||||
fail "File created in post command was present in backup."
|
||||
fi
|
||||
pass "Did not find unexpected file."
|
Loading…
Add table
Reference in a new issue