@@ -16,60 +16,68 @@ spec:
1616 spec :
1717 containers :
1818 - name : patch-configmap
19- image : bitnami /kubectl:latest
19+ image : bitnamisecure /kubectl:latest
2020 command :
2121 - /bin/sh
2222 - -c
2323 args :
2424 - |
2525 set -e
2626 echo "Patching config.yaml inside ConfigMap..."
27- kubectl get configmap {{ include "lmutil.fullname" . }} -n {{ .Release.Namespace }} -o json | jq -r '.data["config.yaml"]' | yq e -P - >> /tmp/new-config.yaml
27+ kubectl get configmap {{ include "lmutil.fullname" . }} -n {{ .Release.Namespace }} -o yaml | yq '.data["config.yaml"]' >> /tmp/new-config.yaml
2828
29- echo "🔍 Checking for kube-state-metrics in namespace {{ .Release.Namespace }}..."
29+ KSM_URL="{{ .Values.ksmUrl }}"
30+ if [ -n "$KSM_URL" ] && [ "$KSM_URL" != "null" ]; then
31+ echo "Using user-provided kube-state-metrics URL: $KSM_URL"
32+ else
33+ echo "🔍 Checking for kube-state-metrics in namespace {{ .Release.Namespace }}..."
34+
35+ # First, check in the current namespace
36+ KSM_SVC=$(kubectl get svc -n {{ .Release.Namespace }} -l app.kubernetes.io/name=kube-state-metrics -o json | jq -r '.items[0]')
3037
31- # First, check in the current namespace
32- KSM_SVC=$(kubectl get svc -n {{ .Release.Namespace }} -l app.kubernetes.io/name=kube-state-metrics -o json | jq -r '.items[0]')
38+ if [ -n "$KSM_SVC" ] && [ "$KSM_SVC" != "null" ]; then
39+ echo "✅ Found kube-state-metrics in namespace {{ .Release.Namespace }}"
40+ else
41+ echo "⚠️ Not found in {{ .Release.Namespace }}, searching all namespaces..."
3342
34- if [ -n "$KSM_SVC" ] && [ "$KSM_SVC" != "null" ]; then
35- echo "✅ Found kube-state-metrics in namespace {{ .Release.Namespace }}"
36- else
37- echo "⚠️ Not found in {{ .Release.Namespace }}, searching all namespaces..."
43+ # Search all namespaces
44+ KSM_SVC=$(kubectl get svc --all-namespaces -l app.kubernetes.io/name=kube-state-metrics -o json | jq -r '.items[0]')
3845
39- # Search all namespaces
40- KSM_SVC=$(kubectl get svc --all-namespaces -l app.kubernetes.io/name=kube-state-metrics -o json | jq -r '.items[0]')
46+ if [ -z "$KSM_SVC" ] || [ "$KSM_SVC" = "null" ]; then
47+ echo "❌ kube-state-metrics service not found anywhere."
48+ # exit 1
49+ fi
50+ fi
4151
42- if [ -z "$KSM_SVC" ] || [ "$KSM_SVC" = "null" ]; then
43- echo "❌ kube-state-metrics service not found anywhere."
44- # exit 1
45- fi
46- fi
52+ # Extract namespace, ClusterIP, and port
53+ SERVICE_NAME=$( echo "$KSM_SVC" | jq -r '.metadata.name')
54+ KSM_NAMESPACE=$(echo "$KSM_SVC" | jq -r '.metadata.namespace')
55+ CLUSTER_IP=$(echo "$KSM_SVC" | jq -r '.spec.clusterIP')
56+ PORT=$(echo "$KSM_SVC" | jq -r '.spec.ports[0].port')
4757
48- # Extract namespace, ClusterIP, and port
49- SERVICE_NAME=$(echo "$KSM_SVC" | jq -r '.metadata.name')
50- KSM_NAMESPACE=$(echo "$KSM_SVC" | jq -r '.metadata.namespace')
51- CLUSTER_IP=$(echo "$KSM_SVC" | jq -r '.spec.clusterIP')
52- PORT=$(echo "$KSM_SVC" | jq -r '.spec.ports[0].port')
58+ # Validate all required variables are populated
59+ if [ -z "$SERVICE_NAME" ] || [ -z "$KSM_NAMESPACE" ] || [ -z "$CLUSTER_IP" ] || [ -z "$PORT" ]; then
60+ echo "❌ One or more kube-state-metrics service variables are empty."
61+ echo "SERVICE_NAME : $SERVICE_NAME"
62+ echo "KSM_NAMESPACE : $KSM_NAMESPACE"
63+ echo "CLUSTER_IP : $CLUSTER_IP"
64+ echo "PORT : $PORT"
65+ fi
5366
54- # Validate all required variables are populated
55- if [ -z "$SERVICE_NAME" ] || [ -z "$KSM_NAMESPACE" ] || [ -z "$CLUSTER_IP" ] || [ -z "$PORT" ]; then
56- echo "❌ One or more kube-state-metrics service variables are empty."
57- echo "SERVICE_NAME: $SERVICE_NAME"
58- echo "KSM_NAMESPACE: $KSM_NAMESPACE"
59- echo "CLUSTER_IP: $CLUSTER_IP"
60- echo "PORT: $PORT"
61- fi
67+ # Construct metrics endpoint
68+ METRICS_ENDPOINT="http://${SERVICE_NAME}.${KSM_NAMESPACE}.svc.cluster.local:${PORT}/metrics"
69+ echo "📡 kube-state-metrics endpoint : $METRICS_ENDPOINT"
6270
63- # Construct metrics endpoint
64- METRICS_ENDPOINT="http://${SERVICE_NAME}.${KSM_NAMESPACE}.svc.cluster.local:${PORT}/metrics"
65- echo "📡 kube-state-metrics endpoint: $METRICS_ENDPOINT"
71+ yq e -i ".ksmUrl = \"${METRICS_ENDPOINT}\"" /tmp/new-config.yaml
6672
67- yq e ".ksmUrl = \"${METRICS_ENDPOINT}\"" /tmp/new-config.yaml
73+ # Use yq to create clean patch without quote escaping issues
74+ yq eval -n '{"data" : {"config.yaml": strload("/tmp/new-config.yaml")}}' -o json > /tmp/patch.json
75+ kubectl patch configmap {{ include "lmutil.fullname" . }} -n {{ .Release.Namespace }} --type merge --patch-file /tmp/patch.json
6876
69- kubectl patch configmap {{ include "lmutil.fullname" . }} -n {{ .Release.Namespace }} --type merge -p "$(jq -n --arg cfg "$(cat /tmp/new-config.yaml | sed 's/"/\\"/g')" '{data: {"config.yaml": $cfg}}')"
70- UPDATED=$(kubectl get configmap {{ include "lmutil.fullname" . }} -n {{ .Release.Namespace }} -o json | jq -r '.data["config.yaml"]')
77+ UPDATED=$(kubectl get configmap {{ include "lmutil.fullname" . }} -n {{ .Release.Namespace }} -o yaml | yq '.data["config.yaml"]')
7178
72- echo "ConfigMap patched successfully. $UPDATED"
79+ echo "ConfigMap patched successfully. $UPDATED"
80+ fi
7381
7482 # Initialize variables with global scope (use export to make them available to subshells)
7583 export SECRET_DATA=""
@@ -273,5 +281,7 @@ spec:
273281 env :
274282 - name : HOME
275283 value : /tmp
284+ - name : GODEBUG
285+ value : boringcrypto=1
276286 restartPolicy : Never
277287 serviceAccountName : {{ include "lmutil.serviceAccountName" . }}
0 commit comments