apiVersion: v1 kind: ConfigMap metadata: name: {{ include "openvpn.fullname" . }}-routecheck data: route-check: | set -x while sleep 10 do date _cdr=$(mask2cdr {{ .Values.mask }}) ip link list {{ .Values.dev_name }} > /dev/null 2>&1 if [ $? -ne 0 ]; then __server_pod_ip=$(kubectl get po -o json | jq -r '.items[] | select(.metadata.labels.component=="application" and .metadata.labels["app.kubernetes.io/instance"]=="{{ .Release.Name }}" and .metadata.labels["app.kubernetes.io/name"]=="{{ include "openvpn.name" . }}" and .metadata.deletionTimestamp==null and .status.phase=="Running").status.podIP') if [ -z "$__server_pod_ip" ]; then ip route delete {{ .Values.net }}/$_cdr > /dev/null 2>&1 continue fi __route_ip=$(ip route get {{ .Values.net }}/$_cdr | awk '{print $3}') if [[ $__server_pod_ip != $__route_ip ]]; then ip route delete {{ .Values.net }}/$_cdr > /dev/null 2>&1 ip route add {{ .Values.net }}/$_cdr via $__server_pod_ip fi elif [ -z "$(ip route show to match {{ .Values.net }}/$_cdr | grep '{{ .Values.dev_name }}')" ]; then ip route add {{ .Values.net }}/$_cdr dev {{ .Values.dev_name }} elif [ ! -z "$(ip route show to match {{ .Values.net }}/$_cdr | grep -E -v 'default|{{ .Values.dev_name }}')" ]; then ip route delete $(ip route show to match {{ .Values.net }}/$_cdr | grep -E -v 'default|{{ .Values.dev_name }}') fi sleep 50 done route-delete: | ip route delete $(ip route show to match {{ .Values.net }}/$(mask2cdr {{ .Values.mask }}) | grep -E -v 'default|{{ .Values.dev_name }}')) > /dev/null 2>&1