python-fuelclient/tools/prepare_nailgun.sh

156 lines
3.8 KiB
Bash

#!/bin/bash
# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
set -eu
NAILGUN_CONFIG=$ARTIFACTS/test.yaml
NAILGUN_ROOT=$FUEL_WEB_ROOT/nailgun
err() {
printf "%s\n" "$1" >&2
}
msg() {
printf "%s\n" "$1"
}
# Synchronizes the schema of the database and loads default data.
setup_db() {
msg "Setting up database."
pushd $NAILGUN_ROOT > /dev/null
tox -e venv -- python manage.py syncdb > /dev/null
tox -e venv -- python manage.py loaddefault > /dev/null
popd > /dev/null
}
# Returns: a server pid, that you have to close manually
run_server() {
local run_server_cmd="\
python manage.py run \
--port=$NAILGUN_PORT \
--config=$NAILGUN_CONFIG \
--fake-tasks \
--fake-tasks-tick-count=80 \
--fake-tasks-tick-interval=1"
local server_log=$(mktemp $ARTIFACTS/test_nailgun_cli_server.XXXX)
local check_url="http://0.0.0.0:${NAILGUN_PORT}${NAILGUN_CHECK_PATH}"
# run new server instance
pushd $NAILGUN_ROOT > /dev/null
tox -e venv -- $run_server_cmd >> $server_log 2>&1 &
popd > /dev/null
# Wait for server's availability
which curl > /dev/null
if [[ $? -eq 0 ]]; then
local num_retries=$((NAILGUN_START_MAX_WAIT_TIME * 10))
local i=0
while true; do
# Fail if number of retries exeeded
if [[ $i -gt $((num_retries + 1)) ]]; then return 1; fi
local http_code=$(curl -s -w %{http_code} -o /dev/null $check_url)
if [[ "$http_code" = "200" ]]; then return 0; fi
sleep 0.1
i=$((i + 1))
done
else
err "Failed to start Nailgun in ${NAILGUN_START_MAX_WAIT_TIME} seconds."
exit 1
fi
}
# Set up test environment
prepare_env() {
mkdir -p $ARTIFACTS
}
# Generates server configuration file
create_settings_yaml() {
cat > $NAILGUN_CONFIG <<EOL
DEVELOPMENT: 1
STATIC_DIR: ${ARTIFACTS}/static_compressed
TEMPLATE_DIR: ${ARTIFACTS}/static_compressed
DATABASE:
name: ${TEST_NAILGUN_DB}
engine: "postgresql"
host: "localhost"
port: "5432"
user: "nailgun"
passwd: "nailgun"
API_LOG: ${ARTIFACTS}/api.log
APP_LOG: ${ARTIFACTS}/app.log
EOL
# Create appropriate Fuel Client config
cat > $FUELCLIENT_CUSTOM_SETTINGS <<EOL
# Connection settings
SERVER_ADDRESS: "127.0.0.1"
LISTEN_PORT: "${NAILGUN_PORT}"
KEYSTONE_USER: "admin"
KEYSTONE_PASS: "admin"
EOL
}
# Clones Nailgun from git, pulls specified patch and
# switches to the specified commit
obtain_nailgun() {
err "Obtaining Nailgun with the revision $FUEL_COMMIT"
if [[ "$FUEL_WEB_CLONE" == "yes" ]]; then
git clone --depth 1 $FUEL_WEB_REPO $FUEL_WEB_ROOT || \
{ err "Failed to clone Nailgun"; exit 1; }
fi
if [[ ! -d "$NAILGUN_ROOT" ]]; then
err "Nailgun directory $NAILGUN_ROOT not found."
exit 1
fi
pushd "$NAILGUN_ROOT" > /dev/null
echo $FETCH_REPO
if [[ -n $FETCH_REPO ]]; then
err "Fetching changes from $FETCH_REPO $FETCH_REFSPEC"
git fetch "$FETCH_REPO" "$FETCH_REFSPEC" || \
{ err "Failed to pull changes"; exit 1; }
fi
git checkout "$FUEL_COMMIT" || \
{ err "Failed to checkout to $FUEL_COMMIT"; exit 1; }
popd > /dev/null
}
prepare_env
obtain_nailgun
create_settings_yaml
setup_db
run_server