|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# USAGE: |
| 4 | +# export ARANGO_LICENSE_KEY=<arangodb-enterprise-license> |
| 5 | +# ./start_db_cluster.sh <dockerImage> |
| 6 | + |
| 7 | +# EXAMPLE: |
| 8 | +# ./start_db_cluster.sh docker.io/arangodb/arangodb:3.7.1 |
| 9 | + |
| 10 | +docker pull "$1" |
| 11 | + |
| 12 | +LOCATION=$(pwd)/$(dirname "$0") |
| 13 | + |
| 14 | +docker network create arangodb --subnet 172.28.0.0/16 |
| 15 | + |
| 16 | +echo "Averysecretword" > "$LOCATION"/jwtSecret |
| 17 | +docker run --rm -v "$LOCATION"/jwtSecret:/jwtSecret "$1" arangodb auth header --auth.jwt-secret /jwtSecret > "$LOCATION"/jwtHeader |
| 18 | +AUTHORIZATION_HEADER=$(cat "$LOCATION"/jwtHeader) |
| 19 | + |
| 20 | +echo "Starting containers..." |
| 21 | + |
| 22 | +docker run -d -v $(pwd)/server.pem:/server.pem -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.1.1 --name agent1 "$1" arangodb --ssl.keyfile /server.pem --cluster.start-dbserver false --cluster.start-coordinator false --auth.jwt-secret /jwtSecret |
| 23 | +docker run -d -v $(pwd)/server.pem:/server.pem -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.1.2 --name agent2 "$1" arangodb --ssl.keyfile /server.pem --cluster.start-dbserver false --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret |
| 24 | +docker run -d -v $(pwd)/server.pem:/server.pem -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.1.3 --name agent3 "$1" arangodb --ssl.keyfile /server.pem --cluster.start-dbserver false --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret |
| 25 | + |
| 26 | +docker run -d -v $(pwd)/server.pem:/server.pem -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.2.1 --name dbserver1 "$1" arangodb --ssl.keyfile /server.pem --cluster.start-dbserver true --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret |
| 27 | +docker run -d -v $(pwd)/server.pem:/server.pem -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.2.2 --name dbserver2 "$1" arangodb --ssl.keyfile /server.pem --cluster.start-dbserver true --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret |
| 28 | + |
| 29 | +docker run -d -v $(pwd)/server.pem:/server.pem -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.1 --name coordinator1 "$1" arangodb --ssl.keyfile /server.pem --cluster.start-dbserver false --cluster.start-coordinator true --starter.join agent1 --auth.jwt-secret /jwtSecret |
| 30 | +docker run -d -v $(pwd)/server.pem:/server.pem -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.2 --name coordinator2 "$1" arangodb --ssl.keyfile /server.pem --cluster.start-dbserver false --cluster.start-coordinator true --starter.join agent1 --auth.jwt-secret /jwtSecret |
| 31 | + |
| 32 | +debug_container() { |
| 33 | + if [ ! "$(docker ps -aqf name="$1")" ]; then |
| 34 | + echo "$1 container not found!" |
| 35 | + exit 1 |
| 36 | + fi |
| 37 | + |
| 38 | + running=$(docker inspect -f '{{.State.Running}}' "$1") |
| 39 | + |
| 40 | + if [ "$running" = false ] |
| 41 | + then |
| 42 | + echo "$1 is not running!" |
| 43 | + echo "---" |
| 44 | + docker logs "$1" |
| 45 | + echo "---" |
| 46 | + exit 1 |
| 47 | + fi |
| 48 | +} |
| 49 | + |
| 50 | +debug() { |
| 51 | + for c in agent1 \ |
| 52 | + agent2 \ |
| 53 | + agent3 \ |
| 54 | + dbserver1 \ |
| 55 | + dbserver2 \ |
| 56 | + coordinator1 \ |
| 57 | + coordinator2 ; do |
| 58 | + debug_container $c |
| 59 | + done |
| 60 | +} |
| 61 | + |
| 62 | +wait_server() { |
| 63 | + # shellcheck disable=SC2091 |
| 64 | + until $(curl --insecure --output /dev/null --silent --head --fail -i -H "$AUTHORIZATION_HEADER" "https://$1/_api/version"); do |
| 65 | + printf '.' |
| 66 | + debug |
| 67 | + sleep 1 |
| 68 | + done |
| 69 | +} |
| 70 | + |
| 71 | +echo "Waiting..." |
| 72 | + |
| 73 | +# Wait for agents: |
| 74 | +for a in 172.28.1.1:8531 \ |
| 75 | + 172.28.1.2:8531 \ |
| 76 | + 172.28.1.3:8531 \ |
| 77 | + 172.28.2.1:8530 \ |
| 78 | + 172.28.2.2:8530 \ |
| 79 | + 172.28.3.1:8529 \ |
| 80 | + 172.28.3.2:8529 ; do |
| 81 | + wait_server $a |
| 82 | +done |
| 83 | + |
| 84 | +docker exec coordinator1 arangosh --server.endpoint http+ssl://127.0.0.1:8529 --server.authentication=false --javascript.execute-string='require("org/arangodb/users").update("root", "test")' |
| 85 | + |
| 86 | +#rm "$LOCATION"/jwtHeader "$LOCATION"/jwtSecret |
| 87 | + |
| 88 | +echo "Done, your cluster is ready." |
0 commit comments