Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
85e69c2
Add pipeline to cleanup cloud resources
mrodm Feb 21, 2024
7a21eca
Test in main pipeline
mrodm Feb 21, 2024
95b0cb2
Update secrets in pre-hook
mrodm Feb 22, 2024
bf30001
Enable filter by date
mrodm Feb 22, 2024
8beb942
Fix field name
mrodm Feb 22, 2024
b4d1b9c
Add missing backslash
mrodm Feb 22, 2024
b5bcb16
Add environment variable for docker registry
mrodm Feb 22, 2024
c96510b
Add docker registry var for test step
mrodm Feb 22, 2024
2f50da8
Set the correct paths for configs
mrodm Feb 22, 2024
edebdea
Skip filter by date in aws nodes
mrodm Feb 22, 2024
68f9591
Remove "value" from converters section
mrodm Feb 22, 2024
215fea6
Add SQS queues
mrodm Feb 22, 2024
5322187
Add state filter for nodes
mrodm Feb 22, 2024
45107fd
Add environment filter for nodes gcp
mrodm Feb 22, 2024
d7d47d4
Rename pipeline file
mrodm Feb 22, 2024
cc96647
Add email notificaiton - currently disabled
mrodm Feb 22, 2024
d548a7b
Install awscli
mrodm Feb 22, 2024
890a985
Set quiet for unzip
mrodm Feb 22, 2024
214a2c7
Add validation commands
mrodm Feb 22, 2024
30e551f
Show errors
mrodm Feb 23, 2024
9632fb2
Fix url to download aws binary
mrodm Feb 23, 2024
4b92dc0
Set variables for period
mrodm Feb 23, 2024
92879a3
Refactor functions and rename variable for date
mrodm Feb 23, 2024
d06503c
Update collapsed section pending
mrodm Feb 23, 2024
cbba05d
Update retention period values
mrodm Feb 23, 2024
13ad1c5
Add dry-run option
mrodm Feb 23, 2024
3fd3eb7
Fix docker image name
mrodm Feb 23, 2024
68c6ff1
Restore all steps in main pipeline
mrodm Feb 23, 2024
27a920d
Merge remote-tracking branch 'upstream/main' into add_daily_cleanup_job
mrodm Mar 4, 2024
8617e65
Merge remote-tracking branch 'upstream/main' into add_daily_cleanup_job
mrodm Mar 4, 2024
b1026b0
Remove debug leftovers
mrodm Mar 5, 2024
fd6fc37
Revert "Remove debug leftovers"
mrodm Mar 5, 2024
aae3226
Test not trigger test packages
mrodm Mar 5, 2024
97c81c5
Add reshift check to cloud cleanup
mrodm Mar 5, 2024
7491b0e
Set higher retention period
mrodm Mar 5, 2024
a316425
Fix condition to check stale resources in AWS
mrodm Mar 5, 2024
b23892b
Add echo messages
mrodm Mar 5, 2024
9e9bd14
Just take into account lines starting with line 4
mrodm Mar 5, 2024
5a4485b
Set the expected credentials for AWS
mrodm Mar 5, 2024
57e1302
Update collapsed message
mrodm Mar 5, 2024
8a078c8
Show clusters found
mrodm Mar 5, 2024
50a7238
Restore test packages steps
mrodm Mar 5, 2024
fdebf94
Remove debug
mrodm Mar 5, 2024
2e6709b
Allow to check all resources
mrodm Mar 6, 2024
e82c181
Add input step to set values if triggered using the UI
mrodm Mar 6, 2024
527dbf0
Merge remote upstream/main into add_redshift_check_cloud_cleanup
mrodm Mar 6, 2024
d6eb651
Move comment
mrodm Mar 6, 2024
cfd359d
Do not reset value of resources_to_delete
mrodm Mar 6, 2024
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion .buildkite/pipeline.cloud-cleanup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,31 @@ env:
NOTIFY_TO: "ecosystem-team@elastic.co"

steps:
- input: "Input values for the variables"
key: "input-variables"
fields:
- select: "DRY_RUN"
key: "DRY_RUN"
options:
- label: "True"
value: "true"
- label: "False"
value: "false"
default: "true"
if: "build.source == 'ui'"

- wait: ~
if: "build.source == 'ui'"
allow_dependency_failure: false

