#!/bin/bash
if [[ $(pgrep qemu) ]]; then
    echo "Some qemu processes were detected."
    echo "Docker will not be able to stop the nova_libvirt container with those running."
    echo "Please clean them up before rerunning this script."
    exit 1
fi

if [ -n "$1" ]; then
    containers_to_kill=($(docker ps | grep -E "$1" | awk '{print $1}'))
    volumes_to_remove=($(docker volume ls | grep -E "$1" | awk '{print $1}'))
else
    containers_to_kill=(
        bootstrap_{ceph_mon,cinder,glance,heat,heka,ironic,ironic_pxe,keystone,magnum,mistral,mongodb,murano,neutron,nova,nova_compute} \
        cinder_{volume,scheduler,backup,api} \
        ceph_{mon,rgw} \
        elasticsearch \
        glance_{api,registry} \
        haproxy \
        heat_{api{,_cfn},engine} \
        heka \
        horizon \
        ironic_{inspector,conductor,api,pxe} \
        keepalived \
        keystone \
        kibana \
        kolla_toolbox \
        magnum_{api,conductor} \
        manila_{api,share,scheduler} \
        mariadb \
        memcached \
        mistral_{api,engine,executor} \
        murano_{api,engine} \
        neutron_{server,dhcp_agent,l3_agent,linuxbridge_agent,metadata_agent,openvswitch_agent} \
        nova_{scheduler,novncproxy,consoleauth,conductor,api,compute,libvirt,spicehtml5proxy,compute_ironic} \
        openvswitch_{vswitchd,db} \
        rabbitmq{,_bootstrap} \
        swift_{account_{auditor,reaper,replicator,server},container_{auditor,replicator,server,updater},object_{auditor,expirer,replicator,server,updater},proxy_server,rsyncd}
    )
    ceph_osd_bootstrap=$(docker ps -a --filter "name=bootstrap_osd_*" --format "{{.Names}}")
    ceph_osd_containers=$(docker ps -a --filter "name=ceph_osd_*" --format "{{.Names}}")
    containers_to_kill="${containers_to_kill} ${ceph_osd_containers} ${ceph_osd_bootstrap}"

    volumes_to_remove=(
        ceph_mon{,_config} \
        elasticsearch \
        glance \
        haproxy_socket \
        heka{,_socket} \
        ironic_pxe \
        kolla_logs \
        mariadb \
        mongodb \
        neutron_metadata_socket \
        nova_{compute,libvirt} \
        openvswitch_db \
        rabbitmq
    )
fi

echo "Stopping containers..."
(docker stop -t 2 ${containers_to_kill[@]} 2>&1) > /dev/null

echo "Removing containers..."
(docker rm -v -f ${containers_to_kill[@]} 2>&1) > /dev/null

echo "Removing volumes..."
(docker volume rm ${volumes_to_remove[@]} 2>&1) > /dev/null

echo "All cleaned up!"