From d450f0dcf87afdb7be7bf1a20b6912aa0e147994 Mon Sep 17 00:00:00 2001
From: Felix Kunde <felix-kunde@gmx.de>
Date: Thu, 10 Oct 2019 16:32:33 +0200
Subject: [PATCH] fetch cluster_name_label from configuration

---
 docker/logical-backup/dump.sh | 43 ++++++++++++++++++++++++++++++-----
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/docker/logical-backup/dump.sh b/docker/logical-backup/dump.sh
index dcbd7d33..c3cf5ba6 100755
--- a/docker/logical-backup/dump.sh
+++ b/docker/logical-backup/dump.sh
@@ -14,8 +14,9 @@ PG_BIN=$PG_DIR/$PG_VERSION/bin
 DUMP_SIZE_COEFF=5
 
 TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
-K8S_API_URL=https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT/api/v1
+K8S_API_URL=https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT
 CERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+CLUSTER_NAME_LABEL=cluster-name
 
 function estimate_size {
     "$PG_BIN"/psql -tqAc "${ALL_DB_SIZE_QUERY}"
@@ -48,33 +49,63 @@ function aws_upload {
 function get_pods {
     declare -r SELECTOR="$1"
 
-    curl "${K8S_API_URL}/namespaces/${POD_NAMESPACE}/pods?$SELECTOR"        \
+    curl "${K8S_API_URL}/api/v1/namespaces/${POD_NAMESPACE}/pods?$SELECTOR"        \
         --cacert $CERT                          \
         -H "Authorization: Bearer ${TOKEN}" | jq .items[].status.podIP -r
 }
 
 function get_current_pod {
-    curl "${K8S_API_URL}/namespaces/${POD_NAMESPACE}/pods?fieldSelector=metadata.name%3D${HOSTNAME}" \
+    curl "${K8S_API_URL}/api/v1/namespaces/${POD_NAMESPACE}/pods?fieldSelector=metadata.name%3D${HOSTNAME}" \
         --cacert $CERT   \
         -H "Authorization: Bearer ${TOKEN}"
 }
 
 declare -a search_strategy=(
+    get_cluster_name_label
     list_all_replica_pods_current_node
     list_all_replica_pods_any_node
     get_master_pod
 )
 
+function get_config_resource() {
+    curl "${K8S_API_URL}/apis/apps/v1/namespaces/default/deployments/postgres-operator" \
+        --cacert $CERT   \
+        -H "Authorization: Bearer ${TOKEN}" | jq '.spec.template.spec.containers[0].env[] | select(.name == "$1") | .value'
+}
+
+function get_cluster_name_label {
+    local config
+    local clustername
+
+    config=$(get_config_resource "CONFIG_MAP_NAME")
+    if [ -n "$config" ]; then
+        clustername=$(curl "${K8S_API_URL}/api/v1/namespaces/default/configmaps/${config}" \
+                            --cacert $CERT   \
+                            -H "Authorization: Bearer ${TOKEN}" | jq '.data.cluster_name_label')
+    else
+        config=$(get_config_resource "POSTGRES_OPERATOR_CONFIGURATION_OBJECT")
+        if [ -n "$config" ]; then
+            clustername=$(curl "${K8S_API_URL}/apis/acid.zalan.do/v1/namespaces/default/operatorconfigurations/${config}" \
+                                --cacert $CERT   \
+                                -H "Authorization: Bearer ${TOKEN}" | jq '.configuration.kubernetes.cluster_name_label')
+        fi
+    fi
+
+    if [ -n "$clustername" ]; then
+        CLUSTER_NAME_LABEL=${clustername}
+    fi;
+}
+
 function list_all_replica_pods_current_node {
-    get_pods "labelSelector=version%3D${SCOPE},spilo-role%3Dreplica&fieldSelector=spec.nodeName%3D${CURRENT_NODENAME}" | head -n 1
+    get_pods "labelSelector=${CLUSTER_NAME_LABEL}%3D${SCOPE},spilo-role%3Dreplica&fieldSelector=spec.nodeName%3D${CURRENT_NODENAME}" | head -n 1
 }
 
 function list_all_replica_pods_any_node {
-    get_pods "labelSelector=version%3D${SCOPE},spilo-role%3Dreplica" | head -n 1
+    get_pods "labelSelector=${CLUSTER_NAME_LABEL}%3D${SCOPE},spilo-role%3Dreplica" | head -n 1
 }
 
 function get_master_pod {
-    get_pods "labelSelector=version%3D${SCOPE},spilo-role%3Dmaster" | head -n 1
+    get_pods "labelSelector=${CLUSTER_NAME_LABEL}%3D${SCOPE},spilo-role%3Dmaster" | head -n 1
 }
 
 CURRENT_NODENAME=$(get_current_pod | jq .items[].spec.nodeName --raw-output)
-- 
GitLab