cluster-service/cspr/orphaned-namespace-cleaner.yaml (77 lines of code) (raw):

apiVersion: template.openshift.io/v1 kind: Template metadata: name: orphaned-namespace-cleaner parameters: - name: ORPHANED_NAMESPACE_CLEANER_NAMESPACE description: The namespace to create to have a cronjob which will delete the orphaned namespace which are not deleted due to any issues with the jenkins job. value: orphaned-namespace-cleaner - name: ORPHANED_NAMESPACE_CLEANER_CLUSTERROLE_NAME value: orphaned-namespace-cleaner - name: KUBECTL_IMAGE description: An image which have the `kubectl` binary in it. value: quay.io/rhn_support_ansverma/ubi8-minimal-kubectl:latest objects: - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: ${ORPHANED_NAMESPACE_CLEANER_CLUSTERROLE_NAME} rules: - apiGroups: - "" resources: - namespaces verbs: ["get", "list", "delete", "watch"] - apiVersion: v1 kind: Namespace metadata: name: ${ORPHANED_NAMESPACE_CLEANER_NAMESPACE} - apiVersion: v1 kind: ServiceAccount metadata: name: orphaned-namespace-cleaner-cronjob namespace: ${ORPHANED_NAMESPACE_CLEANER_NAMESPACE} - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: orphaned-namespace-cleaner-cronjob subjects: - kind: ServiceAccount name: orphaned-namespace-cleaner-cronjob namespace: ${ORPHANED_NAMESPACE_CLEANER_NAMESPACE} roleRef: kind: ClusterRole name: ${ORPHANED_NAMESPACE_CLEANER_CLUSTERROLE_NAME} apiGroup: rbac.authorization.k8s.io - apiVersion: batch/v1 kind: CronJob metadata: name: orphaned-namespace-cleaner namespace: ${ORPHANED_NAMESPACE_CLEANER_NAMESPACE} spec: schedule: "0 0 * * *" successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 1 jobTemplate: spec: template: spec: serviceAccountName: orphaned-namespace-cleaner-cronjob containers: - name: kubectl-container image: ${KUBECTL_IMAGE} command: ["/bin/sh", "-c"] args: - | echo "Starting to clear orphaned namespaces" # `select((now - (.metadata.creationTimestamp | fromdate)) / 120 > 120)` selects the namespaces which are older than 120 minutes. NAMESPACES=$(kubectl get namespaces -o json | jq -r '.items[] | select(.metadata.labels."sandbox-jenkins-type"=="aro-hcp") | select((now - (.metadata.creationTimestamp | fromdate)) / 120 > 120) | .metadata.name') NUMBER_OF_NAMESPACES=$(printf "%s" "$NAMESPACES" | wc -l); if [ $NUMBER_OF_NAMESPACES -lt 1 ]; then echo "no namespaces matching the criteria to delete, exiting" exit 0 fi echo "following orphaned namespaces will be delete - \n$NAMESPACES" echo "deleting the orphaned namespaces" echo $NAMESPACES | xargs kubectl delete namespace echo "Script execution completed." restartPolicy: Never