#!/bin/sh

set -e
set -x

. /root/oci-openrc

IMAGE_FILE=$(ls debian-*-openstack-*.* 2>/dev/null)
if [ -z "${IMAGE_FILE}" ] ; then
	echo "Cannot find image to upload to Glance"
	exit 1
fi
if echo "${IMAGE_FILE}" | grep -q qcow2 ; then
	DISK_FORMAT=qcow2
else
	DISK_FORMAT=raw
fi

EXT_NETWORK_PREFIX=192.168.105
INT_NETWORK_PREFIX=192.168.200

su nova -s /bin/sh -c 'nova-manage cell_v2 discover_hosts'

####################
### GLANCE IMAGE ###
####################
openstack image create \
	--property hw_disk_bus=scsi \
	--property hw_scsi_model=virtio-scsi \
	--container-format bare --disk-format ${DISK_FORMAT} \
	--file ${IMAGE_FILE} \
	--public \
	${IMAGE_FILE}

##################
### NETWORKING ###
##################

# Create external network
openstack network create --external --provider-physical-network external --provider-network-type flat ext-net
openstack subnet create --network ext-net --allocation-pool start=${EXT_NETWORK_PREFIX}.100,end=${EXT_NETWORK_PREFIX}.199 --dns-nameserver 84.16.67.69 --gateway ${EXT_NETWORK_PREFIX}.1 --subnet-range ${EXT_NETWORK_PREFIX}.0/24 --no-dhcp ext-subnet

# Create internal network
openstack network create --share demo-net
openstack subnet create --network demo-net --subnet-range ${INT_NETWORK_PREFIX}.0/24 --dns-nameserver 84.16.67.69 demo-subnet

# Create router, add it to demo-subnet and set it as gateway
openstack router create demo-router
openstack router add subnet demo-router demo-subnet
openstack router set demo-router --external-gateway ext-net

# Create a few floating IPs
openstack floating ip create ext-net
openstack floating ip create ext-net
openstack floating ip create ext-net
openstack floating ip create ext-net
openstack floating ip create ext-net

# Add rules to the admin's security group to allow ping and ssh
SECURITY_GROUP=$(openstack security group list --project admin --format=csv | q -d , -H 'SELECT ID FROM -')
openstack security group rule create --ingress --protocol tcp --dst-port 22 ${SECURITY_GROUP}
openstack security group rule create --protocol icmp --ingress ${SECURITY_GROUP}

###############
### SSH KEY ###
###############
openstack keypair create --public-key ~/.ssh/id_rsa.pub demo-keypair

###############
### FLAVORS ###
###############
openstack flavor create --ram 2048 --disk 5 --vcpus 1 cpu1-ram2-disk5
openstack flavor create --ram 6144 --disk 20 --vcpus 2 cpu2-ram6-disk20
openstack flavor create --ram 12288 --disk 40 --vcpus 4 cpu4-ram12-disk40

#######################
### Boot a first VM ###
#######################
openstack server create --image ${IMAGE_FILE} --nic net-id=demo-net --key-name demo-keypair --flavor cpu1-ram2-disk5 demo-server
# Wait until it's active
while [ "$(openstack server show demo-server --format value -c status)" != "ACTIVE" ] ; do
	sleep 2
done
# openstack server add floating ip
FLOATING_IP=$(openstack floating ip list --format value -c "Floating IP Address" | head -n 1)
openstack server add floating ip demo-server ${FLOATING_IP}
