apiVersion: batch/v1
kind: Job
metadata:
  annotations:
    "helm.sh/hook": pre-delete
    "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
  name: longhorn-uninstall
  namespace: {{ include "release_namespace" . }}
  labels: {{- include "longhorn.labels" . | nindent 4 }}
spec:
  activeDeadlineSeconds: 900
  backoffLimit: 1
  template:
    metadata:
      name: longhorn-uninstall
      labels: {{- include "longhorn.labels" . | nindent 8 }}
    spec:
      containers:
      - name: longhorn-uninstall
        image: {{ with (coalesce .Values.global.imageRegistry (include "registry_url" .) .Values.image.longhorn.manager.registry) }}{{ . }}/{{ end }}{{ .Values.image.longhorn.manager.repository }}:{{ .Values.image.longhorn.manager.tag }}
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        command:
        - longhorn-manager
        - uninstall
        - --force
        env:
        - name: LONGHORN_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        {{- include "longhorn.timezoneEnv" . | nindent 8 }}
      restartPolicy: Never
      {{- with (coalesce .Values.global.imagePullSecrets .Values.privateRegistry.registrySecret) }}
      imagePullSecrets:
        {{- $imagePullSecrets := list }}
        {{- if kindIs "string" . }}
          {{- $imagePullSecrets = append $imagePullSecrets (dict "name" .) }}
        {{- else }}
          {{- range . }}
            {{- if kindIs "string" . }}
                {{- $imagePullSecrets = append $imagePullSecrets (dict "name" .) }}
            {{- else }}
                {{- $imagePullSecrets = append $imagePullSecrets . }}
            {{- end }}
          {{- end }}
        {{- end }}
        {{- toYaml $imagePullSecrets | nindent 8 }}
      {{- end }}
      {{- if .Values.longhornManager.priorityClass }}
      priorityClassName: {{ .Values.longhornManager.priorityClass | quote }}
      {{- end }}
      serviceAccountName: longhorn-service-account
      {{- if or .Values.global.tolerations .Values.longhornManager.tolerations .Values.global.cattle.windowsCluster.enabled }}
      tolerations:
        {{- if and .Values.global.cattle.windowsCluster.enabled .Values.global.cattle.windowsCluster.tolerations }}
{{ toYaml .Values.global.cattle.windowsCluster.tolerations | indent 6 }}
        {{- end }}
        {{- if or .Values.global.tolerations .Values.longhornManager.tolerations }}
{{ default .Values.global.tolerations .Values.longhornManager.tolerations | toYaml | indent 6 }}
        {{- end }}
      {{- end }}
      {{- if or .Values.global.nodeSelector .Values.longhornManager.nodeSelector .Values.global.cattle.windowsCluster.enabled }}
      nodeSelector:
        {{- if and .Values.global.cattle.windowsCluster.enabled .Values.global.cattle.windowsCluster.nodeSelector }}
{{ toYaml .Values.global.cattle.windowsCluster.nodeSelector | indent 8 }}
        {{- end }}
        {{- if or .Values.global.nodeSelector .Values.longhornManager.nodeSelector }}
{{ default .Values.global.nodeSelector .Values.longhornManager.nodeSelector | toYaml | indent 8 }}
        {{- end }}
      {{- end }}
