Skip to content

Commit fbdc434

Browse files
committed
feat(marketplace): add pre-delete job to check for SpinApp(Executor) CRs
Signed-off-by: Vaughn Dice <[email protected]>
1 parent 793a4f6 commit fbdc434

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: "{{ .Release.Name }}-pre-delete"
5+
labels:
6+
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
7+
app.kubernetes.io/instance: {{ .Release.Name | quote }}
8+
app.kubernetes.io/version: {{ .Chart.AppVersion }}
9+
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
10+
annotations:
11+
"helm.sh/hook": pre-delete
12+
"helm.sh/hook-weight": "3"
13+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
14+
spec:
15+
template:
16+
metadata:
17+
name: "{{ .Release.Name }}"
18+
labels:
19+
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
20+
app.kubernetes.io/instance: {{ .Release.Name | quote }}
21+
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
22+
spec:
23+
restartPolicy: Never
24+
serviceAccountName: {{ .Release.Name }}-pre-delete
25+
containers:
26+
- name: pre-delete-job
27+
image: {{ printf "%s/%s:%s" .Values.global.azure.images.kubectl.registry .Values.global.azure.images.kubectl.image .Values.global.azure.images.kubectl.tag }}
28+
imagePullPolicy: IfNotPresent
29+
command: ["/bin/bash", "-c"]
30+
args:
31+
- |-
32+
# Prevent deletion if one or more SpinApps still exist on the cluster
33+
spinapp_count="$(kubectl get spinapps.core.spinoperator.dev --all-namespaces -o name | wc -l)"
34+
if [[ $spinapp_count -gt 0 ]]; then
35+
echo "There are $spinapp_count SpinApps still existing on the cluster; aborting helm release deletion."
36+
echo "Remove these resources before attempting to delete the helm release."
37+
exit 1
38+
fi
39+
40+
# Prevent deletion if one or more SpinAppExecutors still exist on the cluster
41+
# (Not counting the containerd-shim-spin SpinAppExecutor installed as part of the post-install job)
42+
spinappexecutor_count="$(kubectl get spinappexecutors.core.spinoperator.dev --all-namespaces -o name | grep -v containerd-shim-spin | wc -l)"
43+
if [[ $spinappexecutor_count -gt 0 ]]; then
44+
echo "There are $spinappexecutor_count SpinAppExecutors still existing on the cluster; aborting helm release deletion."
45+
echo "Remove these resources before attempting to delete the helm release."
46+
exit 1
47+
fi
48+
49+
# Delete the containerd-shim-spin SpinAppExecutor installed as part of the post-install-job
50+
kubectl delete --namespace default spinappexecutors.core.spinoperator.dev containerd-shim-spin
51+
---
52+
apiVersion: v1
53+
kind: ServiceAccount
54+
metadata:
55+
name: {{ .Release.Name }}-pre-delete
56+
labels:
57+
app.kubernetes.io/component: rbac
58+
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
59+
app.kubernetes.io/instance: {{ .Release.Name | quote }}
60+
app.kubernetes.io/version: {{ .Chart.AppVersion }}
61+
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
62+
annotations:
63+
"helm.sh/hook": pre-delete
64+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
65+
"helm.sh/hook-weight": "1"
66+
---
67+
apiVersion: rbac.authorization.k8s.io/v1
68+
kind: ClusterRole
69+
metadata:
70+
name: {{ .Release.Name }}-pre-delete-role
71+
labels:
72+
app.kubernetes.io/component: rbac
73+
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
74+
app.kubernetes.io/instance: {{ .Release.Name | quote }}
75+
app.kubernetes.io/version: {{ .Chart.AppVersion }}
76+
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
77+
annotations:
78+
"helm.sh/hook": pre-delete
79+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
80+
"helm.sh/hook-weight": "1"
81+
rules:
82+
- apiGroups:
83+
- core.spinoperator.dev
84+
resources:
85+
- spinapps
86+
- spinappexecutors
87+
verbs:
88+
- get
89+
- list
90+
- watch
91+
- delete
92+
---
93+
apiVersion: rbac.authorization.k8s.io/v1
94+
kind: ClusterRoleBinding
95+
metadata:
96+
name: '{{ .Release.Name }}-pre-delete-rolebinding'
97+
labels:
98+
app.kubernetes.io/component: rbac
99+
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
100+
app.kubernetes.io/instance: {{ .Release.Name | quote }}
101+
app.kubernetes.io/version: {{ .Chart.AppVersion }}
102+
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
103+
annotations:
104+
"helm.sh/hook": pre-delete
105+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
106+
"helm.sh/hook-weight": "2"
107+
roleRef:
108+
apiGroup: rbac.authorization.k8s.io
109+
kind: ClusterRole
110+
name: '{{ .Release.Name }}-pre-delete-role'
111+
subjects:
112+
- kind: ServiceAccount
113+
name: '{{ .Release.Name }}-pre-delete'
114+
namespace: '{{ .Release.Namespace }}'

0 commit comments

Comments
 (0)