-
Notifications
You must be signed in to change notification settings - Fork 1k
Interpret KUBERNETES_SERVICE_HOST as hostname if not parsed as IP address #2285
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,14 +12,18 @@ DUMP_SIZE_COEFF=5 | |
ERRORCOUNT=0 | ||
|
||
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) | ||
KUBERNETES_SERVICE_PORT=${KUBERNETES_SERVICE_PORT:-443} | ||
if [ "$KUBERNETES_SERVICE_HOST" != "${KUBERNETES_SERVICE_HOST#*[0-9].[0-9]}" ]; then | ||
echo "IPv4" | ||
K8S_API_URL=https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT/api/v1 | ||
echo "IPv4" | ||
K8S_API_URL=https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT/api/v1 | ||
elif [ "$KUBERNETES_SERVICE_HOST" != "${KUBERNETES_SERVICE_HOST#*:[0-9a-fA-F]}" ]; then | ||
echo "IPv6" | ||
K8S_API_URL=https://[$KUBERNETES_SERVICE_HOST]:$KUBERNETES_SERVICE_PORT/api/v1 | ||
echo "IPv6" | ||
K8S_API_URL=https://[$KUBERNETES_SERVICE_HOST]:$KUBERNETES_SERVICE_PORT/api/v1 | ||
elif [ -n "$KUBERNETES_SERVICE_HOST" ]; then | ||
echo "Hostname" | ||
K8S_API_URL=https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT/api/v1 | ||
else | ||
echo "Unrecognized IP format '$KUBERNETES_SERVICE_HOST'" | ||
echo "KUBERNETES_SERVICE_HOST was not set" | ||
fi | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. can you align the indentation? If I look at the rest of the file it seems 4 spaces are used more :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'll reindent the entire file, because it's 2, 4 or 6 spaces, and that bothers me now that you mentioned it ;). |
||
echo "API Endpoint: ${K8S_API_URL}" | ||
CERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt | ||
|
@@ -59,42 +63,42 @@ function aws_delete_objects { | |
export -f aws_delete_objects | ||
|
||
function aws_delete_outdated { | ||
if [[ -z "$LOGICAL_BACKUP_S3_RETENTION_TIME" ]] ; then | ||
echo "no retention time configured: skip cleanup of outdated backups" | ||
return 0 | ||
fi | ||
if [[ -z "$LOGICAL_BACKUP_S3_RETENTION_TIME" ]] ; then | ||
echo "no retention time configured: skip cleanup of outdated backups" | ||
return 0 | ||
fi | ||
|
||
# define cutoff date for outdated backups (day precision) | ||
cutoff_date=$(date -d "$LOGICAL_BACKUP_S3_RETENTION_TIME ago" +%F) | ||
# define cutoff date for outdated backups (day precision) | ||
cutoff_date=$(date -d "$LOGICAL_BACKUP_S3_RETENTION_TIME ago" +%F) | ||
|
||
# mimic bucket setup from Spilo | ||
prefix="spilo/"$SCOPE$LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX"/logical_backups/" | ||
# mimic bucket setup from Spilo | ||
prefix="spilo/"$SCOPE$LOGICAL_BACKUP_S3_BUCKET_SCOPE_SUFFIX"/logical_backups/" | ||
|
||
args=( | ||
"--no-paginate" | ||
"--output=text" | ||
"--prefix=$prefix" | ||
"--bucket=$LOGICAL_BACKUP_S3_BUCKET" | ||
) | ||
args=( | ||
"--no-paginate" | ||
"--output=text" | ||
"--prefix=$prefix" | ||
"--bucket=$LOGICAL_BACKUP_S3_BUCKET" | ||
) | ||
|
||
[[ ! -z "$LOGICAL_BACKUP_S3_ENDPOINT" ]] && args+=("--endpoint-url=$LOGICAL_BACKUP_S3_ENDPOINT") | ||
[[ ! -z "$LOGICAL_BACKUP_S3_REGION" ]] && args+=("--region=$LOGICAL_BACKUP_S3_REGION") | ||
[[ ! -z "$LOGICAL_BACKUP_S3_ENDPOINT" ]] && args+=("--endpoint-url=$LOGICAL_BACKUP_S3_ENDPOINT") | ||
[[ ! -z "$LOGICAL_BACKUP_S3_REGION" ]] && args+=("--region=$LOGICAL_BACKUP_S3_REGION") | ||
|
||
# list objects older than the cutoff date | ||
aws s3api list-objects "${args[@]}" --query="Contents[?LastModified<='$cutoff_date'].[Key]" > /tmp/outdated-backups | ||
# list objects older than the cutoff date | ||
aws s3api list-objects "${args[@]}" --query="Contents[?LastModified<='$cutoff_date'].[Key]" > /tmp/outdated-backups | ||
|
||
# spare the last backup | ||
sed -i '$d' /tmp/outdated-backups | ||
# spare the last backup | ||
sed -i '$d' /tmp/outdated-backups | ||
|
||
count=$(wc -l < /tmp/outdated-backups) | ||
if [[ $count == 0 ]] ; then | ||
echo "no outdated backups to delete" | ||
return 0 | ||
fi | ||
echo "deleting $count outdated backups created before $cutoff_date" | ||
count=$(wc -l < /tmp/outdated-backups) | ||
if [[ $count == 0 ]] ; then | ||
echo "no outdated backups to delete" | ||
return 0 | ||
fi | ||
echo "deleting $count outdated backups created before $cutoff_date" | ||
|
||
# deleted outdated files in batches with 100 at a time | ||
tr '\n' '\0' < /tmp/outdated-backups | xargs -0 -P1 -n100 bash -c 'aws_delete_objects "$@"' _ | ||
# deleted outdated files in batches with 100 at a time | ||
tr '\n' '\0' < /tmp/outdated-backups | xargs -0 -P1 -n100 bash -c 'aws_delete_objects "$@"' _ | ||
} | ||
|
||
function aws_upload { | ||
|
@@ -137,14 +141,14 @@ function get_pods { | |
declare -r SELECTOR="$1" | ||
|
||
curl "${K8S_API_URL}/namespaces/${POD_NAMESPACE}/pods?$SELECTOR" \ | ||
--cacert $CERT \ | ||
-H "Authorization: Bearer ${TOKEN}" | jq .items[].status.podIP -r | ||
--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}" \ | ||
--cacert $CERT \ | ||
-H "Authorization: Bearer ${TOKEN}" | ||
--cacert $CERT \ | ||
-H "Authorization: Bearer ${TOKEN}" | ||
} | ||
|
||
declare -a search_strategy=( | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-n is null check, right? Isn't -z better because it's checks null and not set?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, because that arm checks if there is any value in KUBERNETES_SERVICE_HOST, and uses it as a hostname. I wanted to print a message when KUBERNETES_SERVICE_HOST was not set, for instance when someone want to set K8S_API_URL directly.