forked from keephq/helm-charts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlocal_test_postgresql.sh
201 lines (179 loc) Β· 5.17 KB
/
local_test_postgresql.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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#!/bin/bash
# Create a debug folder and values file
mkdir -p debug
cat <<EOF > debug/postgresql-values.yaml
global:
ingress:
enabled: true
className: nginx
websocketPrefix: /websocket
backendPrefix: /v2
frontendPrefix: /
frontend:
enabled: true
backend:
enabled: true
waitForDatabase:
enabled: true
port: 5432
env:
- name: DATABASE_CONNECTION_STRING
value: "postgresql+psycopg2://postgres:mysecretpassword@keep-database:5432/keep"
- name: DATABASE_NAME
value: keep-database
- name: SECRET_MANAGER_TYPE
value: k8s
- name: PORT
value: "8080"
- name: PUSHER_APP_ID
value: 1
- name: PUSHER_APP_KEY
value: keepappkey
- name: PUSHER_APP_SECRET
value: keepappsecret
- name: PUSHER_HOST
value: keep-websocket
- name: PUSHER_PORT
value: "6001"
- name: PROMETHEUS_MULTIPROC_DIR
value: "/tmp/prometheus"
websocket:
enabled: true
database:
enabled: true
type: postgres
postgres:
image:
repository: postgres
tag: "15.3"
env:
- name: POSTGRES_DB
value: keep
- name: POSTGRES_PASSWORD
value: mysecretpassword
port: 5432
config:
maxConnections: 100
sharedBuffers: 128MB
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1Gi"
EOF
# Create Kind cluster with ingress ports exposed
cat <<EOF > debug/kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF
# Function to check service/pod status
check_status() {
echo "π Checking all resources..."
kubectl get pods -A
kubectl get svc -A
kubectl get ingress -A
}
# Function to check if a command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Check required tools
for tool in kind kubectl helm wscat curl; do
if ! command_exists "$tool"; then
echo "β Required tool not found: $tool"
exit 1
fi
done
# Create cluster
echo "π Creating Kind cluster..."
kind create cluster --config debug/kind-config.yaml
# Install NGINX Ingress Controller
echo "π¦ Installing NGINX Ingress Controller..."
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
# Wait for NGINX ingress controller
echo "β³ Waiting for NGINX ingress controller..."
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
# Install your chart
echo "π Installing Keep chart with PostgreSQL..."
helm install keep ./charts/keep -f debug/postgresql-values.yaml
# Wait for database to be ready
echo "β³ Waiting for PostgreSQL database to be ready..."
kubectl wait --namespace default \
--for=condition=ready pod \
--selector=app.kubernetes.io/instance=keep,keep-component=database \
--timeout=120s
# Wait for all Keep components to be ready
for component in frontend backend websocket; do
echo "β³ Waiting for Keep $component to be ready..."
kubectl wait --namespace default \
--for=condition=ready pod \
--selector=app.kubernetes.io/instance=keep,keep-component=$component \
--timeout=120s
done
# Check status
check_status
# Function to test endpoint with retry
test_endpoint() {
local url=$1
local expected=$2
local max_attempts=5
local attempt=1
while [ $attempt -le $max_attempts ]; do
echo "Attempt $attempt of $max_attempts..."
RESP=$(curl -s "$url")
if [[ $RESP == *"$expected"* ]]; then
echo "β
Response contains expected content"
return 0
fi
echo "β³ Waiting before retry..."
sleep 5
((attempt++))
done
echo "β Failed to get expected response after $max_attempts attempts"
return 1
}
# Test endpoints
echo "π§ͺ Testing endpoints..."
echo -e "\nFrontend (/) - Testing redirect:"
RESP=$(curl -s -I http://localhost/)
echo "$RESP" | grep "HTTP"
LOCATION=$(echo "$RESP" | grep -i "location")
echo "$LOCATION"
echo -e "\nBackend (/v2/docs) - Testing API docs:"
test_endpoint "http://localhost/v2/docs" "Rest API powering"
echo -e "\nWebSocket (/websocket) - Testing connection:"
timeout 5 wscat -c "ws://localhost/websocket/app/keepappkey?protocol=7&client=js&version=8.3.0&flash=false" || true
# Test PostgreSQL connection
echo -e "\nπ Testing PostgreSQL connection..."
kubectl exec -it $(kubectl get pod -l keep-component=database -o jsonpath="{.items[0].metadata.name}") -- \
psql -U postgres -d keep -c "\l"
# Show recent logs
echo -e "\nπ Database logs:"
kubectl logs -l keep-component=database --tail=50
# Keep script running for debugging
echo -e "\nπ Debug session active. Press Ctrl+C to cleanup."
echo "π Quick commands:"
echo " - kubectl get pods -A"
echo " - kubectl describe ingress"
echo " - kubectl logs <pod-name>"
echo " - kubectl exec -it <database-pod> -- psql -U postgres -d keep"
echo " - curl -v http://localhost/"
echo " - curl -v http://localhost/v2/docs/"
echo " - curl -v -H \"Upgrade: websocket\" -H \"Connection: Upgrade\" http://localhost/websocket/"
# Cleanup on exit
trap "kind delete cluster" EXIT
read -r -d '' _ </dev/tty