
This changeset contains updates for Newton. Notable changes include: - Ubuntu 14.04 LTS (trusty) replaced by Ubuntu 16.04 LTS (xenial) - Higher RAM requirements, the controller VM needs 5120 MB - Script order changed (install-guide changes) - By default, mariadb does not use a root password but socket auth (sudo) - Nova does not configure any default flavors anymore; we create m1.nano and that's all there is when the cluster is built. - Remaining differences to install-guide marked in the source code - As always, new races fixed Change-Id: Id59e145140252c4384584a3899e01a38e8a57158
173 lines
5.3 KiB
Bash
Executable File
173 lines
5.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -o errexit -o nounset
|
|
TOP_DIR=$(cd "$(dirname "$0")/.." && pwd)
|
|
source "$TOP_DIR/config/paths"
|
|
source "$CONFIG_DIR/credentials"
|
|
source "$CONFIG_DIR/config.controller"
|
|
source "$LIB_DIR/functions.guest.sh"
|
|
|
|
exec_logfile
|
|
|
|
## This script access the OpenStack installation trough the dashboard by making
|
|
## wget or curl requests (whichever is available).
|
|
## It goes in this order:
|
|
## 1: retrieve cookie
|
|
## 2: use that cookie for authenticating with user/password and get the session id
|
|
## 3: use the session id and token for getting the (provider) network id
|
|
## 4: similar to step 3 but get the ID of the cirros image
|
|
## 5: launch an instance using the data from steps 2,3 and 4
|
|
|
|
echo "Testing horizon."
|
|
|
|
IP=$(echo "$NET_IF_1" |awk '{print $2}')
|
|
AUTH_URL="http://$IP/horizon/auth/login/"
|
|
DOMAIN="default"
|
|
USER=${ADMIN_USER_NAME}
|
|
PASSWORD=${ADMIN_PASS}
|
|
OUTPUT_DIR="test_horizon_out"
|
|
COOKIE_FILE="$OUTPUT_DIR/cookie.txt"
|
|
OUTPUT_FILE1="$OUTPUT_DIR/1.get_cookie.html"
|
|
OUTPUT_FILE2="$OUTPUT_DIR/2.check_credentials.html"
|
|
OUTPUT_FILE3="$OUTPUT_DIR/3.check_net_id.html"
|
|
OUTPUT_FILE4="$OUTPUT_DIR/4.check_image_id.html"
|
|
OUTPUT_FILE5="$OUTPUT_DIR/5.launch_instance.html"
|
|
|
|
echo "Clean previous files and clear variables before starting."
|
|
rm -f $COOKIE_FILE $OUTPUT_FILE1 $OUTPUT_FILE2 $OUTPUT_FILE3 $OUTPUT_FILE4 \
|
|
$OUTPUT_FILE5
|
|
|
|
mkdir -p $OUTPUT_DIR
|
|
|
|
# Ensure wget or curl are installed
|
|
echo "Testing availability of wget or curl."
|
|
if which wget &> /dev/null ; then
|
|
REQUEST_TOOL="wget"
|
|
elif which curl &> /dev/null; then
|
|
REQUEST_TOOL="curl"
|
|
else
|
|
echo "ERROR: neither wget nor curl were found. Please install one with:"
|
|
echo " apt-get -y install wget"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Found $REQUEST_TOOL."
|
|
|
|
function request_cmd {
|
|
# Usage:
|
|
# request_cmd URL OUT_FILE [POST_DATA] [REFERER]
|
|
|
|
URL=$1
|
|
OUTPUT_FILE=$2
|
|
|
|
if [[ -v 3 ]];then
|
|
DATA=$3
|
|
fi
|
|
|
|
if [[ -v 4 ]];then
|
|
REFERER=$4
|
|
fi
|
|
|
|
if [ "$REQUEST_TOOL" = "wget" ]; then
|
|
|
|
if [ -f "$COOKIE_FILE" ];then
|
|
COOKIE_ARG="--load-cookies=$COOKIE_FILE"
|
|
else
|
|
COOKIE_ARG=""
|
|
fi
|
|
|
|
if [[ -v DATA ]]; then
|
|
POST_ARG="--post-data=$DATA"
|
|
else
|
|
POST_ARG=""
|
|
fi
|
|
|
|
if [[ -v REFERER ]]; then
|
|
REFERER_ARG="--referer=$REFERER"
|
|
else
|
|
REFERER_ARG=""
|
|
fi
|
|
|
|
#echo "wget --quiet --keep-session-cookies --save-cookies $COOKIE_FILE \
|
|
# "$COOKIE_ARG" "$POST_ARG" "$REFERER_ARG" \
|
|
# --output-document=$OUTPUT_FILE $URL"
|
|
#echo
|
|
wget --quiet --keep-session-cookies --save-cookies $COOKIE_FILE \
|
|
$COOKIE_ARG $POST_ARG $REFERER_ARG \
|
|
--output-document="$OUTPUT_FILE" "$URL"
|
|
|
|
elif [ "$REQUEST_TOOL" = "curl" ]; then
|
|
|
|
[[ -n "$DATA" ]] && POST_ARG="-d $DATA"
|
|
[[ -n "$REFERER" ]] && REFERER_ARG="--referer $REFERER"
|
|
|
|
curl -L -c $COOKIE_FILE -b $COOKIE_FILE "$POST_ARG" --output "$OUTPUT_FILE"\
|
|
"$REFERER_ARG" -s "$URL"
|
|
fi
|
|
}
|
|
|
|
# Step 1: get the cookie
|
|
echo "Retrieving the cookie from $AUTH_URL."
|
|
request_cmd "$AUTH_URL" $OUTPUT_FILE1
|
|
|
|
# The "TOKEN" variable is the "Cross-site request forgery" prevention token
|
|
# It prevents man in the middle attacks
|
|
TOKEN=$(grep csrftoken $COOKIE_FILE | sed 's/^.*csrftoken\s*//')
|
|
|
|
# This data is what is going to be passed as the $_POST of the http request
|
|
DATA="username=$USER&password=$PASSWORD&domain=$DOMAIN&csrfmiddlewaretoken=$TOKEN"
|
|
|
|
# Step 2: check the login credentials and obtains the session ID
|
|
echo "Authenticating with the $USER credentials."
|
|
request_cmd "$AUTH_URL" $OUTPUT_FILE2 "$DATA"
|
|
|
|
|
|
# Check that "sessionid" appears in the cookie file
|
|
# This SESSIONID keeps the session open to avoid sending the user/password
|
|
# at every new request
|
|
SESSIONID=$(grep sessionid $COOKIE_FILE | sed 's/^.*sessionid\s*//')
|
|
if [ -z "$SESSIONID" ]; then
|
|
echo "Error: sessionid not present on file $COOKIE_FILE ...Exiting."
|
|
exit 1
|
|
else
|
|
echo "Login successful."
|
|
fi
|
|
|
|
# We need a new token, because it changes after step 2
|
|
TOKEN=$(grep csrftoken $COOKIE_FILE | sed 's/^.*csrftoken\s*//')
|
|
|
|
NET_URL="http://$IP/horizon/project/networks/"
|
|
REFERER="http://$IP/horizon/identity/"
|
|
DATA="login_region='http://controller:5000/v3'&login_domain=default&\
|
|
csrfmiddlewaretoken=$TOKEN&sessionid=$SESSIONID"
|
|
|
|
# Step 3: Load the page with the networks
|
|
echo "Loading the networks tab and parsing the network ID for provider."
|
|
request_cmd "$NET_URL" $OUTPUT_FILE3 "$DATA" "$REFERER"
|
|
|
|
# Parse (provider) network ID
|
|
NET_ID=$(grep "provider" $OUTPUT_FILE3 | \
|
|
awk -F"data-object-id=" '{print $2}' | \
|
|
awk -F'"' '{print $2}')
|
|
|
|
echo "The provider NET_ID is $NET_ID"
|
|
|
|
#######
|
|
# The following part is broken.
|
|
# The same DATA section works on the previous requests so either the
|
|
# REFERER or the IMG_URL (not likely) have changed since Mitaka
|
|
|
|
#IMG_URL="http://$IP/horizon/project/images/"
|
|
#DATA="login_region='http://controller:5000/v3'&login_domain=default&\
|
|
#csrfmiddlewaretoken=$TOKEN&sessionid=$SESSIONID"
|
|
|
|
## Step 4: Load the page with the available images
|
|
#echo "Loading the images tab and parsing the image ID for cirros."
|
|
#request_cmd "$IMG_URL" $OUTPUT_FILE4 "$DATA" "$REFERER"
|
|
#
|
|
## Parse (cirros) image ID
|
|
#IMAGE_ID=$(grep "cirros" $OUTPUT_FILE4 | \
|
|
# awk -F"obj_id=" '{print $2}' | \
|
|
# awk -F'"' '{print $1}')
|
|
#
|
|
#echo "The cirros IMAGE_ID is $IMAGE_ID"
|