tmpfile=$(mktemp --suffix -openstack-"${object}"s.txt)
cores=$(nproc --all)
threads=$((3*cores))
+regex_created_at='^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})Z$'
_cleanup()
{
created_at=$(openstack --os-cloud "$os_cloud" "${object}" 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 ${object} 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 "${uuid} created at ${created_at} / ${created_at_uxts} / cutoff: ${cutoff}"
-
- # Validate timing values are numeric
- if [[ "$created_at_uxts" -eq "$created_at_uxts" ]]; then
- # Clean up objects when created_at > specified age
- if [[ "$created_at_uxts" -lt "$cutoff" ]]; then
- echo "Removing orphaned ${object} $uuid created $created_at_uxts > $age"
- openstack --os-cloud "$os_cloud" "${object}" 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 ${object} $uuid created $created_at_uxts > $age"
+ openstack --os-cloud "$os_cloud" "${object}" 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 object UUIDs to a temporary file
if [[ -n ${filters} ]]; then
# If a filter/match condition is requested/set
# Count the number of objects to process
total=$(wc -l "$tmpfile" | awk '{print $1}')
+
+if [ "$total" -eq 0 ]; then
+ echo "No orphaned objects to process."
+ exit 0
+fi
+
echo "Processing $total ${object} object(s); current time: $current age limit: $cutoff"
echo "Using $threads parallel processes..."
export os_cloud cutoff age object
# Add --progress flag to the command below for additional debug output
parallel --retries 3 -j "$threads" _cleanup < "$tmpfile"
-
-rm "$tmpfile"
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"
{
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..."
export -f _cleanup
export os_cloud cutoff age
parallel --progress --retries 3 -j "$threads" _cleanup < "$tmpfile"
-
-rm "$tmpfile"