Skip to content

Commit 35e9cb9

Browse files
committed
fix(kafka): delete release topics before the topic operator is removed
1 parent 9c7bfb8 commit 35e9cb9

3 files changed

Lines changed: 181 additions & 0 deletions

File tree

‎hack/e2e-chainsaw/kafka/chainsaw-test.yaml‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,20 @@ spec:
9999
apiVersion: apps.cozystack.io/v1alpha1
100100
kind: Kafka
101101
name: test
102+
- error:
103+
timeout: 2m
104+
resource:
105+
apiVersion: kafka.strimzi.io/v1beta2
106+
kind: KafkaTopic
107+
metadata:
108+
name: kafka-test-test-results
109+
- error:
110+
timeout: 2m
111+
resource:
112+
apiVersion: kafka.strimzi.io/v1beta2
113+
kind: KafkaTopic
114+
metadata:
115+
name: kafka-test-test-orders
102116
- error:
103117
timeout: 2m
104118
resource:
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
---
2+
apiVersion: batch/v1
3+
kind: Job
4+
metadata:
5+
name: {{ .Release.Name }}-pre-delete
6+
labels:
7+
app.kubernetes.io/instance: {{ .Release.Name }}
8+
annotations:
9+
"helm.sh/hook": pre-delete
10+
"helm.sh/hook-weight": "10"
11+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
12+
spec:
13+
activeDeadlineSeconds: 240
14+
backoffLimit: 0
15+
template:
16+
metadata:
17+
labels:
18+
app.kubernetes.io/instance: {{ .Release.Name }}
19+
policy.cozystack.io/allow-to-apiserver: "true"
20+
spec:
21+
serviceAccountName: {{ .Release.Name }}-pre-delete
22+
restartPolicy: Never
23+
terminationGracePeriodSeconds: 10
24+
securityContext:
25+
runAsNonRoot: true
26+
runAsUser: 65534
27+
runAsGroup: 65534
28+
seccompProfile:
29+
type: RuntimeDefault
30+
containers:
31+
- name: cleanup
32+
image: docker.io/clastix/kubectl:v1.32
33+
securityContext:
34+
allowPrivilegeEscalation: false
35+
readOnlyRootFilesystem: true
36+
capabilities:
37+
drop: ["ALL"]
38+
resources:
39+
requests:
40+
cpu: 10m
41+
memory: 64Mi
42+
limits:
43+
cpu: 200m
44+
memory: 128Mi
45+
env:
46+
- name: HOME
47+
value: /tmp
48+
command:
49+
- /bin/sh
50+
- -c
51+
- |
52+
set -eu
53+
echo "Deleting KafkaTopics for {{ .Release.Name }} before the topic-operator is removed"
54+
kubectl -n {{ .Release.Namespace }} delete kafkatopics.kafka.strimzi.io \
55+
-l 'strimzi.io/cluster={{ .Release.Name }}' \
56+
--ignore-not-found=true \
57+
--wait=true \
58+
--timeout=180s \
59+
--request-timeout=30s
60+
volumeMounts:
61+
- name: tmp
62+
mountPath: /tmp
63+
volumes:
64+
- name: tmp
65+
emptyDir: {}
66+
---
67+
apiVersion: v1
68+
kind: ServiceAccount
69+
metadata:
70+
name: {{ .Release.Name }}-pre-delete
71+
labels:
72+
app.kubernetes.io/instance: {{ .Release.Name }}
73+
annotations:
74+
"helm.sh/hook": pre-delete
75+
"helm.sh/hook-weight": "0"
76+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded,hook-failed
77+
---
78+
apiVersion: rbac.authorization.k8s.io/v1
79+
kind: Role
80+
metadata:
81+
name: {{ .Release.Name }}-pre-delete
82+
labels:
83+
app.kubernetes.io/instance: {{ .Release.Name }}
84+
annotations:
85+
"helm.sh/hook": pre-delete
86+
"helm.sh/hook-weight": "5"
87+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded,hook-failed
88+
rules:
89+
- apiGroups: ["kafka.strimzi.io"]
90+
resources: ["kafkatopics"]
91+
verbs: ["get", "list", "watch", "delete"]
92+
---
93+
apiVersion: rbac.authorization.k8s.io/v1
94+
kind: RoleBinding
95+
metadata:
96+
name: {{ .Release.Name }}-pre-delete
97+
labels:
98+
app.kubernetes.io/instance: {{ .Release.Name }}
99+
annotations:
100+
"helm.sh/hook": pre-delete
101+
"helm.sh/hook-weight": "5"
102+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded,hook-failed
103+
roleRef:
104+
apiGroup: rbac.authorization.k8s.io
105+
kind: Role
106+
name: {{ .Release.Name }}-pre-delete
107+
subjects:
108+
- kind: ServiceAccount
109+
name: {{ .Release.Name }}-pre-delete
110+
namespace: {{ .Release.Namespace }}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
suite: Kafka pre-delete cleanup
2+
3+
templates:
4+
- templates/delete.yaml
5+
6+
release:
7+
name: kafka-test
8+
namespace: tenant-test
9+
10+
tests:
11+
- it: deletes release-scoped KafkaTopics before removing the topic-operator
12+
asserts:
13+
- hasDocuments:
14+
count: 4
15+
- isKind:
16+
of: Job
17+
documentIndex: 0
18+
- equal:
19+
path: metadata.name
20+
value: kafka-test-pre-delete
21+
documentIndex: 0
22+
- equal:
23+
path: metadata.annotations["helm.sh/hook"]
24+
value: pre-delete
25+
documentIndex: 0
26+
- equal:
27+
path: spec.activeDeadlineSeconds
28+
value: 240
29+
documentIndex: 0
30+
- equal:
31+
path: spec.backoffLimit
32+
value: 0
33+
documentIndex: 0
34+
- matchRegex:
35+
path: spec.template.spec.containers[0].command[2]
36+
pattern: "strimzi\\.io/cluster=kafka-test"
37+
documentIndex: 0
38+
- matchRegex:
39+
path: spec.template.spec.containers[0].command[2]
40+
pattern: "--wait=true"
41+
documentIndex: 0
42+
- isKind:
43+
of: ServiceAccount
44+
documentIndex: 1
45+
- isKind:
46+
of: Role
47+
documentIndex: 2
48+
- contains:
49+
path: rules
50+
content:
51+
apiGroups: ["kafka.strimzi.io"]
52+
resources: ["kafkatopics"]
53+
verbs: ["get", "list", "watch", "delete"]
54+
documentIndex: 2
55+
- isKind:
56+
of: RoleBinding
57+
documentIndex: 3

0 commit comments

Comments
 (0)