1
|
#!/bin/bash
|
2
|
|
3
|
#set -x
|
4
|
|
5
|
show_usage()
|
6
|
{
|
7
|
i=0
|
8
|
i=$((i+1)); usage[$i]="Usage: $0 [-r<data_dir>] [-d<dump_dir>] [-c] [-f<path_to_p2j.jar>] [-a<path_to_app.jar>] \
|
9
|
--db_admin=<dbadmin> --db_adminpw=<dbadminpw> --db_user=<dbuser> --db_userpw=<dbuserpw> --db_names=<db names> --db_host=<dbhost> --db_port=<dbport>"
|
10
|
i=$((i+1)); usage[$i]="Where:"
|
11
|
i=$((i+1)); usage[$i]="\t r = Relative path to the data directory (def=$reldata_dir_name)"
|
12
|
i=$((i+1)); usage[$i]="\t d = Path to the data dump directories if performing an import (def=$dump_dir_name)"
|
13
|
i=$((i+1)); usage[$i]="\t c = Running in a container. If this option is passed in, \"--db_host=\" specifies a container"
|
14
|
i=$((i+1)); usage[$i]="\t f = Path to p2j.jar (def=$fwd_jar)"
|
15
|
i=$((i+1)); usage[$i]="\t a = Path to app.jar (def=$app_jar)"
|
16
|
i=$((i+1)); usage[$i]="\t--db_admin=<dbadmin> DB admin user for DB creation (def=$dbadmin)"
|
17
|
i=$((i+1)); usage[$i]="\t--db_adminpw=<dbadminpw> DB admin user password for the import (def=$dbadmin_pw)"
|
18
|
i=$((i+1)); usage[$i]="\t--db_user=<dbuser> DB user for the import (def=$dbuser)"
|
19
|
i=$((i+1)); usage[$i]="\t--db_userpw=<dbuserpw> DB user password for the import (def=$dbuser_pw)"
|
20
|
i=$((i+1)); usage[$i]="\t--db_names=<db names> DB names for import (def=$dbnames)"
|
21
|
i=$((i+1)); usage[$i]="\tOption format is \"<db names (separate multiples with commas)>\")"
|
22
|
i=$((i+1)); usage[$i]="\t\t For example: \"--db_names=hotel\" or \"--db_names=hotel,ledger,prices\""
|
23
|
i=$((i+1)); usage[$i]="\t--db_host=<dbhost> PostGreSQL server name or IP. If -c is specified, this is a container name (def=$dbhost)"
|
24
|
i=$((i+1)); usage[$i]="\t--db_port=<dbport> Port to connect to for DB access (def=$dbport)"
|
25
|
i=$((i+1)); usage[$i]="\tNOTE: APP_DBADMIN_PASSWORD and APP_DBUSER_PASSWORD variables can be set in the environment instead of passed on command line."
|
26
|
|
27
|
for i in "${usage[@]}"; do
|
28
|
echo -e $i
|
29
|
done
|
30
|
}
|
31
|
|
32
|
# Function to split a comma-delimited string into an array
|
33
|
split_string()
|
34
|
{
|
35
|
local input_string="$1" # The input comma-delimited string
|
36
|
|
37
|
IFS=',' read -ra array <<< "$input_string"
|
38
|
echo "${array[@]}"
|
39
|
unset IFS
|
40
|
}
|
41
|
|
42
|
get_container_ip()
|
43
|
{
|
44
|
local cname=$1
|
45
|
if [ "$cname" == "localhost" ]; then
|
46
|
echo $cname
|
47
|
else
|
48
|
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $cname
|
49
|
fi
|
50
|
}
|
51
|
|
52
|
dbadmin=$APP_DBADMIN # fwd_admin
|
53
|
dbadmin_pw=$APP_DBADMIN_PASSWORD # admin
|
54
|
db_table_schema=$APP_TABLE_SCHEMA # From conversion: ddl/schema_table_${dbnames}_postgresql.sql
|
55
|
dbuser=$APP_DBUSER # fwd_user
|
56
|
dbuser_pw=$APP_DBUSER_PASSWORD # user
|
57
|
dbnames=$APP_DBNAMES # appdb
|
58
|
dbport=$APP_DBPORT # 5432
|
59
|
reldata_dir_name=$APP_RELDATA_DIR # data
|
60
|
dump_dir_name=$APP_DUMP_DIR # $APP_DUMP_DIR
|
61
|
dbhost=$DB_CONTAINER # app_pg14
|
62
|
fwd_jar=/opt/fwd/build/lib/p2j.jar
|
63
|
app_jar=/opt/hotel/lib/hotel.jar
|
64
|
|
65
|
# Sanity check default values
|
66
|
[ -z "$dbadmin" ] && dbadmin="fwd_admin"
|
67
|
[ -z "$dbadmin_pw" ] && dbadmin_pw="admin"
|
68
|
[ -z "$dbuser" ] && dbuser="fwd_user"
|
69
|
[ -z "$dbuser_pw" ] && dbuser_pw="user"
|
70
|
[ -z "$dbnames" ] && dbnames="hotel"
|
71
|
[ -z "$dbport" ] && dbport="5432"
|
72
|
[ -z "$reldata_dir_name" ] && reldata_dir_name="data"
|
73
|
[ -z "$db_table_schema" ] && db_table_schema="ddl/schema_table_${dbnames}_postgresql.sql"
|
74
|
[ -z "$dump_dir_name" ] && dump_dir_name="${reldata_dir_name}/dump"
|
75
|
[ -z "$dbhost" ] && dbhost="localhost"
|
76
|
[ -z "$fwd_jar" ] && fwd_jar="./p2j/build/lib/p2j.jar"
|
77
|
[ -z "$app_jar" ] && app_jar="./build/lib/hotel.jar"
|
78
|
|
79
|
# process options
|
80
|
while getopts "h?cr:d:f:a:-:" opt; do
|
81
|
case $opt in
|
82
|
c ) use_container=true
|
83
|
;;
|
84
|
r ) reldata_dir_name=$OPTARG
|
85
|
;;
|
86
|
d ) dump_dir_name=$OPTARG
|
87
|
;;
|
88
|
f ) fwd_jar=$OPTARG
|
89
|
;;
|
90
|
a ) app_jar=$OPTARG
|
91
|
;;
|
92
|
- ) case ${OPTARG} in
|
93
|
"db_admin"* ) dbadmin=$(echo $OPTARG | cut -d"=" -f2) ;;
|
94
|
"db_adminpw"* ) dbadmin_pw=$(echo $OPTARG | cut -d"=" -f2) ;;
|
95
|
"db_user"* ) dbuser=$(echo $OPTARG | cut -d"=" -f2) ;;
|
96
|
"db_userpw"* ) dbuser_pw=$(echo $OPTARG | cut -d"=" -f2) ;;
|
97
|
"db_names"* ) dbnames=$(echo $OPTARG | cut -d"=" -f2) ;;
|
98
|
"db_port"* ) dbport=$(echo $OPTARG | cut -d"=" -f2) ;;
|
99
|
"db_schema"* ) db_table_schema=$(echo $OPTARG | cut -d"=" -f2) ;;
|
100
|
"db_host"* ) dbhost=$(echo $OPTARG | cut -d"=" -f2) ;;
|
101
|
esac ;;
|
102
|
h | \
|
103
|
\? ) show_usage && exit 1
|
104
|
;;
|
105
|
esac
|
106
|
done
|
107
|
shift $(($OPTIND - 1))
|
108
|
|
109
|
# Sanity check passed in values
|
110
|
db_array=($(split_string "$dbnames"))
|
111
|
[ "$use_container" == "true" ] && pg_name=$(get_container_ip ${dbhost}) || pg_name=$dbhost
|
112
|
if [ ! -z "$dump_dir_name" ] && [ ! -e "$dump_dir_name" ]; then
|
113
|
echo "ERROR: cannot find ${dump_dir_name}. Check -d option."
|
114
|
show_usage && exit 1
|
115
|
fi
|
116
|
if [ ! -e "$fwd_jar" ]; then
|
117
|
echo "ERROR: cannot find ${fwd_jar}. Check -f option."
|
118
|
show_usage && exit 1
|
119
|
fi
|
120
|
if [ ! -e "$app_jar" ]; then
|
121
|
echo "ERROR: cannot find ${app_jar}. Check -a option."
|
122
|
show_usage && exit 1
|
123
|
fi
|
124
|
|
125
|
# Grab the DDL from the app.jar
|
126
|
temp_dir=$(mktemp -d "tempdir_ddl_XXXXXX")
|
127
|
unzip -qj $app_jar ddl/schema_table_* -d $temp_dir
|
128
|
for item in "${db_array[@]}"; do
|
129
|
db_table_schema="schema_table_${item}_postgresql.sql"
|
130
|
if [ ! -e "${temp_dir}/${db_table_schema}" ]; then
|
131
|
echo "ERROR: cannot find ${db_table_schema} in ${app_jar}. Check build."
|
132
|
show_usage && exit 1
|
133
|
fi
|
134
|
done
|
135
|
|
136
|
# Loop through our list of DBs
|
137
|
for item in "${db_array[@]}"; do
|
138
|
export PGPASSWORD=$dbadmin_pw
|
139
|
# Drop the DB, if necessary
|
140
|
if psql -U $dbadmin -h $pg_name -p $dbport -lqt | cut -d \| -f 1 | tr -s '[:space:]' ' ' | grep -qw "$item"; then
|
141
|
echo "Dropping DB $item ..."
|
142
|
dropdb -U $dbadmin -h $pg_name -p $dbport $item
|
143
|
fi
|
144
|
|
145
|
# Create the DB
|
146
|
echo "Creating DB $item using OWNER $dbadmin ..."
|
147
|
createdb -U $dbadmin -h $pg_name -p $dbport $item
|
148
|
|
149
|
db_table_schema=${temp_dir}/schema_table_${item}_postgresql.sql
|
150
|
echo "Creating schema for $item from $db_table_schema ..."
|
151
|
export PGPASSWORD=$dbuser_pw
|
152
|
psql -U $dbuser -h $pg_name -p $dbport -f $db_table_schema $item
|
153
|
|
154
|
echo "Setup UDFs ..."
|
155
|
db_url=jdbc:postgresql://${pg_name}:${dbport}/${item}
|
156
|
cmd="java -Xmx1g -Dfile.encoding=UTF-8 -cp $fwd_jar com.goldencode.p2j.persist.deploy.ScriptRunner $db_url $dbadmin $dbadmin_pw udf.install.search_path"
|
157
|
echo "Performing cmd=$cmd"
|
158
|
eval $cmd
|
159
|
|
160
|
if [ ! -z "$dump_dir_name" ]; then
|
161
|
echo "Import dump from ${dump_dir_name}/${item} into $item ..."
|
162
|
cmd="java -Xmx1g -Djava.system.class.loader=com.goldencode.asm.AsmClassLoader -Dfile.encoding=UTF-8 \
|
163
|
-cp ${fwd_jar}:${app_jar} com.goldencode.p2j.pattern.PatternEngine \
|
164
|
-d 2 \
|
165
|
"dbName=\\\"${item}\\\"" \
|
166
|
"targetDb=\\\"postgresql\\\"" \
|
167
|
"url=\\\"${db_url}\\\"" \
|
168
|
"uid=\\\"${dbuser}\\\"" \
|
169
|
"pw=\\\"${dbuser_pw}\\\"" \
|
170
|
"dataPath=\\\"${dump_dir_name}/${item}/\\\"" \
|
171
|
"maxThreads=4" \
|
172
|
schema/import \
|
173
|
${reldata_dir_name}/ \
|
174
|
${item}.p2o"
|
175
|
|
176
|
echo "Performing cmd=$cmd"
|
177
|
eval $cmd
|
178
|
else
|
179
|
echo "WARNING: no data import requested."
|
180
|
fi
|
181
|
done
|
182
|
|
183
|
unset PGPASSWORD
|
184
|
rm -fr $temp_dir
|
185
|
|