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