Allow to keep objects in AWS

Instances, Volumes, Snapshots, AMIs and s3 objects with the "keep_me" tag will
not be deleted automatically even if they are older then the specified time limit.

(cherry picked from commit db7b1e4fcd)
(cherry picked from commit 0029f23b0e)
This commit is contained in:
Jan Stodola 2019-04-03 18:41:02 +02:00 committed by Brian C. Lane
parent 712ae7a721
commit 0314b6125f

View File

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
# Script removes virtual machines, AMIs, volumes, snapshots, key pairs and S3 objects older than HOURS_LIMIT (24 hours by default) from Amazon EC2/S3 # Script removes virtual machines, AMIs, volumes, snapshots, key pairs and S3 objects older than HOURS_LIMIT (24 hours by default) from Amazon EC2/S3
# Instances, Volumes, Snapshots, AMIs and s3 objects with the "keep_me" tag will not be affected
. /usr/share/beakerlib/beakerlib.sh . /usr/share/beakerlib/beakerlib.sh
@ -78,7 +79,7 @@ for region in $regions; do
region: "$region" region: "$region"
state: absent state: absent
loop: "{{vms_facts.instances}}" loop: "{{vms_facts.instances}}"
when: item.launch_time < lookup('env','TIMESTAMP') when: (item.launch_time < lookup('env','TIMESTAMP')) and (item.tags['keep_me'] is not defined)
loop_control: loop_control:
label: "{{item.instance_id}}" label: "{{item.instance_id}}"
__EOF__ __EOF__
@ -110,7 +111,7 @@ __EOF__
state: absent state: absent
delete_snapshot: True delete_snapshot: True
loop: "{{ami_facts.images}}" loop: "{{ami_facts.images}}"
when: item.creation_date < lookup('env','TIMESTAMP') when: (item.creation_date < lookup('env','TIMESTAMP')) and (item.tags['keep_me'] is not defined)
loop_control: loop_control:
label: "{{item.image_id}}" label: "{{item.image_id}}"
__EOF__ __EOF__
@ -138,8 +139,8 @@ __EOF__
rlPhaseEnd rlPhaseEnd
rlPhaseStartTest "Delete old volumes in region $region" rlPhaseStartTest "Delete old volumes in region $region"
# get a list of unused ("available") volumes older than $TIMESTAMP # get a list of unused ("available") volumes older than $TIMESTAMP and not having the tag "keep_me"
volumes_to_delete=$(aws ec2 describe-volumes --region="$region" --query "Volumes[?CreateTime<\`$TIMESTAMP\`] | [?State==\`available\`].[VolumeId,CreateTime]" --output text) volumes_to_delete=$(aws ec2 describe-volumes --region="$region" --query "Volumes[?CreateTime<\`$TIMESTAMP\`] | [?!(Tags[?Key==\`keep_me\`])] | [?State==\`available\`].[VolumeId,CreateTime]" --output text)
while read volume_id creation_time; do while read volume_id creation_time; do
if [ -n "$volume_id" ]; then if [ -n "$volume_id" ]; then
@ -150,8 +151,8 @@ __EOF__
rlPhaseEnd rlPhaseEnd
rlPhaseStartTest "Delete old snapshots in region $region" rlPhaseStartTest "Delete old snapshots in region $region"
# get a list of snapshots older than $TIMESTAMP and owned by our account # get a list of snapshots older than $TIMESTAMP and owned by our account and not having the tag "keep_me"
snapshots_to_delete=$(aws ec2 describe-snapshots --region="$region" --owner-ids "$account_id" --query "Snapshots[?StartTime<\`$TIMESTAMP\`].[SnapshotId,StartTime]" --output text) snapshots_to_delete=$(aws ec2 describe-snapshots --region="$region" --owner-ids "$account_id" --query "Snapshots[?StartTime<\`$TIMESTAMP\`] |[?!(Tags[?Key==\`keep_me\`])].[SnapshotId,StartTime]" --output text)
while read snapshot_id start_time; do while read snapshot_id start_time; do
if [ -n "$snapshot_id" ]; then if [ -n "$snapshot_id" ]; then
@ -169,8 +170,12 @@ done
while read date_f time_f size_f filename_f; do while read date_f time_f size_f filename_f; do
creation_date=`date -u -d "$date_f $time_f" '+%FT%T'` creation_date=`date -u -d "$date_f $time_f" '+%FT%T'`
if [ "$creation_date" \< "$TIMESTAMP" ]; then if [ "$creation_date" \< "$TIMESTAMP" ]; then
rlLogInfo "Removing old file $filename_f created $date_f $time_f" # find and delete s3 objects without the "keep_me" tag
rlRun -t -c "aws s3 rm s3://${AWS_BUCKET}/${filename_f}" keep=$(aws s3api get-object-tagging --bucket ${AWS_BUCKET} --key ${filename_f} --output text | cut -f2 | grep "^keep_me$")
if [ -n "$keep" ]; then
rlLogInfo "Removing old file $filename_f created $date_f $time_f"
rlRun -t -c "aws s3 rm s3://${AWS_BUCKET}/${filename_f}"
fi
fi fi
done <<< "$all_objects" done <<< "$all_objects"
rlPhaseEnd rlPhaseEnd