OpenStack: Debug VM

export OS_ENV=dev
export SERVER_ID=$1
 
# search for VM by name
if [ ${#SERVER_ID} -ne 36 ]; then
    RESULT="$(openstack server list --all --name ${SERVER_ID})"
    if [ $(echo "${RESULT}" | wc -l) -eq 5 ]; then
        SERVER_ID=$(echo "${RESULT}" | tail -2 | head -1 | cut -d " " -f2)
    else
        echo "No VM with name ${SERVER_ID}) found, similar VMs:"
        echo "${RESULT}"
        exit 0
    fi
fi
 
RESULT=$(openstack server show ${SERVER_ID} -f value -c id)
if [ -z "${RESULT}" ]; then
    echo "Server UUID ${SERVER_ID} not found"
    exit 0
fi
 
echo -e "\e[34mVM:"
openstack server show -c name -c id -c addresses -c OS-EXT-SRV-ATTR:host -c status ${SERVER_ID}
 
echo -e "\n\e[34mProject:"
PROJECT_ID=$(openstack server show -c project_id -f value ${SERVER_ID})
openstack project show -c id -c name -c description ${PROJECT_ID}
 
echo -e "\n\e[34mDomain:"
DOMAIN_ID=$(openstack project show -c domain_id -f value ${PROJECT_ID})
openstack domain show -c id -c name -c description ${DOMAIN_ID}
 
echo -e "\n\e[34mServer:"
openstack server show ${SERVER_ID}
 
echo -e "\n\e[34mConsole:"
openstack console url show ${SERVER_ID}
 
echo -e "\n\e[34mEvents:"
openstack server event list ${SERVER_ID}
 
echo -e "\n\e[34mMigrations:"
openstack server migration list --server ${SERVER_ID} --sort-column 'Updated At'
 
echo -e "\n\e[34mVM Port(s):"
#nova interface-list ${SERVER_ID}
openstack port list --server ${SERVER_ID} --long
PORT_IDS=$(openstack port list --server ${SERVER_ID} -c id -f value)
 
for PORT_ID in ${PORT_IDS}; do
    NETWORK_ID=$(openstack port show ${PORT_ID} -c network_id -f value)
    NETWORK_NAME=$(openstack network show ${NETWORK_ID} -c name -f value)
 
    echo -e "\n+++++ Start network ${NETWORK_NAME} +++++"
 
    echo -e "\n\e[34mNetwork:"
    openstack network show ${NETWORK_ID}
 
    echo -e "\n\e[34mSubnet:"
    SUBNET_IDS=$(openstack subnet list --network ${NETWORK_ID} -c ID -f value)
    for SUBNET_ID in ${SUBNET_IDS}; do
        openstack subnet show ${SUBNET_ID}
    done
 
    echo -e "\n\e[34mNetwork ports:"
    openstack port list --network ${NETWORK_ID}
 
    echo -e "\n\e[34mSecurity group(s):"
    #SECURITY_GROUP_IDS="$(openstack port show ${PORT_ID} -c security_group_ids -f json | jq -r .security_group_ids[])"
    # workaround for old OSC
    #SECURITY_GROUP_IDS="$(openstack port show ${PORT_ID} -c security_group_ids -f json | jq -r .security_group_ids | tr ',' '\n')"
    SECURITY_GROUP_IDS=$(openstack port show ${PORT_ID} -c security_group_ids -f json | jq -r '.security_group_ids[]')
    for SECURITY_GROUP_ID in ${SECURITY_GROUP_IDS}; do
        openstack security group show ${SECURITY_GROUP_ID}
        echo
    done
 
    echo -e "\e[34mRouter(s):"
    ROUTER_PORT_ID=$(openstack port list --network ${NETWORK_ID} --device-owner network:ha_router_replicated_interface -c id -f value)
    ROUTER_ID=$(openstack port show ${ROUTER_PORT_ID} -c device_id -f value)
 
    openstack router show ${ROUTER_ID} -c id -c name -c routes
 
    echo -e "\nRouter ports:"
    openstack network agent list --router ${ROUTER_ID} --long --sort-column 'HA State'
    ROUTER_HOSTS=$(openstack network agent list --router ${ROUTER_ID} --long --sort-column 'HA State' -c Host -f value)
    for ROUTER_HOST in ${ROUTER_HOSTS}; do
        echo "ssh -t ${ROUTER_HOST} sudo ip netns exec qrouter-${ROUTER_ID} bash"
        ssh ${ROUTER_HOST} sudo ip netns exec qrouter-${ROUTER_ID} ip a | sed -n '/BROADCAST/,$p' | egrep -v "inet6|valid_lft"
        echo
    done
 
    echo -e "\e[34mDHCP/DNS:"
    DHCP_PORT_IDS=$(openstack port list --network ${NETWORK_ID} --device-owner network:dhcp -c id -f value)
    for DHCP_PORT_ID in ${DHCP_PORT_IDS}; do
        DHCP_HOST=$(openstack port show ${DHCP_PORT_ID} -c binding_host_id -f value)
        echo "ssh -t ${DHCP_HOST} sudo ip netns exec qdhcp-${NETWORK_ID} bash"
        ssh ${DHCP_HOST} sudo ip netns exec qdhcp-${NETWORK_ID} ip a | sed -n '/BROADCAST/,$p' | egrep -v "inet6|valid_lft"
        echo
    done
 
    echo "+++++ END network ${NETWORK_NAME} +++++"
done