X-Git-Url: https://gerrit.linuxfoundation.org/infra/gitweb?a=blobdiff_plain;f=shell%2Fopenstack-cleanup-orphaned-ports.sh;h=65ca3727f1b7f28616f656dc9b51b05e9515752e;hb=refs%2Fchanges%2F50%2F72650%2F2;hp=b5c0af526f958a14cb03684d96a3c3f85108b2c2;hpb=98090d2e52c78ada3ae2bc3fe4cb918df309a207;p=releng%2Fglobal-jjb.git diff --git a/shell/openstack-cleanup-orphaned-ports.sh b/shell/openstack-cleanup-orphaned-ports.sh index b5c0af52..65ca3727 100755 --- a/shell/openstack-cleanup-orphaned-ports.sh +++ b/shell/openstack-cleanup-orphaned-ports.sh @@ -24,6 +24,7 @@ set -eu -o pipefail tmpfile=$(mktemp --suffix -openstack-ports.txt) cores=$(nproc --all) threads=$((3*cores)) +regex_created_at='^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})Z$' # Set age for deletion/removal age="30 minutes ago" @@ -33,33 +34,49 @@ _cleanup() { uuid=$1 created_at=$(openstack --os-cloud "$os_cloud" port show -f value -c created_at "$uuid") + if [ "$created_at" == "None" ]; then + # This is a valid result for some objects; do not stop processing echo "No value for port creation time; skipping: $uuid" - else + + elif echo "$created_at" | grep -qP "$regex_created_at"; then + created_at_uxts=$(date -d "$created_at" +"%s") - # For debugging only; this outout usually disabled - # echo "Port: ${uuid} created at ${created_at} / ${created_at_uxts}" - - # Validate timing values are numeric - if [[ "$created_at_uxts" -eq "$created_at_uxts" ]]; then - # Clean up ports where created_at > 30 minutes - if [[ "$created_at_uxts" -lt "$cutoff" ]]; then - echo "Removing orphaned port $uuid created > $age" - openstack --os-cloud "$os_cloud" port delete "$uuid" - fi - else - echo "Date variable failed numeric test; deletion not possible" + # Cleanup objects where created_at is older than specified cutoff time + # created_at_uxts is measured against UNIX epoch; lower values are older + if [[ "$created_at_uxts" -lt "$cutoff" ]]; then + echo "Removing orphaned port $uuid created $created_at_uxts > $age" + openstack --os-cloud "$os_cloud" port delete "$uuid" fi + else + # Don't stop the job, but warn about unexpected value + echo "Unknown/unexpected value for created_at: ${created_at}" fi } +_rmtemp() +{ + if [ -f "$tmpfile" ]; then + # Removes temporary file on script exit + rm -f "$tmpfile" + fi +} + +trap _rmtemp EXIT + # Output the initial list of port UUIDs to a temporary file openstack --os-cloud "$os_cloud" port list -f value -c ID -c status \ | { grep -e DOWN || true; } | { awk '{print $1}' || true; } > "$tmpfile" # Count the number to process total=$(wc -l "$tmpfile" | awk '{print $1}') + +if [ "$total" -eq 0 ]; then + echo "No orphaned ports to process." + exit 0 +fi + echo "Ports to process: $total; age limit: $cutoff" echo "Using $threads parallel processes..." @@ -67,5 +84,3 @@ echo "Using $threads parallel processes..." export -f _cleanup export os_cloud cutoff age parallel --progress --retries 3 -j "$threads" _cleanup < "$tmpfile" - -rm "$tmpfile"