Skip to content

Commit 74c02be

Browse files
author
retroflexer
committed
Make restore pod yaml specific to restoring node.
1 parent 26abebe commit 74c02be

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

bindata/etcd/cluster-restore.sh

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,32 @@ function restore_static_pods() {
5353
tar -xvf "${BACKUP_FILE}" --strip-components=2 -C "${MANIFEST_DIR}"/ "${BACKUP_POD_PATH}"
5454
done
5555
}
56+
function replace_node_specific_parameters() {
57+
pod_file="$1"
58+
# shellcheck disable=SC2016
59+
declare -A SUBS_MAP
60+
SUBS_MAP['export ETCD_NAME=.*$']='export ETCD_NAME=${NODE_NODE_ENVVAR_NAME_ETCD_NAME}'
61+
SUBS_MAP['export ETCD_INITIAL_CLUSTER=.*$']='export ETCD_INITIAL_CLUSTER="${ETCD_NAME}=https://${NODE_NODE_ENVVAR_NAME_ETCD_URL_HOST}:2380"'
62+
SUBS_MAP['export ETCD_NODE_PEER_URL=.*$']='export ETCD_NODE_PEER_URL=https://${NODE_NODE_ENVVAR_NAME_ETCD_URL_HOST}:2380'
63+
SUBS_MAP['--initial-advertise-peer-urls .*$']='--initial-advertise-peer-urls $ETCD_NODE_PEER_URL \\'
64+
SUBS_MAP['--initial-advertise-peer-urls=.*$']='--initial-advertise-peer-urls=https://${NODE_NODE_ENVVAR_NAME_IP}:2380 \\'
65+
SUBS_MAP['--cert-file=.*$']='--cert-file=/etc/kubernetes/static-pod-certs/secrets/etcd-all-serving/etcd-serving-NODE_NAME.crt \\'
66+
SUBS_MAP['--key-file=.*$']='--key-file=/etc/kubernetes/static-pod-certs/secrets/etcd-all-serving/etcd-serving-NODE_NAME.key \\'
67+
SUBS_MAP['--peer-cert-file=.*$']='--peer-cert-file=/etc/kubernetes/static-pod-certs/secrets/etcd-all-peer/etcd-peer-NODE_NAME.crt \\'
68+
SUBS_MAP['--peer-key-file=.*$']='--peer-key-file=/etc/kubernetes/static-pod-certs/secrets/etcd-all-peer/etcd-peer-NODE_NAME.key \\'
69+
SUBS_MAP['--advertise-client-urls=.*$']='--advertise-client-urls=https://${NODE_NODE_ENVVAR_NAME_IP}:2379 \\'
70+
71+
for pattern in "${!SUBS_MAP[@]}"; do
72+
# check if the pattern exists, and return with error if it doesn't
73+
if ! grep -- "$pattern" "$pod_file" > /dev/null 2>&1; then
74+
echo "Warning: restore pod extraction failed: expected pattern \"$pattern\" not found."
75+
return 1
76+
fi
77+
# replace the pattern
78+
sed -i "s,$pattern,${SUBS_MAP[$pattern]},g" "$pod_file"
79+
done
80+
}
81+
5682

5783
function extract_and_start_restore_etcd_pod() {
5884
POD_FILE_NAME="restore-etcd-pod/pod.yaml"
@@ -64,6 +90,13 @@ function extract_and_start_restore_etcd_pod() {
6490

6591
echo "starting restored etcd-pod.yaml"
6692
tar -O -xvf "${BACKUP_FILE}" -C "${MANIFEST_DIR}"/ "${BACKUP_POD_PATH}" > "${MANIFEST_DIR}"/etcd-pod.yaml
93+
94+
# Since the backup could have been taken on any node, we need to replace the node specific values in the restore pod.
95+
echo "replacing node specific parameters in restore etcd-pod.yaml"
96+
if ! replace_node_specific_parameters "${MANIFEST_DIR}"/etcd-pod.yaml; then
97+
return 1
98+
fi
99+
67100
return 0
68101
}
69102

@@ -132,6 +165,7 @@ cp -p "${SNAPSHOT_FILE}" "${ETCD_DATA_DIR_BACKUP}"/snapshot.db
132165
# Extract and start restore-etcd pod.yaml
133166
if ! extract_and_start_restore_etcd_pod; then
134167
# If backup doesn't have restore-pod.yaml, copy it from local disk
168+
echo "Warning: could not extract restore pod. Using the restore pod manifest on the disk."
135169
cp -p ${RESTORE_ETCD_POD_YAML} ${MANIFEST_DIR}/etcd-pod.yaml
136170
fi
137171

pkg/operator/etcd_assets/bindata.go

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)