Feat!: Re-factor lf-activate-venv() to re-use venv
[releng/global-jjb.git] / shell / openstack-cleanup-orphaned-ports.sh
1 #!/bin/bash -l
2 # SPDX-License-Identifier: EPL-1.0
3 ##############################################################################
4 # Copyright (c) 2019 The Linux Foundation and others.
5 #
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Eclipse Public License v1.0
8 # which accompanies this distribution, and is available at
9 # http://www.eclipse.org/legal/epl-v10.html
10 ##############################################################################
11 # Scans OpenStack for orphaned ports
12 echo "---> Orphaned ports"
13
14 # shellcheck disable=SC1090
15 source ~/lf-env.sh
16
17 os_cloud="${OS_CLOUD:-vex}"
18
19 lf-activate-venv --python python3 \
20     python-heatclient \
21     python-openstackclient
22
23 set -eux -o pipefail
24
25 mapfile -t os_ports_ts < <(openstack --os-cloud "$os_cloud" port list \
26         -f value \
27         -c ID \
28         -c status \
29         -c created_at \
30         | grep -E DOWN \
31         | awk -F' ' '{print $1 " " $3}')
32
33 if [ ${#os_ports_ts[@]} -eq 0 ]; then
34     echo "No orphaned ports found."
35 else
36     cutoff=$(date -d "30 minutes ago"  +%s)
37     for port_ts in "${os_ports_ts[@]}"; do
38         created_at_isots="${port_ts#* }"
39         port_uuid="${port_ts% *}"
40         echo "checking port uuid: ${port_uuid} with TS: ${created_at_isots}"
41         created_at_uxts=$(date -d "${created_at_isots}" +"%s")
42         # Clean up ports where created_at > 30 minutes
43         if [[ "$created_at_uxts" -gt "$cutoff" ]]; then
44             echo "Removing orphaned port $port_uuid created_at ts > 30 minutes."
45             openstack --os-cloud "$os_cloud" port delete "$port_uuid"
46         fi
47     done
48 fi