Skip to content

Commit 3d6f35b

Browse files
committed
Added initContainers to wait for db and it's bootstrap.
1 parent 66a0731 commit 3d6f35b

File tree

5 files changed

+70
-3
lines changed

5 files changed

+70
-3
lines changed

.github/workflows/helm-tests.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ jobs:
8383
helm dependency build eoapi
8484
8585
helm install $RELEASE_NAME \
86-
--namespace default \
8786
-f ./eoapi/values.yaml \
8887
-f ./eoapi/test-k3s-unittest-values.yaml \
8988
./eoapi
@@ -100,7 +99,6 @@ jobs:
10099
timeout-minutes: 10
101100
continue-on-error: true
102101
run: |
103-
kubectl config set-context --current --namespace=default
104102
while [[ -z "$(kubectl get pod | grep "^raster-$RELEASE_NAME-.*$" | cut -d' ' -f1 | xargs -I{} kubectl logs pod/{} | grep "GET /.*/healthz" | head -n 1)" ]]; do
105103
echo "still waiting for raster service to start..."
106104
sleep 1
@@ -136,7 +134,6 @@ jobs:
136134
kubectl get ingress --all-namespaces -o jsonpath='{range .items[0]}kubectl describe ingress {.metadata.name} -n {.metadata.namespace}{end}' | sh
137135
kubectl get middleware.traefik.io --all-namespaces -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name' --no-headers | while read -r namespace name; do kubectl describe middleware.traefik.io "$name" -n "$namespace"; done
138136
139-
kubectl config set-context --current --namespace=default
140137
PUBLICIP='http://'$(kubectl -n kube-system get svc traefik -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
141138
export VECTOR_ENDPOINT=$PUBLICIP/vector$RELEASE_NAME
142139
export STAC_ENDPOINT=$PUBLICIP/stac$RELEASE_NAME

helm-chart/eoapi/initdb-data/pgstac-setup.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
#! /usr/bin/env python3
2+
3+
# This script is used to setup the pgstac database.
4+
# It is run as a job in the pgstacbootstrap pod.
5+
# It is important that this script and all of its steps are idempotent.
6+
17
import os
28
import psycopg
39
from psycopg import sql

helm-chart/eoapi/templates/pgstacboostrap/job.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ spec:
1313
app: pgstacbootstrap
1414
spec:
1515
restartPolicy: Never
16+
initContainers:
17+
- name: wait-for-db
18+
image: busybox
19+
command:
20+
{{ if .Values.testing }}
21+
['sh', '-c', 'until nc -z {{ $.Release.Name }}-pgbouncer 5432; do echo waiting for db; sleep 10; done;']
22+
{{ else }}
23+
['sh', '-c', 'until nc -z eoapi-pgbouncer 5432; do echo waiting for db; sleep 10; done;']
24+
{{ end }}
1625
containers:
1726
- name: pgstacbootstrap
1827
image: {{ .Values.pgstacBootstrap.image.name }}:{{ .Values.pgstacBootstrap.image.tag }}

helm-chart/eoapi/templates/services/deployment.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,22 @@ spec:
2929
labels:
3030
app: {{ $serviceName }}-{{ $.Release.Name }}
3131
spec:
32+
serviceAccountName: {{ $serviceName }}-sa-{{ $.Release.Name }}
33+
{{- if eq $serviceName "stac" }}
34+
initContainers:
35+
- name: wait-for-pgstacbootstrap
36+
image: bitnami/kubectl:latest
37+
command:
38+
- /bin/sh
39+
- -c
40+
- |
41+
echo "Waiting for pgstacbootstrap job to complete..."
42+
while ! kubectl -n {{ $.Release.Namespace }} wait --for=condition=complete job/pgstacbootstrap --timeout=5s; do
43+
echo "pgstacbootstrap job not completed yet. Checking again in 10 seconds..."
44+
sleep 10
45+
done
46+
echo "pgstacbootstrap job completed successfully"
47+
{{- end }}
3248
containers:
3349
- image: {{ index $v "image" "name" }}:{{ index $v "image" "tag" }}
3450
name: {{ $serviceName }}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{{- range $serviceName, $v := .Values -}}
2+
{{- if has $serviceName $.Values.apiServices }}
3+
{{- if index $v "enabled" }}
4+
---
5+
apiVersion: v1
6+
kind: ServiceAccount
7+
metadata:
8+
name: {{ $serviceName }}-sa-{{ $.Release.Name }}
9+
labels:
10+
app: {{ $serviceName }}-{{ $.Release.Name }}
11+
---
12+
apiVersion: rbac.authorization.k8s.io/v1
13+
kind: Role
14+
metadata:
15+
name: {{ $serviceName }}-role-{{ $.Release.Name }}
16+
labels:
17+
app: {{ $serviceName }}-{{ $.Release.Name }}
18+
rules:
19+
- apiGroups: ["batch"]
20+
resources: ["jobs"]
21+
verbs: ["get", "list", "watch"]
22+
---
23+
apiVersion: rbac.authorization.k8s.io/v1
24+
kind: RoleBinding
25+
metadata:
26+
name: {{ $serviceName }}-rolebinding-{{ $.Release.Name }}
27+
labels:
28+
app: {{ $serviceName }}-{{ $.Release.Name }}
29+
subjects:
30+
- kind: ServiceAccount
31+
name: {{ $serviceName }}-sa-{{ $.Release.Name }}
32+
namespace: {{ $.Release.Namespace }}
33+
roleRef:
34+
kind: Role
35+
name: {{ $serviceName }}-role-{{ $.Release.Name }}
36+
apiGroup: rbac.authorization.k8s.io
37+
{{- end }}
38+
{{- end }}
39+
{{- end }}

0 commit comments

Comments
 (0)