Listing user of specific or all compute host.
#!/bin/bash
#v1 by [email protected]
echo -e "\n=================================================="
echo "1 - JKT"
echo "2 - WJV" 
echo "3 - Exit"
echo "=================================================="
read -p "Choose Region : " REGION

F_LIST_HOST_COMPUTE () {
    openstack compute service list | grep -i compute | awk '{print $6 "\t" $8 "\t" $10}' | nl
}

F_COMPUTE_OPTION () { 
    TANGGAL=$(date +%d%h%Y)
    echo -e "\n=================================================="
    echo "1 - Specific Compute Host"
    echo "2 - All Compute Host" 
    echo "=================================================="
    read -p "Choose Option: " OPTION
    case $OPTION in
    1)
        echo ""
        read -p "Input Compute Name: " COMPUTE_NAME
        echo -e "\nThe program will start to generate Project ID of all instance in $COMPUTE_NAME ..."; sleep 3s
        echo "Wait a moment ..."; sleep 3s
        for i in `openstack server list --all --host $COMPUTE_NAME -f value -c ID`; do openstack server show $i | grep project_id | awk '{print $4}'; done | tee -a project_$COMPUTE_NAME$TANGGAL.txt
        mv project_$COMPUTE_NAME$TANGGAL.txt result/
        echo -e "\nFinish. Project ID of all instance data can be found at project_$COMPUTE_NAME$TANGGAL.txt ..."; sleep 3s

        echo -e "\nNext, the program will start to generate email user based on Project ID ..."; sleep 3s
        echo -e "Wait for 1 hour (depend on how many project is) ...\n"; sleep 3s

        for i in `cat result/project_$COMPUTE_NAME$TANGGAL.txt`; do openstack user list --project $i -f value -c Name | egrep -o "\b[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+.[a-zA-Z0-9.-]+\b"; done | tee -a list_$COMPUTE_NAME$TANGGAL.txt
        mv list_$COMPUTE_NAME$TANGGAL.txt result/
        echo -e "\nFinish. Email user data can be found at list_$COMPUTE_NAME$TANGGAL.txt ..."; sleep 3s
        ;;
    2)
        echo -e "\nThe program will start to generate Project ID of all instance ..."; sleep 3s
        echo "Wait for 1 hour (depend on how many instance is) ..."; sleep 3s
        for i in `openstack server list --all -f value -c ID`; do openstack server show $i -f value -c project_id; done | tee -a project_list$TANGGAL.txt
        mv project_list$TANGGAL.txt result/
        echo "Finish. Project ID of all instance data can be found at projectid_list$TANGGAL.txt ..."; sleep 3s

        echo -e "\nNext, the program will start to generate email user based on Project ID ..."; sleep 3s
        echo "Wait for 1 hour (depend on how many project is) ..."; sleep 3s
        for i in `cat result/project_list$TANGGAL.txt`; do openstack user list --project $i -f value -c Name | egrep -o "\b[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+.[a-zA-Z0-9.-]+\b"; done | tee -a email_list$TANGGAL.txt
        mv email_list$TANGGAL.txt result/
        echo -e "\nFinish. Email user data can be found at email_list$TANGGAL.txt ..."; sleep 3s
        ;;
    *)
        exit
        ;;
esac    
}

case $REGION in
    1)
        source xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-rc.sh
        echo -e "\nCompute Host List is ..."
        F_LIST_HOST_COMPUTE
        F_COMPUTE_OPTION
        ;;
    2)
        source xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-rc.sh
        echo -e "\nCompute Host List is ..."
        F_LIST_HOST_COMPUTE
        F_COMPUTE_OPTION
        ;;
    3)
        exit
        ;;
esac