Skip to content

Commit 29a5482

Browse files
committed
feat: add last-used-stamper cronjob
1 parent 56e5b2c commit 29a5482

2 files changed

Lines changed: 98 additions & 1 deletion

File tree

helm/blueapi/templates/configmap.yaml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,31 @@ data:
3131
init_config.yaml: |-
3232
scratch:
3333
{{- toYaml .Values.worker.scratch | nindent 6 }}
34+
35+
---
3436
{{- end }}
3537

36-
---
38+
apiVersion: v1
39+
kind: ConfigMap
40+
metadata:
41+
name : {{include "blueapi.fullname" . }}-pvc-stamper-script
42+
data:
43+
time-stamper.sh: |
44+
#!/bin/sh
45+
# Get PVCs belonging to this blueapi release
46+
ALL_PVC=$(kubectl get pvc -n {{ .Release.Namespace }} \
47+
-o jsonpath='{.items[*].metadata.name}' | tr ' ' '\n' | \
48+
grep "^{{ .Release.Name }}-scratch-")
49+
# Get all PVCs currently mounted by running pods
50+
MOUNTED_PVCS=$(kubectl get pods -n {{ .Release.Namespace }} \
51+
-o=jsonpath='{.items[*].spec.volumes[*].persistentVolumeClaim.claimName}' | tr ' ' '\n' | sort -u)
52+
NOW=$(date +%s)
53+
#loop through all the pvcs annotating ones thare are mounted or lack a last-used stamp
54+
for pvc in $ALL_PVC; do
55+
ANNOTATION=$(kubectl get pvc "$pvc" -n {{ .Release.Namespace }} -o=jsonpath='{.metadata.annotations.last-used}')
56+
if [ -z "$ANNOTATION" ]; then
57+
kubectl annotate --overwrite pvc "$pvc" -n {{ .Release.Namespace }} last-used="$NOW"
58+
elif echo "$MOUNTED_PVCS" | grep -qx "$pvc"; then
59+
kubectl annotate --overwrite pvc "$pvc" -n {{ .Release.Namespace }} last-used="$NOW"
60+
fi
61+
done
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: {{ include "blueapi.fullname" . }}-last-used-stamper
5+
namespace: {{ .Release.Namespace }}
6+
automountServiceAccountToken: true
7+
---
8+
apiVersion: rbac.authorization.k8s.io/v1
9+
kind: Role
10+
metadata:
11+
name: {{ include "blueapi.fullname" . }}-last-used-stamper
12+
namespace: {{ .Release.Namespace }}
13+
rules:
14+
- apiGroups: [""]
15+
resources: ["pods", "persistentvolumeclaims"]
16+
verbs: ["get", "list", "patch"]
17+
---
18+
apiVersion: rbac.authorization.k8s.io/v1
19+
kind: RoleBinding
20+
metadata:
21+
name: {{ include "blueapi.fullname" . }}-last-used-stamper
22+
namespace: {{ .Release.Namespace }}
23+
subjects:
24+
- kind: ServiceAccount
25+
name: {{ include "blueapi.fullname" . }}-last-used-stamper
26+
namespace: {{ .Release.Namespace }}
27+
roleRef:
28+
kind: Role
29+
name: {{ include "blueapi.fullname" . }}-last-used-stamper
30+
apiGroup: rbac.authorization.k8s.io
31+
---
32+
apiVersion: batch/v1
33+
kind: CronJob
34+
metadata:
35+
name: {{ include "blueapi.fullname" . }}-last-used-stamper
36+
namespace: {{ .Release.Namespace }}
37+
spec:
38+
concurrencyPolicy: Forbid
39+
successfulJobsHistoryLimit: 3
40+
failedJobsHistoryLimit: 1
41+
schedule: "*/5 * * * *"
42+
43+
jobTemplate:
44+
spec:
45+
# amount of attempts of labeling a pvc
46+
backoffLimit: 3
47+
# job stops after 60 secounds
48+
activeDeadlineSeconds: 60
49+
template:
50+
spec:
51+
serviceAccountName: {{ include "blueapi.fullname" . }}-last-used-stamper
52+
{{- with .Values.tolerations }}
53+
tolerations:
54+
{{- toYaml . | nindent 12 }}
55+
{{- end }}
56+
57+
volumes:
58+
- name : {{include "blueapi.fullname" . }}-pvc-stamper-script
59+
configMap:
60+
name: {{include "blueapi.fullname" . }}-pvc-stamper-script
61+
defaultMode: 0555
62+
63+
64+
containers:
65+
- name: last-used-stamper
66+
volumeMounts:
67+
- name: {{include "blueapi.fullname" . }}-pvc-stamper-script
68+
mountPath: /scripts
69+
image: bitnami/kubectl:latest
70+
imagePullPolicy: IfNotPresent
71+
command: ["/scripts/time-stamper.sh"]
72+
restartPolicy: OnFailure

0 commit comments

Comments
 (0)