Skip to content

Commit 033ca18

Browse files
committed
Let Sloppenheimer create a secret bootstrap job
1 parent 10a25ec commit 033ca18

3 files changed

Lines changed: 108 additions & 0 deletions

File tree

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
11
# Bundle OpenBao
22

33
A Helmetica bundle chart for OpenBao.
4+
5+
## Seal Secret Bootstrap
6+
7+
This chart includes a Helm `post-install` hook job that creates a seal secret with a random value.
8+
9+
- The job only runs on install (not upgrade).
10+
- If the secret already exists, the job exits without changing it.
11+
- Configure it through `sealSecret.*` in `values.yaml`.
12+
13+
Important: `sealSecret.name` must match `openbao.server.extraSecretEnvironmentVars[].secretName`.
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
{{- if .Values.sealSecret.enabled }}
2+
apiVersion: v1
3+
kind: ServiceAccount
4+
metadata:
5+
name: {{ .Release.Name }}-seal-secret-bootstrap
6+
annotations:
7+
helm.sh/hook: post-install
8+
helm.sh/hook-weight: "-10"
9+
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
10+
---
11+
apiVersion: rbac.authorization.k8s.io/v1
12+
kind: Role
13+
metadata:
14+
name: {{ .Release.Name }}-seal-secret-bootstrap
15+
annotations:
16+
helm.sh/hook: post-install
17+
helm.sh/hook-weight: "-10"
18+
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
19+
rules:
20+
- apiGroups: [""]
21+
resources: ["secrets"]
22+
verbs: ["get", "create"]
23+
---
24+
apiVersion: rbac.authorization.k8s.io/v1
25+
kind: RoleBinding
26+
metadata:
27+
name: {{ .Release.Name }}-seal-secret-bootstrap
28+
annotations:
29+
helm.sh/hook: post-install
30+
helm.sh/hook-weight: "-10"
31+
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
32+
subjects:
33+
- kind: ServiceAccount
34+
name: {{ .Release.Name }}-seal-secret-bootstrap
35+
roleRef:
36+
apiGroup: rbac.authorization.k8s.io
37+
kind: Role
38+
name: {{ .Release.Name }}-seal-secret-bootstrap
39+
---
40+
apiVersion: batch/v1
41+
kind: Job
42+
metadata:
43+
name: {{ .Release.Name }}-seal-secret-bootstrap
44+
annotations:
45+
helm.sh/hook: post-install
46+
helm.sh/hook-weight: "0"
47+
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
48+
spec:
49+
backoffLimit: 1
50+
template:
51+
spec:
52+
serviceAccountName: {{ .Release.Name }}-seal-secret-bootstrap
53+
restartPolicy: Never
54+
containers:
55+
- name: create-seal-secret
56+
image: {{ .Values.sealSecret.job.image | quote }}
57+
imagePullPolicy: {{ .Values.sealSecret.job.imagePullPolicy | quote }}
58+
command:
59+
- /bin/sh
60+
- -ec
61+
- |
62+
secret_name="{{ .Values.sealSecret.name }}"
63+
secret_key="{{ .Values.sealSecret.key }}"
64+
value_length="{{ .Values.sealSecret.length }}"
65+
66+
if kubectl get secret "$secret_name" >/dev/null 2>&1; then
67+
echo "Secret $secret_name already exists; leaving it unchanged."
68+
exit 0
69+
fi
70+
71+
secret_value="$(tr -dc 'A-Za-z0-9' </dev/urandom | head -c "$value_length")"
72+
cat <<EOF | kubectl create -f -
73+
apiVersion: v1
74+
kind: Secret
75+
metadata:
76+
name: "${secret_name}"
77+
type: Opaque
78+
immutable: true
79+
stringData:
80+
"${secret_key}": "${secret_value}"
81+
EOF
82+
echo "Created secret $secret_name."
83+
{{- end }}

values.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,21 @@ backup:
22
# backup retention in days
33
retention: 6
44

5+
'#sealSecret':
6+
export: false
7+
sealSecret:
8+
# Enable one-time bootstrap job that creates the secret on install.
9+
enabled: true
10+
# Must match openbao.server.extraSecretEnvironmentVars.secretName.
11+
name: dev-seal
12+
# Key used inside the secret data.
13+
key: SEAL_SECRET
14+
# Random value length generated by the job.
15+
length: 64
16+
job:
17+
image: quay.io/appuio/oc:v4.21
18+
imagePullPolicy: IfNotPresent
19+
520
'#openbao':
621
export: false
722
openbao:

0 commit comments

Comments
 (0)