#!/bin/bash #set -x OS_KEYPAIR_NAME=ovh_$(hostname -s) OS_MACHINE_NAME=gbv SERVER_RUNNING=false function int_hdl(){ if $SERVER_RUNNING; then echo "Deleting machine..." OPENSTACK_RESPONSE="$(openstack server delete --wait $OS_MACHINE_NAME)" until [ "$OPENSTACK_TERMINATION_RESPONSE" = '[]' ] do echo "Waiting for termination..." sleep 10 OPENSTACK_TERMINATION_RESPONSE="$(openstack server list -f json)" echo "OpenStack said:" jq <<< $OPENSTACK_TERMINATION_RESPONSE done fi } trap int_hdl SIGINT source openrc.sh # # Prerequisites # #if ! command -v ipcalc-ng &>/dev/null #then #echo >&2 "ipcalc-ng is required. Exiting." #exit 1 #fi if ! command -v openstack &>/dev/null then echo >&2 "openstack is required. Exiting." exit 1 fi if ! command -v nova &>/dev/null then echo >&2 "nova is required. Exiting." exit 1 fi if ! command -v ssh &>/dev/null then echo >&2 "ssh is required. Exiting." exit 1 fi if ! command -v ssh-keygen &>/dev/null then echo >&2 "ssh-keygen is required. Exiting." exit 1 fi if ! command -v jq &>/dev/null then echo >&2 "jq is required. Exiting." exit 1 fi # # Upload key material # if [ ! -e ~/.ssh/id_ovh ] then echo "Generating SSH key..." ssh-keygen -f ~/.ssh/id_ovh fi echo "Checking for SSH key in OpenStack..." openstack keypair list|grep -q $OS_KEYPAIR_NAME RESULT=$? if [ $RESULT -eq 1 ]; then echo "Uploading SSH key to OpenStack..." nova keypair-add --pub-key ~/.ssh/id_ovh.pub $OS_KEYPAIR_NAME fi # # Get flavor and image # echo "Gathering image and flavor information..." FLAVOR_PRESEL="$(openstack flavor list -f json|jq -r '.[]|select(.Name=="s1-2")')" echo "Selected this flavor:" jq <<< $FLAVOR_PRESEL FLAVOR="$(jq -r '.ID' <<< $FLAVOR_PRESEL)" IMAGE_PRESEL="$(openstack image list -f json|jq -r '.[]|select(.Name=="Debian 10")')" echo "Selected this image:" jq <<< $IMAGE_PRESEL IMAGE="$(jq -r '.ID' <<< $IMAGE_PRESEL)" echo "Creating server..." openstack server create --image $IMAGE --flavor $FLAVOR --wait --key-name $OS_KEYPAIR_NAME $OS_MACHINE_NAME SERVER_RUNNING=true # # Extract IPv4 address # SERVER_IPS="$(openstack server show gbv -f json|jq -r .addresses)" SERVER_IPS="${SERVER_IPS##Ext-Net=}" read -a SERVER_IPS <<< $SERVER_IPS SERVER_IPS[0]="${SERVER_IPS[0]%%,}" #ipcalc-ng -c4 ${SERVER_IPS[0]} &>/dev/null grep -q '\.' <<< ${SERVER_IPS[0]} IS_IPV4=$? if [ $IS_IPV4 -eq 0 ] then SERVER_IP=${SERVER_IPS[0]} else SERVER_IP=${SERVER_IPS[1]} fi echo "Server reachable on $SERVER_IP." # # Open tunnel # echo "Waiting 30 seconds for setup completion..." sleep 30 echo "Opening tunnel on socks://localhost:23406..." trap - SIGINT ssh -D 23406 -i ~/.ssh/id_ovh -o StrictHostKeyChecking=no -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -N debian@$SERVER_IP echo "Tunnel closed. Destroying server..." int_hdl