Таким образом, в целом этого можно достичь, задав тип ресурса Job
.Задание будет блокировать Тиллера, пока оно не будет завершено.
Здесь есть небольшая проблема: если задание не будет завершено, оно будет блокировать развертывание диаграммы Хелма на бесконечное время.Чтобы избежать этого, нужно установить spec.activeDeadlineSeconds
.Это приведет к истечению времени выполнения задания, если оно не будет завершено до установленного временного предела.
apiVersion: batch/v1
kind: Job
metadata:
name: "{{ .Release.Name }}-database-connection-test"
annotations:
"helm.sh/hook": pre-install,test-success
"helm.sh/hook-delete-policy": before-hook-creation
spec:
ttlSecondsAfterFinished: 300
backoffPolicy: 1
activeDeadlineSeconds: 100
template:
spec:
containers:
- name: {{ .Release.Name }}-database-connection-test
image: {{ template "mongo.image" . }}
imagePullPolicy: Always
env:
- name: HOST
value: {{ .Values.mongo.host }}
- name: PORT
value: {{ .Values.mongo.port | quote }}
- name: DATABASE_NAME
value: {{ .Values.mongo.databasename }}
- name: USERNAME
value: {{ .Values.mongo.username }}
- name: PASSWORD
value: {{ .Values.mongo.password }}
command: ["sh", "-c", "mongo --username $USERNAME --password $PASSWORD --authenticationDatabase $DATABASE_NAME --host $HOST --port $PORT"]
restartPolicy: Never
Это своего рода обходной путь, потому что изначально тестовая аннотация Helm не должна использоваться вместе с другими перехватчиками.