#!/bin/bash

set -eux

BLOCKSTORAGESCALE=${BLOCKSTORAGESCALE:-0}
SWIFTSTORAGESCALE=${SWIFTSTORAGESCALE:-0}

if [ -d /etc/tripleo ]; then
    TRIPLEO_ROOT=/etc/tripleo
else
    TRIPLEO_ROOT=/opt/stack/tripleo-incubator
fi

OS_AUTH_URL=${OS_AUTH_URL:-""}
if [ -z "$OS_AUTH_URL" ]; then
    echo "You must source a stackrc file for the Undercloud."
    exit 1
fi

export TE_DATAFILE=nodes.json

source tripleo-overcloud-passwords

export OVERCLOUD_IP=$(nova list | grep notCompute0.*ctlplane | sed  -e "s/.*=\\([0-9.]*\\).*/\1/")

source $TRIPLEO_ROOT/overcloudrc

export no_proxy=${no_proxy:-""}
export no_proxy=$no_proxy,$OVERCLOUD_IP

# tripleo os-adduser -p $OVERCLOUD_DEMO_PASSWORD demo demo@example.com

if ! glance image-show user 2>&1 1>/dev/null; then
	glance image-create --name user --public --disk-format qcow2 \
	    --container-format bare --file fedora-user.qcow2
fi

tripleo wait_for 30 10 nova service-list --binary nova-compute 2\>/dev/null \| grep 'enabled.*\ up\ '

tripleo wait_for 30 10 neutron agent-list -f csv -c alive -c agent_type -c host \| grep "\":-).*Open vSwitch agent.*overcloud-novacompute\""

# source $TRIPLEO_ROOT/overcloudrc-user

NET_ID=$(neutron net-list -f csv --quote none | grep default-net | cut -d, -f1)

if ! nova keypair-show default 2>&1 1>/dev/null; then
	tripleo user-config
fi

nova boot --key-name default --flavor m1.tiny --image user --nic net-id=$NET_ID demo

sleep 3

PRIVATEIP=$(nova list | grep demo | awk -F"default-net=" '{print $2}' | awk '{print $1}')

tripleo wait_for 10 5 neutron port-list -f csv -c id --quote none \| grep id
PORT=$(neutron port-list | grep $PRIVATEIP | cut -d'|' -f2)
FLOATINGIP=$(neutron floatingip-create ext-net --port-id "${PORT//[[:space:]]/}" | awk '$2=="floating_ip_address" {print $4}')

SECGROUPID=$(nova secgroup-list | grep default | cut -d ' ' -f2)
neutron security-group-rule-create $SECGROUPID --protocol icmp \
    --direction ingress --port-range-min 8 || true
neutron security-group-rule-create $SECGROUPID --protocol tcp \
    --direction ingress --port-range-min 22 --port-range-max 22 || true

tripleo wait_for 30 10 ping -c 1 $FLOATINGIP

tripleo wait_for 10 10 nova list \| grep ACTIVE

ssh-keygen -R $FLOATINGIP
tripleo wait_for 30 10 ssh -o BatchMode=yes -o StrictHostKeyChecking=no fedora@$FLOATINGIP ls
tripleo wait_for 30 10 ssh -o BatchMode=yes -o StrictHostKeyChecking=no -tt fedora@$FLOATINGIP systemctl status cloud-final


echo Compute test successful!

if [ $BLOCKSTORAGESCALE -gt 0 ]; then
    CINDER_VOLUME_ID=$(cinder create 1 | grep " id " | awk '{print $4}')

    nova volume-attach demo $CINDER_VOLUME_ID

    tripleo wait_for 30 10 ssh -o StrictHostKeyChecking=no fedora@$FLOATINGIP ls /dev/vdb

    ssh -tt fedora@$FLOATINGIP sudo fdisk /dev/vdb <<EOF
o
w
EOF

    ssh -tt fedora@$FLOATINGIP sudo fdisk /dev/vdb <<EOF
n
p
1


w
EOF

    ssh -tt fedora@$FLOATINGIP sudo mkfs.ext4 /dev/vdb1

    ssh -tt fedora@$FLOATINGIP sudo mount /dev/vdb1 /mnt
    ssh -tt fedora@$FLOATINGIP sudo umount /mnt

    echo Cinder test successful!
fi

if [ $SWIFTSTORAGESCALE -gt 0 ]; then
    tmpfile=$(mktemp)
    echo SWIFTTEST > $tmpfile

    swift upload test $tmpfile
    swiftfile=$(swift list test)

    if [ ! $(swift download --output - test $swiftfile) == "SWIFTTEST" ]; then
        echo Swift test failed!
    fi

    echo Swift test successful!
fi
