-
Notifications
You must be signed in to change notification settings - Fork 1
/
ps-client.sh
executable file
·111 lines (100 loc) · 2.34 KB
/
ps-client.sh
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
#!/usr/bin/env bash
usage() {
echo "Usage: $(basename "$0") --namespace <ns> --cluster <cluster> --endpoint <service>"
exit 1
}
main() {
local cluster=""
local namespace=""
local username="root"
local password=""
local endpoint=""
local pod=""
local port=""
while [[ $# -gt 0 ]]; do
key="$1"
case "${key}" in
-h | --help)
usage
exit 0
;;
-c | --cluster)
cluster="$2"
shift
shift
;;
-n | --namespace)
namespace="$2"
shift
shift
;;
-u | --user)
username="$2"
shift
shift
;;
-p | --password)
password="$2"
shift
shift
;;
-e | --endpoint)
endpoint="$2"
shift
shift
;;
-o | --pod)
pod="$2"
shift
shift
;;
-P | --port)
port="$2"
shift
shift
;;
*)
echo "unknown flag or option ${key}"
usage
exit 1
;;
esac
done
if [[ -z ${namespace} ]]; then
namespace=$(kubectl config view --minify --output 'jsonpath={..namespace}')
fi
if [[ -z ${cluster} ]]; then
cluster=$(kubectl get ps --output name ${namespace:+--namespace $namespace} 2>/dev/null | sed 's:^perconaservermysql.ps.percona.com/::')
if [ "$(echo "${cluster}" | wc -l)" -gt 1 ]; then
echo "There's more than one cluster, please specify --cluster <cluster> !"
exit 1
elif [ -z "${cluster}" ]; then
echo "No cluster available in the namespace!"
exit 1
fi
fi
if [[ -z "${pod}" ]]; then
if [[ -z "${endpoint}" ]]; then
endpoint=$(kubectl get ps "${cluster}" -ojsonpath='{.status.host}')
fi
else
endpoint="127.0.0.1"
port="3306"
fi
if [[ -z "${port}" && $(echo "${endpoint}" | grep "router") ]]; then
port="6446"
elif [[ -z "${port}" ]]; then
port="3306"
fi
if [[ -z ${password} ]]; then
password=$(kubectl get secrets $(kubectl get ps "${cluster}" -ojsonpath='{.spec.secretsName}') -otemplate='{{.data.'"${username}"' | base64decode}}')
fi
if [[ -z ${pod} ]]; then
echo -e "### Connecting to MySQL at host: ${endpoint}:${port} ###\n"
kubectl run -it --rm percona-client-${RANDOM} --image=percona/percona-server:8.0 --restart=Never -- mysql -h"${endpoint}" -P"${port}" -u"${username}" -p"${password}"
else
echo -e "### Connecting to MySQL from inside pod: ${pod} ###\n"
kubectl exec -it "${pod}" -c mysql -- mysql -h"${endpoint}" -P"${port}" -u"${username}" -p"${password}"
fi
}
main "$@" || exit 1