#!/usr/bin/env bash

# Spawning the neutron agents containers leaves artifacts on the host.
# This script removes these artifacts.
ip netns list | while read -r line ; do
    echo "Removing network namespace $line on the host"
    ip netns delete $line
done

ip -o link show | awk -F': ' '/tap/{print $2}' | while read -r ifname ; do
    echo "Removing tap interface $ifname on the host"
    ip link delete $ifname type veth
done

ip -o link show | awk -F': ' '/brq/{print $2}' | while read -r ifname ; do
    echo "Removing linux bridge $ifname on the host"
    ip link delete $ifname type bridge
done

ip -o link show | awk -F': ' '/vxlan/{print $2}' | while read -r ifname ; do
    echo "Removing vxlan interface $ifname on the host"
    ip link delete $ifname type vxlan
done

# Keepalived leaves VIP on the host in case of accidental removal.
# This snippet removes VIPs.
if [[ "$enable_haproxy" == "yes" ]]; then
  ip -o addr list | awk '{print $2,$4}' | cut -d/ -f1 | while read -r ifname ifaddr ; do
    if [[ "$kolla_internal_vip_address" == "$ifaddr" ||
          "$kolla_external_vip_address" == "$ifaddr" ]]; then
      echo "Removing VIP $ifaddr on the host"
      ip addr delete dev $ifname $ifaddr
    fi
  done
fi

echo "Creating a fstab backup..."
sudo cp /etc/fstab /etc/fstab_backup

if [[ "$glance_file_datadir_volume" != "glance" && -d "$glance_file_datadir_volume" ]]; then
    echo "Removing glance volume if it is customized"
    rm -rfv  $glance_file_datadir_volume
fi

if [[ "$nova_instance_datadir_volume" != "nova_compute" && -d "$nova_instance_datadir_volume" ]]; then
    echo "Removing nova_compute volume if it is customized"
    rm -rfv  $nova_instance_datadir_volume
fi

if [[ "$gnocchi_metric_datadir_volume" != "gnocchi" && -d "$gnocchi_metric_datadir_volume" ]]; then
    echo "Removing gnocchi volume if it is customized"
    rm -rfv  $gnocchi_metric_datadir_volume
fi

if [[ "$influxdb_datadir_volume" != "influxdb" && -d "$influxdb_datadir_volume" ]]; then
    echo "Removing influxdb volume if it is customized"
    rm -rfv  $influxdb_datadir_volume
fi

if [[ "$opensearch_datadir_volume" != "opensearch" && -d "$opensearch_datadir_volume" ]]; then
    echo "Removing opensearch volume if it is customized"
    rm -rfv  $opensearch_datadir_volume
fi

FOLDER_PATH="/etc/kolla"

if [[ -e "$FOLDER_PATH/ovsdpdk-db/ovs-dpdkctl.sh" ]]; then
    echo uninstalling ovs-dpdk service files and tools.
    sudo CONFIG_FILE="$FOLDER_PATH/ovsdpdk-db/ovs-dpdkctl.conf" $FOLDER_PATH/ovsdpdk-db/ovs-dpdkctl.sh uninstall
fi

echo "Getting folders name..."
for dir in $FOLDER_PATH/*; do
    skip="false"

    for inventory in $kolla_ansible_inventories; do
        if [ "$dir" == "$inventory" ]; then
            skip="true"
            break
        fi
    done

    if [ "$dir" == "$FOLDER_PATH/passwords.yml" ] || \
       [ "$dir" == "$FOLDER_PATH/globals.yml" ] || \
       [ "$dir" == "$FOLDER_PATH/globals.d" ] || \
       [ "$dir" == "$FOLDER_PATH/kolla-build.conf" ] || \
       [ "$dir" == "$FOLDER_PATH/config" ] || \
       [ "$dir" == "$FOLDER_PATH/certificates" ]; then
        echo "Skipping: $dir"
        skip="true"
    fi

    # If it's not to be skipped, remove it
    if [ "$skip" == "false" ]; then
        rm -rfv $dir
    fi
done

if [[ "$destroy_include_dev" == "yes" ]]; then
    echo "Cleaning up dev repos..."
    rm -rfv "${kolla_dev_repos_directory}"
fi