#!/bin/bash
#------------------------
# Testing keystone-daemon
#------------------------
set -e

DAEMONS=('apache2')

mysql -u root << EOF
CREATE USER IF NOT EXISTS 'keystone'@'localhost' IDENTIFIED BY 'changeme';
CREATE USER IF NOT EXISTS 'keystone'@'%' IDENTIFIED BY 'changeme';
DROP DATABASE IF EXISTS keystone;
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%';
EOF

crudini --set /etc/keystone/keystone.conf database connection "mysql+pymysql://keystone:changeme@localhost/keystone"

sudo -u keystone keystone-manage --config-dir /etc/keystone db_sync
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

for daemon in "${DAEMONS[@]}"; do
    systemctl restart "$daemon"
done

ret=0

for daemon in "${DAEMONS[@]}"; do
    TIMEOUT=50
    while [ "$TIMEOUT" -gt 0 ]; do
        if systemctl is-active "$daemon" > /dev/null; then
            echo "OK"
            break
        fi
        TIMEOUT=$((TIMEOUT - 1))
        sleep 0.1
    done

    if [ "$TIMEOUT" -le 0 ]; then
        echo "ERROR: ${daemon} IS NOT RUNNING"
        ret=1
    fi
done

if [ "$ret" -ne 0 ]; then
    exit "$ret"
fi

echo -n "Checking keystone endpoint ... "
HTTP_STATUS=$(curl -s -o /tmp/keystone-v3.json -w "%{http_code}" \
    -H "Accept: application/json" http://localhost:5000/v3)

if [ "$HTTP_STATUS" -eq 200 ]; then
    echo "OK (received HTTP $HTTP_STATUS)"
    jq -r '.' /tmp/keystone-v3.json
else
    echo "ERROR: Unexpected response code ($HTTP_STATUS)"
    cat /tmp/keystone-v3.json
    exit 1
fi

keystone-manage bootstrap \
    --bootstrap-password changeme \
    --bootstrap-admin-url http://localhost:5000/v3/ \
    --bootstrap-internal-url http://localhost:5000/v3/ \
    --bootstrap-public-url http://localhost:5000/v3/ \
    --bootstrap-region-id RegionOne

openstack --os-region-name RegionOne \
    --os-auth-url http://localhost:5000/v3 \
    --os-project-domain-name Default \
    --os-user-domain-name Default \
    --os-project-name admin \
    --os-username admin \
    --os-password changeme \
    token issue
