diff --git a/dev/traffic_ops/run.sh b/dev/traffic_ops/run.sh index 69ddecd350..9a4543bbd5 100755 --- a/dev/traffic_ops/run.sh +++ b/dev/traffic_ops/run.sh @@ -20,10 +20,34 @@ set -o errexit set -o xtrace trap '[ $? -eq 0 ] && exit 0 || echo "Error on line ${LINENO} of ${0}"; exit 1' EXIT +db_init() { + while ! pg_isready -h db -p 5432 -d postgres; do + echo "waiting for db on postgresql://db:5432/postgres"; + sleep 3; + done + + cd "$TC" + make traffic_ops/app/db/admin + (cd "$TC/dev/traffic_ops" + + "$ADMIN" -c ./dbconf.yml -s "$TC/traffic_ops/app/db/create_tables.sql" -S "$TC/traffic_ops/app/db/seeds.sql" -p "$TC/traffic_ops/app/db/patches.sql" -m "$TC/traffic_ops/app/db/migrations" reset + "$ADMIN" -c ./dbconf.yml -s "$TC/traffic_ops/app/db/create_tables.sql" -S "$TC/traffic_ops/app/db/seeds.sql" -p "$TC/traffic_ops/app/db/patches.sql" -m "$TC/traffic_ops/app/db/migrations" upgrade + "$ADMIN" -v -c ./traffic.vault.dbconf.yml -s "$TC/traffic_ops/app/db/trafficvault/create_tables.sql" -m "$TC/traffic_ops/app/db/trafficvault/migrations" reset + "$ADMIN" -v -c ./traffic.vault.dbconf.yml -s "$TC/traffic_ops/app/db/trafficvault/create_tables.sql" -m "$TC/traffic_ops/app/db/trafficvault/migrations" upgrade + + psql -d 'postgres://traffic_ops:twelve12@db:5432/traffic_ops_development?sslmode=disable' -f ./seed.psql) +} + user=trafficops uid="$(stat -c%u "$TC")" gid="$(stat -c%g "$TC")" if [[ "$(id -u)" != "$uid" ]]; then + # db/admin must be run as root (see apache/trafficcontrol#7202) + if [[ $uid -ne 0 ]]; then + db_init + chown "${uid}:${gid}" traffic_ops/app/db/admin + fi + for dir in "${GOPATH}/bin" "${GOPATH}/pkg"; do if [[ -e "$dir" ]] && [[ "$(stat -c%u "$dir")" -ne "$uid" || "$(stat -c%g "$dir")" -ne "$gid" ]] ; then chown -R "${uid}:${gid}" "$dir" @@ -35,24 +59,10 @@ if [[ "$(id -u)" != "$uid" ]]; then exec su "$user" -- "$0" fi -cd "$TC" - -while ! pg_isready -h db -p 5432 -d postgres; do - echo "waiting for db on postgresql://db:5432/postgres"; - sleep 3; -done - -make traffic_ops/app/db/admin -cd "$TC/dev/traffic_ops" - -"$ADMIN" -c ./dbconf.yml -s "$TC/traffic_ops/app/db/create_tables.sql" -S "$TC/traffic_ops/app/db/seeds.sql" -p "$TC/traffic_ops/app/db/patches.sql" -m "$TC/traffic_ops/app/db/migrations" reset -"$ADMIN" -c ./dbconf.yml -s "$TC/traffic_ops/app/db/create_tables.sql" -S "$TC/traffic_ops/app/db/seeds.sql" -p "$TC/traffic_ops/app/db/patches.sql" -m "$TC/traffic_ops/app/db/migrations" upgrade -"$ADMIN" -v -c ./traffic.vault.dbconf.yml -s "$TC/traffic_ops/app/db/trafficvault/create_tables.sql" -m "$TC/traffic_ops/app/db/trafficvault/migrations" reset -"$ADMIN" -v -c ./traffic.vault.dbconf.yml -s "$TC/traffic_ops/app/db/trafficvault/create_tables.sql" -m "$TC/traffic_ops/app/db/trafficvault/migrations" upgrade - - -psql -d 'postgres://traffic_ops:twelve12@db:5432/traffic_ops_development?sslmode=disable' -f ./seed.psql - +# On Docker Desktop, bind mounts are owned by root +if [[ $uid -eq 0 ]]; then + db_init +fi cd "$TC/traffic_ops/traffic_ops_golang"