- label: "Cloud Cleanup"
key: "cloud-cleanup"
command: ".buildkite/scripts/cloud-cleanup.sh"
env:
RESOURCE_RETENTION_PERIOD: "24 hours"
DRY_RUN: "true"
agents:
provider: "gcp"
provider: "gcp" # this step requires docker

notify:
- email: "$NOTIFY_TO"
Expand Down
73 changes: 69 additions & 4 deletions .buildkite/scripts/cloud-cleanup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ export DELETE_RESOURCES_BEFORE_DATE=$(date -Is -d "${RESOURCE_RETENTION_PERIOD}

CLOUD_REAPER_IMAGE="${DOCKER_REGISTRY}/observability-ci/cloud-reaper:0.3.0"

DRY_RUN="$(buildkite-agent meta-data get DRY_RUN --default ${DRY_RUN:-"true"})"

resources_to_delete=0

COMMAND="validate"
Expand Down Expand Up @@ -108,19 +110,82 @@ if [ "${resources_to_delete}" -eq 1 ]; then
--context "ctx-cloud-reaper-error" \
--style "error"
fi
exit 1
fi

# TODO: List and delete the required resources using aws cli
echo "--- Cleaning up other AWS resources older than ${DELETE_RESOURCES_BEFORE_DATE}"
echo "--- Installing awscli"
with_aws_cli

export AWS_ACCESS_KEY_ID="${ELASTIC_PACKAGE_AWS_ACCESS_KEY}"
export AWS_SECRET_ACCESS_KEY="${ELASTIC_PACKAGE_AWS_ACCESS_KEY}"
export AWS_SECRET_ACCESS_KEY="${ELASTIC_PACKAGE_AWS_SECRET_KEY}"
export AWS_DEFAULT_REGION=us-east-1

echo "--- TODO: Cleaning up Redshift clusters"
echo "--- Checking if any Redshift cluster still created"
aws redshift describe-clusters \
--tag-keys "environment" \
--tag-values "ci" > redshift_clusters.json

clusters_num=$(jq -rc '.Clusters | length' redshift_clusters.json)

echo "Number of clusters found: ${clusters_num}"

jq -c '.Clusters[]' redshift_clusters.json | while read i ; do
identifier=$(echo "$i" | jq -rc ".ClusterIdentifier")
# tags
repo=$(echo "$i" | jq -rc '.Tags[] | select(.Key == "repo").Value')
environment=$(echo "$i" | jq -rc '.Tags[] | select(.Key == "environment").Value')
# creation time tag in milliseconds
createdAt=$(echo "$i" | jq -rc '.Tags[] | select(.Key == "created_date").Value')
# epoch in milliseconds minus retention period
thresholdEpoch=$(date -d "${RESOURCE_RETENTION_PERIOD} ago" +"%s%3N")

if [[ ! "${identifier}" =~ ^elastic-package-test- ]]; then
echo "Skip cluster ${identifier}, do not match required identifiers."
continue
fi

if [[ "${repo}" != "integrations" && "${repo}" != "elastic-package" ]]; then
echo "Skip cluster ${identifier}, not from the expected repo: ${repo}."
continue
fi

if [[ "${environment}" != "ci" ]]; then
echo "Skip cluster ${identifier}, not from the expected environment: ${environment}."
continue
fi

if [ "${createdAt}" -gt "${thresholdEpoch}" ]; then
echo "Skip cluster $identifier. It was created < ${RESOURCE_RETENTION_PERIOD} ago"
continue
fi

echo "To be deleted cluster: $identifier. It was created > ${RESOURCE_RETENTION_PERIOD} ago"
resources_to_delete=1
if [ "${DRY_RUN}" == "false" ]; then
echo "Deleting: $identifier. It was created > ${RESOURCE_RETENTION_PERIOD} ago"
# aws redshift delete-cluster \
# --cluster-identifier "${identifier}" \
# --skip-final-cluster-snapshot
echo "Done."
fi
done

if [ "${resources_to_delete}" -eq 1 ]; then
message="There are redshift resources to be deleted"
echo "${message}"
if running_on_buildkite ; then
buildkite-agent annotate \
"${message}" \
--context "ctx-aws-readshift-error" \
--style "error"
fi
fi

# TODO: List and delete the required resources using aws cli or using cloud-reaper tool
echo "--- TODO: Cleaning up IAM roles"
echo "--- TODO: Cleaning up IAM policies"
echo "--- TODO: Cleaning up Schedulers"

if [ "${resources_to_delete}" -eq 1 ]; then
exit 1
fi