Skip to content

Commit 50da14f

Browse files
Add pre-delete hook to strip GatewayClass finalizer on uninstall
Signed-off-by: Md. Istiak <mdistiak@appscode.com>
1 parent 7db6362 commit 50da14f

5 files changed

Lines changed: 162 additions & 0 deletions

File tree

charts/service-gateway/templates/_helpers.tpl

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,36 @@ Returns if ubi images are to be used
8181
{{- define "operator.ubi" -}}
8282
{{ ternary "-ubi" "" (list "operator" "all" | has (default (dig "ubi" "" (default dict .Values.distro)) .Values.global.distro.ubi)) }}
8383
{{- end }}
84+
85+
{{/*
86+
Create the name of the service account to use
87+
*/}}
88+
{{- define "appscode.serviceAccountName" -}}
89+
{{- if .Values.global.serviceAccount.create }}
90+
{{- default (include "service-gateway.fullname" .) .Values.global.serviceAccount.name }}
91+
{{- else if .Values.serviceAccount }}
92+
{{- default "default" .Values.serviceAccount.name }}
93+
{{- else }}
94+
{{- "default" }}
95+
{{- end }}
96+
{{- end }}
97+
98+
{{/*
99+
Returns the registry used for kubectl docker image
100+
*/}}
101+
{{- define "kubectl.registry" -}}
102+
{{- list .Values.global.registryFQDN (default .Values.kubectl.registry .Values.global.registry) | compact | join "/" }}
103+
{{- end }}
104+
105+
{{/*
106+
Returns the appscode image pull secrets
107+
*/}}
108+
{{- define "appscode.imagePullSecrets" -}}
109+
{{- with .Values.global.imagePullSecrets -}}
110+
imagePullSecrets:
111+
{{- toYaml . | nindent 2 }}
112+
{{- else -}}
113+
imagePullSecrets:
114+
{{- toYaml $.Values.imagePullSecrets | nindent 2 }}
115+
{{- end }}
116+
{{- end }}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{{- if .Values.cleaner.enabled -}}
2+
apiVersion: batch/v1
3+
kind: Job
4+
metadata:
5+
name: {{ include "service-gateway.fullname" . }}-gwclass-cleaner
6+
namespace: {{ .Release.Namespace }}
7+
annotations:
8+
"helm.sh/hook-weight": "0"
9+
"helm.sh/hook": pre-delete
10+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
11+
spec:
12+
backoffLimit: 3
13+
template:
14+
spec:
15+
{{- include "appscode.imagePullSecrets" . | nindent 6 }}
16+
serviceAccountName: {{ include "service-gateway.fullname" . }}-gwclass-cleaner
17+
automountServiceAccountToken: true
18+
securityContext:
19+
runAsNonRoot: true
20+
runAsUser: 65534
21+
seccompProfile:
22+
type: RuntimeDefault
23+
containers:
24+
- name: kubectl
25+
securityContext:
26+
allowPrivilegeEscalation: false
27+
capabilities:
28+
drop: ["ALL"]
29+
privileged: false
30+
readOnlyRootFilesystem: true
31+
runAsNonRoot: true
32+
runAsUser: 65534
33+
seccompProfile:
34+
type: RuntimeDefault
35+
image: "{{ include "kubectl.registry" . }}/{{ .Values.kubectl.repository }}:{{ .Values.kubectl.tag }}"
36+
imagePullPolicy: {{ .Values.kubectl.pullPolicy }}
37+
command:
38+
- /bin/sh
39+
- -c
40+
- |
41+
kubectl patch gatewayclass {{ include "tenant.name" . }} --type=merge -p '{"metadata":{"finalizers":null}}' || true
42+
restartPolicy: Never
43+
{{- end }}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{{- if .Values.cleaner.enabled -}}
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
kind: ClusterRole
4+
metadata:
5+
name: {{ include "service-gateway.fullname" . }}-gwclass-cleaner-{{ .Release.Namespace }}
6+
annotations:
7+
"helm.sh/hook-weight": "0"
8+
"helm.sh/hook": pre-delete
9+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
10+
rules:
11+
- apiGroups:
12+
- gateway.networking.k8s.io
13+
resources:
14+
- gatewayclasses
15+
verbs: ["get", "patch"]
16+
---
17+
18+
apiVersion: rbac.authorization.k8s.io/v1
19+
kind: ClusterRoleBinding
20+
metadata:
21+
name: {{ include "service-gateway.fullname" . }}-gwclass-cleaner-{{ .Release.Namespace }}
22+
annotations:
23+
"helm.sh/hook-weight": "0"
24+
"helm.sh/hook": pre-delete
25+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
26+
roleRef:
27+
apiGroup: rbac.authorization.k8s.io
28+
kind: ClusterRole
29+
name: {{ include "service-gateway.fullname" . }}-gwclass-cleaner-{{ .Release.Namespace }}
30+
subjects:
31+
- kind: ServiceAccount
32+
name: {{ include "service-gateway.fullname" . }}-gwclass-cleaner
33+
namespace: {{ .Release.Namespace }}
34+
{{- end }}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{{- if and .Values.cleaner.enabled .Values.global.serviceAccount.create -}}
2+
apiVersion: v1
3+
kind: ServiceAccount
4+
metadata:
5+
name: {{ include "service-gateway.fullname" . }}-gwclass-cleaner
6+
namespace: {{ .Release.Namespace }}
7+
annotations:
8+
"helm.sh/hook-weight": "0"
9+
"helm.sh/hook": pre-delete
10+
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
11+
{{- end }}

charts/service-gateway/values.yaml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,31 @@ global:
1414
# Set operator or all to use ubi images
1515
ubi: ""
1616

17+
# Docker registry used to pull app related images
18+
registry: ""
19+
20+
# Docker registry fqdn used to pull app related images.
21+
# Set this to use docker registry hosted at ${registryFQDN}/${registry}/${image}
22+
registryFQDN: ghcr.io
23+
24+
# Specify an array of imagePullSecrets.
25+
# Secrets must be manually created in the namespace.
26+
#
27+
# Example:
28+
# helm template charts/service-gateway \
29+
# --set global.imagePullSecrets[0].name=sec0 \
30+
# --set global.imagePullSecrets[1].name=sec1
31+
imagePullSecrets: []
32+
33+
serviceAccount:
34+
# Specifies whether a service account should be created
35+
create: true
36+
# Annotations to add to the service account
37+
annotations: {}
38+
# The name of the service account to use.
39+
# If not set and create is true, a name is generated using the fullname template
40+
name: ""
41+
1742
clusterMetadata:
1843
uid: tbd
1944
name: tbd
@@ -144,3 +169,19 @@ vaultServer:
144169
name: "vault"
145170
# Vault server namespace that exist on cluster
146171
namespace: "ace"
172+
173+
# Docker registry containing kubectl image
174+
kubectl:
175+
# Docker registry used to pull app container image
176+
registry: appscode
177+
# App container image
178+
repository: kubectl-nonroot
179+
# Overrides the image tag whose default is the chart appVersion.
180+
tag: "1.34"
181+
pullPolicy: IfNotPresent
182+
183+
# Pre-delete hook that strips the GatewayClass finalizer so the chart uninstalls cleanly.
184+
# Disabled by default. Enable when the envoy-gateway controller is deployed as a sub-chart
185+
# and shuts down before it can remove the finalizer.
186+
cleaner:
187+
enabled: false

0 commit comments

Comments
 (0)