lorax/tests/cleanup/remove_old_objects_openstac...

135 lines
4.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Script removes virtual machines and other artifacts older than HOURS_LIMIT (24 hours by default) from OpenStack
. /usr/share/beakerlib/beakerlib.sh
rlJournalStart
rlPhaseStartSetup
if [ -z "$OS_AUTH_URL" ]; then
rlFail "OS_AUTH_URL is empty!"
else
rlLogInfo "OS_AUTH_URL=$OS_AUTH_URL"
fi
if [ -z "$OS_USERNAME" ]; then
rlFail "OS_USERNAME is empty!"
else
rlLogInfo "OS_USERNAME is configured"
fi
if [ -z "$OS_PASSWORD" ]; then
rlFail "OS_PASSWORD is empty!"
else
rlLogInfo "OS_PASSWORD is configured"
fi
export OS_PROJECT_NAME="${OS_PROJECT_NAME:-$OS_USERNAME}"
rlLogInfo "OS_PROJECT_NAME=$OS_PROJECT_NAME"
# VMs older than HOURS_LIMIT will be deleted
HOURS_LIMIT="${HOURS_LIMIT:-24}"
export TIMESTAMP=`date -u -d "$HOURS_LIMIT hours ago" '+%FT%T'`
rlLogInfo "HOURS_LIMIT=$HOURS_LIMIT"
for package in ansible python3-openstacksdk python3-openstackclient; do
if ! rlCheckRpm "$package"; then
rlRun -t -c "dnf -y install $package"
rlAssertRpm "$package"
fi
done
PLAYBOOK_DELETE_VMS=`mktemp`
PLAYBOOK_DELETE_IMAGES=`mktemp`
rlPhaseEnd
rlPhaseStartTest "Delete old VMs"
# The openstack_servers variable used in the playbook bellow is set by the os_server_facts ansible module.
# The variable contains details about all discovered virtual machines.
# See https://docs.ansible.com/ansible/latest/modules/os_server_facts_module.html
cat > $PLAYBOOK_DELETE_VMS << __EOF__
- name: Delete old VMs
hosts: localhost
gather_facts: False
tasks:
- name: Get VMs
os_server_facts:
- name: List all VMs
debug:
var: openstack_servers
- name: Delete old VMs
os_server:
name: "{{item.id}}"
state: absent
loop: "{{openstack_servers}}"
when: item.created < lookup('env','TIMESTAMP') and (item.metadata.Tag is not defined or item.metadata.Tag != "keep_me")
loop_control:
label: "{{item.name}} (id: {{item.id}} created: {{item.created}} metadata: {{item.metadata}})"
__EOF__
rlLogInfo "Removing VMs created before $TIMESTAMP"
rlRun -t -c "ansible-playbook $PLAYBOOK_DELETE_VMS"
rlPhaseEnd
rlPhaseStartTest "Delete old images"
# The openstack_image variable used in the playbook bellow is set by the os_image_facts ansible module.
# The variable contains details about all discovered images.
# See https://docs.ansible.com/ansible/latest/modules/os_image_facts_module.html
cat > $PLAYBOOK_DELETE_IMAGES << __EOF__
- name: Delete old images
hosts: localhost
gather_facts: False
tasks:
- name: Get images
os_image_facts:
- name: Delete old images
os_image:
name: "{{item.name}}"
id: "{{item.id}}"
state: absent
loop: "{{openstack_image}}"
when: (item.created_at < lookup('env','TIMESTAMP')) and (item.name | regex_search('Composer-[a-f0-9-]{36}-Automated-Import'))
loop_control:
label: "{{item.name}} (id: {{item.id}} created: {{item.created_at}})"
__EOF__
rlLogInfo "Removing images created before $TIMESTAMP"
rlRun -t -c "ansible-playbook $PLAYBOOK_DELETE_IMAGES"
rlPhaseEnd
rlPhaseStartTest "Delete old volumes"
volume_list=`openstack-3 volume list --format value --column ID`
for volume in $volume_list; do
creation_date=`openstack-3 volume show $volume --column created_at --format value`
if [ $? -ne 0 ]; then
rlLogWarning "Failed to get the creation date of volume $volume"
continue
fi
# The format of the date/time returned by openstack-3 looks like this:
# 2019-01-22T18:50:14.000000
# The TIMESTAMP variable format is:
# 2019-01-21T18:45:36
# "<" does a lexicographic comparison using the character collating sequence
# specified by the LC_COLLATE locale. "<" needs to be escaped, otherwise
# it's a symbol for redirection.
if [ "$creation_date" \< "$TIMESTAMP" ]; then
rlLogInfo "Removing old volume $volume created $creation_date"
rlRun -t -c "openstack-3 volume delete $volume"
fi
done
rlPhaseEnd
rlPhaseStartCleanup
rlRun -t -c "rm -f $PLAYBOOK_DELETE_VMS"
rlRun -t -c "rm -f $PLAYBOOK_DELETE_IMAGES"
rlPhaseEnd
rlJournalEnd
rlJournalPrintText