.PHONY: sync_db # Define variables REMOTE_USER=tma REMOTE_SERVER=swarm-demo.autonomic.zone REMOTE_PORT=222 REMOTE_CONTAINER_PATH=/data/db/mongodump LOCAL_PATH=/tmp/mongodump LOCAL_DB=test LOCAL_CONTAINER_NAME=nextload-mongo-1 MONGO_USER=mongo MONGO_PASSWORD=mongo MONGO_HOST=mongo sync_db: @echo "Step 1: Dump the database on production" docker --context swarm-demo.autonomic.zone exec -it $$(docker --context swarm-demo.autonomic.zone ps -q -f name=nextload-demo_autonomic_zone_mongo) \ bash -c 'rm -rf $(REMOTE_CONTAINER_PATH) && mongodump -u mongo -p "$$(cat /run/secrets/mongo_password)" -o $(REMOTE_CONTAINER_PATH) && ls -l $(REMOTE_CONTAINER_PATH)' @echo "Step 2: Copy the dump from the remote MongoDB container to the local machine" rm -rf $(LOCAL_PATH) mkdir -p $(LOCAL_PATH) # Create the target directory if it doesn't exist ssh -p $(REMOTE_PORT) $(REMOTE_USER)@$(REMOTE_SERVER) \ "docker exec $$(docker --context swarm-demo.autonomic.zone ps -q -f name=nextload-demo_autonomic_zone_mongo) \ tar -cC $(REMOTE_CONTAINER_PATH) ." | tar -xC $(LOCAL_PATH) @echo "Step 3: Drop the existing local database and restore the dump" docker exec -it $(LOCAL_CONTAINER_NAME) mongosh --username $(MONGO_USER) --password $(MONGO_PASSWORD) $(LOCAL_DB) --eval "db.dropDatabase()" docker exec -it $(LOCAL_CONTAINER_NAME) mongorestore --drop --username $(MONGO_USER) --password $(MONGO_PASSWORD) --authenticationDatabase admin $(LOCAL_PATH)