/
psql.yaml
61 lines (56 loc) · 1.81 KB
/
psql.yaml
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
---
apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
name: psql-backup
spec:
schedule: "0 0 1 * *"
startingDeadlineSeconds: 0
suspend: false
workflowSpec:
entrypoint: backup
templates:
- name: backup
container:
name: backup
command:
- sh
- '-c'
- |
apk add -U bash curl aws-cli pigz >/dev/null 2>&1
apk add -U postgresql16-client --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main
aws configure set default.s3.signature_version s3v4
cat <<EOF >run.sh
_filename=/tmp/\$(date '+%Y%m%d%H%M%S').gz
pg_dump \${PSQL_CONNECTION_STRING} | pigz --best > \${_filename}
aws --endpoint-url http://minio.consul.marcyoung.us:9000 s3 cp \${_filename} s3://backups/psql/
curl -XPOST -H 'Content-Type: application/json' \${ZAPIER_WEBHOOK_URL} -d '{"message": "psql backup complete"}'
EOF
cat run.sh
bash run.sh
image: alpine:latest
env:
- name: ZAPIER_WEBHOOK_URL
valueFrom:
secretKeyRef:
key: ZAPIER_WEBHOOK_URL
name: argowf
- name: AWS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
key: MINIO_ACCESS_KEY_ID
name: argowf
- name: AWS_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
key: MINIO_SECRET_ACCESS_KEY
name: argowf
- name: PSQL_CONNECTION_STRING
valueFrom:
secretKeyRef:
key: PSQL_CONNECTION_STRING
name: argowf
- name: "psql-backup"
steps:
- - name: "backup"
template: backup