File: resetcrdb.sh

package info (click to toggle)
trillian 1.7.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,600 kB
  • sloc: sh: 1,181; javascript: 474; sql: 330; makefile: 39
file content (118 lines) | stat: -rwxr-xr-x 4,121 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/bin/bash

set -e

usage() {
  cat <<EOF
$(basename $0) [--force] [--verbose] ...
All unrecognised arguments will be passed through to the 'cockroach' command.
Accepts environment variables:
- CRDB_ROOT_USER: A user with sufficient rights to create/reset the Trillian
  database (default: root).
- CRDB_ROOT_PASSWORD: The password for \$CRDB_ROOT_USER (default: none).
- CRDB_HOST: The hostname of the CockroachDB server (default: localhost).
- CRDB_PORT: The port the CockroachDB server is listening on (default: 3306).
- CRDB_DATABASE: The name to give to the new Trillian user and database
  (default: test).
- CRDB_USER: The name to give to the new Trillian user (default: test).
- CRDB_PASSWORD: The password to use for the new Trillian user
  (default: zaphod).
- CRDB_USER_HOST: The host that the Trillian user will connect from; use '%' as
  a wildcard (default: localhost).
- CRDB_IN_CONTAINER: If set, the script will assume it is running in a Docker
  container and will exec into the container to operate.
- CRDB_CONTAINER_NAME: The name of the Docker container to exec into (default:
  roach).
EOF
}

die() {
  echo "$*" > /dev/stderr
  exit 1
}

collect_vars() {
  # set unset environment variables to defaults
  [ -z ${CRDB_ROOT_USER+x} ] && CRDB_ROOT_USER="root"
  [ -z ${CRDB_HOST+x} ] && CRDB_HOST="localhost"
  [ -z ${CRDB_PORT+x} ] && CRDB_PORT="26257"
  [ -z ${CRDB_DATABASE+x} ] && CRDB_DATABASE="defaultdb"
  [ -z ${CRDB_USER+x} ] && CRDB_USER="test"
  [ -z ${CRDB_PASSWORD+x} ] && CRDB_PASSWORD="zaphod"
  [ -z ${CRDB_USER_HOST+x} ] && CRDB_USER_HOST="localhost"
  [ -z ${CRDB_INSECURE+x} ] && CRDB_INSECURE="true"
  [ -z ${CRDB_IN_CONTAINER+x} ] && CRDB_IN_CONTAINER="false"
  [ -z ${CRDB_CONTAINER_NAME+x} ] && CRDB_CONTAINER_NAME="roach"
  FLAGS=()

  # handle flags
  FORCE=false
  VERBOSE=false
  while [[ $# -gt 0 ]]; do
    case "$1" in
      --force) FORCE=true ;;
      --verbose) VERBOSE=true ;;
      --help) usage; exit ;;
      *) FLAGS+=("$1")
    esac
    shift 1
  done

  FLAGS+=(-u "${CRDB_ROOT_USER}")
  FLAGS+=(--host "${CRDB_HOST}")
  FLAGS+=(--port "${CRDB_PORT}")

  # Useful for debugging
  FLAGS+=(--echo-sql)

  if [[ ${CRDB_INSECURE} = 'true' ]]; then
    FLAGS+=(--insecure)
  fi

  # Optionally print flags (before appending password)
  [[ ${VERBOSE} = 'true' ]] && echo "- Using CRDB Flags: ${FLAGS[@]}"

  # append password if supplied
  [ -z ${CRDB_ROOT_PASSWORD+x} ] || FLAGS+=(-p"${CRDB_ROOT_PASSWORD}")

  if [[ ${CRDB_IN_CONTAINER} = 'true' ]]; then
    CMD="docker exec -i ${CRDB_CONTAINER_NAME} cockroach"
  else
    CMD="cockroach"
  fi
}

main() {
  collect_vars "$@"

  readonly TRILLIAN_PATH=$(go list -f '{{.Dir}}' github.com/google/trillian)

  echo "Warning: about to destroy and reset database '${CRDB_DATABASE}'"

  [[ ${FORCE} = true ]] || read -p "Are you sure? [Y/N]: " -n 1 -r
  echo # Print newline following the above prompt

  if [ -z ${REPLY+x} ] || [[ $REPLY =~ ^[Yy]$ ]]
  then
      echo "Resetting DB..."
      set -eux
      $CMD sql "${FLAGS[@]}" -e "DROP DATABASE IF EXISTS ${CRDB_DATABASE};" || \
        die "Error: Failed to drop database '${CRDB_DATABASE}'."
      $CMD sql "${FLAGS[@]}" -e "CREATE DATABASE ${CRDB_DATABASE};" || \
        die "Error: Failed to create database '${CRDB_DATABASE}'."
      if [[ ${CRDB_INSECURE} = 'true' ]]; then
        $CMD sql "${FLAGS[@]}" -e "CREATE USER IF NOT EXISTS ${CRDB_USER};" || \
          die "Error: Failed to create user '${CRDB_USER}'."
      else
        $CMD sql "${FLAGS[@]}" -e "CREATE USER IF NOT EXISTS ${CRDB_USER} WITH PASSWORD '${CRDB_PASSWORD}';" || \
          die "Error: Failed to create user '${CRDB_USER}'."
      fi
      $CMD sql "${FLAGS[@]}" -e "GRANT ALL PRIVILEGES ON DATABASE ${CRDB_DATABASE} TO ${CRDB_USER} WITH GRANT OPTION" || \
        die "Error: Failed to grant '${CRDB_USER}' user all privileges on '${CRDB_DATABASE}'."
      $CMD sql "${FLAGS[@]}" -d ${CRDB_DATABASE} < ${TRILLIAN_PATH}/storage/crdb/schema/storage.sql || \
        die "Error: Failed to create tables in '${CRDB_DATABASE}' database."
      echo "Reset Complete"
  fi
}

main "$@"