blob: 2df0315c1cd4ab2dbe258cdc194cacce5a1affed [file] [log] [blame]
Dean Troyerfda65b82011-11-02 12:13:33 -05001#!/usr/bin/env bash
2#
Dean Troyere62ba4d2012-06-27 22:07:34 -05003# **configure_tempest.sh**
4
5# Build a tempest configuration file from devstack
Dean Troyerfda65b82011-11-02 12:13:33 -05006
Jay Pipes678a1882012-04-23 10:56:15 -04007echo "**************************************************"
8echo "Configuring Tempest"
9echo "**************************************************"
10
11# This script exits on an error so that errors don't compound and you see
12# only the first error that occured.
13set -o errexit
14
15# Print the commands being run so that we can see the command that triggers
16# an error. It is also useful for following allowing as the install occurs.
17set -o xtrace
18
Dean Troyerfda65b82011-11-02 12:13:33 -050019function usage {
Dean Troyer608bb122012-01-10 14:43:17 -060020 echo "$0 - Build tempest.conf"
Dean Troyerfda65b82011-11-02 12:13:33 -050021 echo ""
Jay Pipes678a1882012-04-23 10:56:15 -040022 echo "Usage: $0"
Dean Troyerfda65b82011-11-02 12:13:33 -050023 exit 1
24}
25
Dean Troyer44d8f8f2011-11-23 23:21:06 -060026if [ "$1" = "-h" ]; then
Dean Troyerfda65b82011-11-02 12:13:33 -050027 usage
28fi
29
Dean Troyerfda65b82011-11-02 12:13:33 -050030# Keep track of the current directory
31TOOLS_DIR=$(cd $(dirname "$0") && pwd)
Dean Troyer7f9aa712012-01-31 12:11:56 -060032TOP_DIR=$(cd $TOOLS_DIR/..; pwd)
33
34# Import common functions
35. $TOP_DIR/functions
Dean Troyerfda65b82011-11-02 12:13:33 -050036
37# Abort if localrc is not set
38if [ ! -e $TOP_DIR/localrc ]; then
Jay Pipes58d34ea2012-04-05 17:19:02 -040039 echo "You must have a localrc with necessary basic configuration defined before proceeding."
Dean Troyerfda65b82011-11-02 12:13:33 -050040 exit 1
41fi
42
Jay Pipes58d34ea2012-04-05 17:19:02 -040043# Abort if openrc is not set
44if [ ! -e $TOP_DIR/openrc ]; then
45 echo "You must have an openrc with ALL necessary passwords and credentials defined before proceeding."
46 exit 1
47fi
48
Jay Pipes678a1882012-04-23 10:56:15 -040049# Source params
Jay Pipes58d34ea2012-04-05 17:19:02 -040050source $TOP_DIR/openrc
Dean Troyerfda65b82011-11-02 12:13:33 -050051
52# Where Openstack code lives
53DEST=${DEST:-/opt/stack}
54
Jay Pipes4ba6eeb2012-08-01 11:55:12 -040055NOVA_SOURCE_DIR=$DEST/nova
Dean Troyer608bb122012-01-10 14:43:17 -060056TEMPEST_DIR=$DEST/tempest
Jay Pipes678a1882012-04-23 10:56:15 -040057CONFIG_DIR=$TEMPEST_DIR/etc
Dean Troyer608bb122012-01-10 14:43:17 -060058TEMPEST_CONF=$CONFIG_DIR/tempest.conf
Dean Troyer44d8f8f2011-11-23 23:21:06 -060059
Dean Troyerfda65b82011-11-02 12:13:33 -050060# Use the GUEST_IP unless an explicit IP is set by ``HOST_IP``
61HOST_IP=${HOST_IP:-$GUEST_IP}
62# Use the first IP if HOST_IP still is not set
63if [ ! -n "$HOST_IP" ]; then
64 HOST_IP=`LC_ALL=C /sbin/ifconfig | grep -m 1 'inet addr:'| cut -d: -f2 | awk '{print $1}'`
65fi
66
Jay Pipes678a1882012-04-23 10:56:15 -040067# Glance should already contain images to be used in tempest
68# testing. Here we simply look for images stored in Glance
69# and set the appropriate variables for use in the tempest config
Devananda van der Veenc0c6f002012-07-06 17:49:12 -070070# We ignore ramdisk and kernel images, look for the default image
71# DEFAULT_IMAGE_NAME. If not found, we set the IMAGE_UUID to the
72# first image returned and set IMAGE_UUID_ALT to the second,
Jay Pipes678a1882012-04-23 10:56:15 -040073# if there is more than one returned...
Sean Dague0f5da002012-05-03 11:52:55 -040074# ... Also ensure we only take active images, so we don't get snapshots in process
Jay Pipesa1c87382012-04-27 17:46:58 -040075IMAGE_LINES=`glance image-list`
Jay Pipes678a1882012-04-23 10:56:15 -040076IFS="$(echo -e "\n\r")"
77IMAGES=""
78for line in $IMAGE_LINES; do
Devananda van der Veenc0c6f002012-07-06 17:49:12 -070079 if [ -z $DEFAULT_IMAGE_NAME ]; then
80 IMAGES="$IMAGES `echo $line | grep -v "^\(ID\|+--\)" | grep -v "\(aki\|ari\)" | grep 'active' | cut -d' ' -f2`"
81 else
82 IMAGES="$IMAGES `echo $line | grep -v "^\(ID\|+--\)" | grep -v "\(aki\|ari\)" | grep 'active' | grep "$DEFAULT_IMAGE_NAME" | cut -d' ' -f2`"
83 fi
Dean Troyer3320c552011-11-23 23:19:10 -060084done
Jay Pipes678a1882012-04-23 10:56:15 -040085# Create array of image UUIDs...
86IFS=" "
87IMAGES=($IMAGES)
88NUM_IMAGES=${#IMAGES[*]}
89echo "Found $NUM_IMAGES images"
90if [[ $NUM_IMAGES -eq 0 ]]; then
91 echo "Found no valid images to use!"
92 exit 1
93fi
94IMAGE_UUID=${IMAGES[0]}
95IMAGE_UUID_ALT=$IMAGE_UUID
96if [[ $NUM_IMAGES -gt 1 ]]; then
97 IMAGE_UUID_ALT=${IMAGES[1]}
Dean Troyer608bb122012-01-10 14:43:17 -060098fi
Dean Troyer3320c552011-11-23 23:19:10 -060099
Jay Pipesd01325f2012-04-04 16:21:33 -0400100# Create tempest.conf from tempest.conf.tpl
Sean Dague0f5da002012-05-03 11:52:55 -0400101# copy every time, because the image UUIDS are going to change
102cp $TEMPEST_CONF.tpl $TEMPEST_CONF
Jesse Andrewsd7326d22011-11-20 10:02:26 -0800103
Jay Pipes3edd5b42012-07-08 21:04:12 -0400104COMPUTE_ADMIN_USERNAME=${ADMIN_USERNAME:-admin}
105COMPUTE_ADMIN_PASSWORD=${ADMIN_PASSWORD:-secrete}
106COMPUTE_ADMIN_TENANT_NAME=${ADMIN_TENANT:-admin}
107
108IDENTITY_ADMIN_USERNAME=${ADMIN_USERNAME:-admin}
109IDENTITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-secrete}
110IDENTITY_ADMIN_TENANT_NAME=${ADMIN_TENANT:-admin}
Jay Pipesb297d2d2012-05-10 11:21:22 -0400111
Jay Pipesd01325f2012-04-04 16:21:33 -0400112IDENTITY_USE_SSL=${IDENTITY_USE_SSL:-False}
Jay Pipes678a1882012-04-23 10:56:15 -0400113IDENTITY_HOST=${IDENTITY_HOST:-127.0.0.1}
114IDENTITY_PORT=${IDENTITY_PORT:-5000}
115IDENTITY_API_VERSION="v2.0" # Note: need v for now...
Jay Pipesd01325f2012-04-04 16:21:33 -0400116# TODO(jaypipes): This is dumb and needs to be removed
117# from the Tempest configuration file entirely...
118IDENTITY_PATH=${IDENTITY_PATH:-tokens}
119IDENTITY_STRATEGY=${IDENTITY_STRATEGY:-keystone}
Jay Pipes3edd5b42012-07-08 21:04:12 -0400120IDENTITY_CATALOG_TYPE=identity
Jay Pipesd01325f2012-04-04 16:21:33 -0400121
122# We use regular, non-admin users in Tempest for the USERNAME
123# substitutions and use ADMIN_USERNAME et al for the admin stuff.
124# OS_USERNAME et all should be defined in openrc.
125OS_USERNAME=${OS_USERNAME:-demo}
126OS_TENANT_NAME=${OS_TENANT_NAME:-demo}
Jay Pipesb297d2d2012-05-10 11:21:22 -0400127OS_PASSWORD=${OS_PASSWORD:$ADMIN_PASSWORD}
Jay Pipesd01325f2012-04-04 16:21:33 -0400128
Jay Pipesb297d2d2012-05-10 11:21:22 -0400129# See files/keystone_data.sh where alt_demo user
130# and tenant are set up...
131ALT_USERNAME=${ALT_USERNAME:-alt_demo}
132ALT_TENANT_NAME=${ALT_TENANT_NAME:-alt_demo}
Jay Pipesd01325f2012-04-04 16:21:33 -0400133ALT_PASSWORD=$OS_PASSWORD
Jay Pipesd01325f2012-04-04 16:21:33 -0400134
Devananda van der Veenc0c6f002012-07-06 17:49:12 -0700135# Check Nova for existing flavors and, if set, look for the
136# DEFAULT_INSTANCE_TYPE and use that. Otherwise, just use the first flavor.
137FLAVOR_LINES=`nova flavor-list`
138IFS="$(echo -e "\n\r")"
139FLAVORS=""
140for line in $FLAVOR_LINES; do
141 if [ -z $DEFAULT_INSTANCE_TYPE ]; then
Devananda van der Veen27004922012-08-15 16:38:29 -0700142 FLAVORS="$FLAVORS `echo $line | grep -v "^\(|\s*ID\|+--\)" | cut -d' ' -f2`"
Devananda van der Veenc0c6f002012-07-06 17:49:12 -0700143 else
Devananda van der Veen27004922012-08-15 16:38:29 -0700144 FLAVORS="$FLAVORS `echo $line | grep -v "^\(|\s*ID\|+--\)" | grep "$DEFAULT_INSTANCE_TYPE" | cut -d' ' -f2`"
Devananda van der Veenc0c6f002012-07-06 17:49:12 -0700145 fi
146done
147IFS=" "
148FLAVORS=($FLAVORS)
149NUM_FLAVORS=${#FLAVORS[*]}
150echo "Found $NUM_FLAVORS flavors"
151if [[ $NUM_FLAVORS -eq 0 ]]; then
152 echo "Found no valid flavors to use!"
153 exit 1
154fi
155FLAVOR_REF=${FLAVORS[0]}
156FLAVOR_REF_ALT=$FLAVOR_REF
157if [[ $NUM_FLAVORS -gt 1 ]]; then
158 FLAVOR_REF_ALT=${FLAVORS[1]}
159fi
Jay Pipesd01325f2012-04-04 16:21:33 -0400160
Jay Pipesd01325f2012-04-04 16:21:33 -0400161# Do any of the following need to be configurable?
162COMPUTE_CATALOG_TYPE=compute
163COMPUTE_CREATE_IMAGE_ENABLED=True
Jay Pipes3edd5b42012-07-08 21:04:12 -0400164COMPUTE_ALLOW_TENANT_ISOLATION=True
Dan Smith88ae3762012-09-04 10:18:18 -0700165COMPUTE_ALLOW_TENANT_REUSE=True
Jay Pipes4ba6eeb2012-08-01 11:55:12 -0400166COMPUTE_RESIZE_AVAILABLE=False
David Kranz686f98e2012-07-24 09:15:44 -0400167COMPUTE_CHANGE_PASSWORD_AVAILABLE=False # not supported with QEMU...
Jay Pipesd01325f2012-04-04 16:21:33 -0400168COMPUTE_LOG_LEVEL=ERROR
Jay Pipes3edd5b42012-07-08 21:04:12 -0400169BUILD_INTERVAL=3
170BUILD_TIMEOUT=400
Rohit Karajgi2eb9a132012-08-08 02:34:51 -0700171COMPUTE_BUILD_INTERVAL=3
172COMPUTE_BUILD_TIMEOUT=400
173VOLUME_BUILD_INTERVAL=3
174VOLUME_BUILD_TIMEOUT=300
Jay Pipes3edd5b42012-07-08 21:04:12 -0400175RUN_SSH=True
Devananda van der Veenc0c6f002012-07-06 17:49:12 -0700176# Check for DEFAULT_INSTANCE_USER and try to connect with that account
177SSH_USER=${DEFAULT_INSTANCE_USER:-$OS_USERNAME}
Jay Pipes3edd5b42012-07-08 21:04:12 -0400178NETWORK_FOR_SSH=private
179IP_VERSION_FOR_SSH=4
180SSH_TIMEOUT=4
Jay Pipes4ba6eeb2012-08-01 11:55:12 -0400181# Whitebox testing configuration for Compute...
182COMPUTE_WHITEBOX_ENABLED=True
183COMPUTE_SOURCE_DIR=$NOVA_SOURCE_DIR
184COMPUTE_BIN_DIR=/usr/bin/nova
185COMPUTE_CONFIG_PATH=/etc/nova/nova.conf
186# TODO(jaypipes): Create the key file here... right now, no whitebox
187# tests actually use a key.
188COMPUTE_PATH_TO_PRIVATE_KEY=$TEMPEST_DIR/id_rsa
189COMPUTE_DB_URI=mysql://root:$MYSQL_PASSWORD@localhost/nova
Jay Pipesd01325f2012-04-04 16:21:33 -0400190
Jay Pipesc0e1ef52012-04-30 15:56:13 -0400191# Image test configuration options...
192IMAGE_HOST=${IMAGE_HOST:-127.0.0.1}
193IMAGE_PORT=${IMAGE_PORT:-9292}
Jay Pipes3edd5b42012-07-08 21:04:12 -0400194IMAGE_API_VERSION=1
195IMAGE_CATALOG_TYPE=image
196
197# Network API test configuration
198NETWORK_CATALOG_TYPE=network
199NETWORK_API_VERSION=2.0
Jay Pipesc0e1ef52012-04-30 15:56:13 -0400200
Rohit Karajgi5ef90472012-07-31 06:20:35 -0700201# Volume API test configuration
202VOLUME_CATALOG_TYPE=volume
203
Dean Troyer608bb122012-01-10 14:43:17 -0600204sed -e "
Jay Pipesd01325f2012-04-04 16:21:33 -0400205 s,%IDENTITY_USE_SSL%,$IDENTITY_USE_SSL,g;
Jay Pipes678a1882012-04-23 10:56:15 -0400206 s,%IDENTITY_HOST%,$IDENTITY_HOST,g;
Jay Pipesd01325f2012-04-04 16:21:33 -0400207 s,%IDENTITY_PORT%,$IDENTITY_PORT,g;
Jay Pipes678a1882012-04-23 10:56:15 -0400208 s,%IDENTITY_API_VERSION%,$IDENTITY_API_VERSION,g;
Jay Pipesd01325f2012-04-04 16:21:33 -0400209 s,%IDENTITY_PATH%,$IDENTITY_PATH,g;
210 s,%IDENTITY_STRATEGY%,$IDENTITY_STRATEGY,g;
Jay Pipes3edd5b42012-07-08 21:04:12 -0400211 s,%IDENTITY_CATALOG_TYPE%,$IDENTITY_CATALOG_TYPE,g;
Jay Pipesd01325f2012-04-04 16:21:33 -0400212 s,%USERNAME%,$OS_USERNAME,g;
213 s,%PASSWORD%,$OS_PASSWORD,g;
214 s,%TENANT_NAME%,$OS_TENANT_NAME,g;
215 s,%ALT_USERNAME%,$ALT_USERNAME,g;
216 s,%ALT_PASSWORD%,$ALT_PASSWORD,g;
217 s,%ALT_TENANT_NAME%,$ALT_TENANT_NAME,g;
218 s,%COMPUTE_CATALOG_TYPE%,$COMPUTE_CATALOG_TYPE,g;
Jay Pipes3edd5b42012-07-08 21:04:12 -0400219 s,%COMPUTE_ALLOW_TENANT_ISOLATION%,$COMPUTE_ALLOW_TENANT_ISOLATION,g;
Dan Smith88ae3762012-09-04 10:18:18 -0700220 s,%COMPUTE_ALLOW_TENANT_REUSE%,$COMPUTE_ALLOW_TENANT_REUSE,g;
Jay Pipesd01325f2012-04-04 16:21:33 -0400221 s,%COMPUTE_CREATE_IMAGE_ENABLED%,$COMPUTE_CREATE_IMAGE_ENABLED,g;
222 s,%COMPUTE_RESIZE_AVAILABLE%,$COMPUTE_RESIZE_AVAILABLE,g;
David Kranz686f98e2012-07-24 09:15:44 -0400223 s,%COMPUTE_CHANGE_PASSWORD_AVAILABLE%,$COMPUTE_CHANGE_PASSWORD_AVAILABLE,g;
Jay Pipes4ba6eeb2012-08-01 11:55:12 -0400224 s,%COMPUTE_WHITEBOX_ENABLED%,$COMPUTE_WHITEBOX_ENABLED,g;
Jay Pipesd01325f2012-04-04 16:21:33 -0400225 s,%COMPUTE_LOG_LEVEL%,$COMPUTE_LOG_LEVEL,g;
Jay Pipes58d34ea2012-04-05 17:19:02 -0400226 s,%BUILD_INTERVAL%,$BUILD_INTERVAL,g;
227 s,%BUILD_TIMEOUT%,$BUILD_TIMEOUT,g;
Rohit Karajgi2eb9a132012-08-08 02:34:51 -0700228 s,%COMPUTE_BUILD_INTERVAL%,$COMPUTE_BUILD_INTERVAL,g;
229 s,%COMPUTE_BUILD_TIMEOUT%,$COMPUTE_BUILD_TIMEOUT,g;
Jay Pipes3edd5b42012-07-08 21:04:12 -0400230 s,%RUN_SSH%,$RUN_SSH,g;
231 s,%SSH_USER%,$SSH_USER,g;
232 s,%NETWORK_FOR_SSH%,$NETWORK_FOR_SSH,g;
233 s,%IP_VERSION_FOR_SSH%,$IP_VERSION_FOR_SSH,g;
234 s,%SSH_TIMEOUT%,$SSH_TIMEOUT,g;
Jay Pipesd01325f2012-04-04 16:21:33 -0400235 s,%IMAGE_ID%,$IMAGE_UUID,g;
236 s,%IMAGE_ID_ALT%,$IMAGE_UUID_ALT,g;
237 s,%FLAVOR_REF%,$FLAVOR_REF,g;
238 s,%FLAVOR_REF_ALT%,$FLAVOR_REF_ALT,g;
Jay Pipes4ba6eeb2012-08-01 11:55:12 -0400239 s,%COMPUTE_CONFIG_PATH%,$COMPUTE_CONFIG_PATH,g;
240 s,%COMPUTE_SOURCE_DIR%,$COMPUTE_SOURCE_DIR,g;
241 s,%COMPUTE_BIN_DIR%,$COMPUTE_BIN_DIR,g;
242 s,%COMPUTE_PATH_TO_PRIVATE_KEY%,$COMPUTE_PATH_TO_PRIVATE_KEY,g;
243 s,%COMPUTE_DB_URI%,$COMPUTE_DB_URI,g;
Jay Pipesc0e1ef52012-04-30 15:56:13 -0400244 s,%IMAGE_HOST%,$IMAGE_HOST,g;
245 s,%IMAGE_PORT%,$IMAGE_PORT,g;
246 s,%IMAGE_API_VERSION%,$IMAGE_API_VERSION,g;
Jay Pipes3edd5b42012-07-08 21:04:12 -0400247 s,%IMAGE_CATALOG_TYPE%,$IMAGE_CATALOG_TYPE,g;
248 s,%COMPUTE_ADMIN_USERNAME%,$COMPUTE_ADMIN_USERNAME,g;
249 s,%COMPUTE_ADMIN_PASSWORD%,$COMPUTE_ADMIN_PASSWORD,g;
250 s,%COMPUTE_ADMIN_TENANT_NAME%,$COMPUTE_ADMIN_TENANT_NAME,g;
251 s,%IDENTITY_ADMIN_USERNAME%,$IDENTITY_ADMIN_USERNAME,g;
252 s,%IDENTITY_ADMIN_PASSWORD%,$IDENTITY_ADMIN_PASSWORD,g;
253 s,%IDENTITY_ADMIN_TENANT_NAME%,$IDENTITY_ADMIN_TENANT_NAME,g;
254 s,%NETWORK_CATALOG_TYPE%,$NETWORK_CATALOG_TYPE,g;
255 s,%NETWORK_API_VERSION%,$NETWORK_API_VERSION,g;
Rohit Karajgi5ef90472012-07-31 06:20:35 -0700256 s,%VOLUME_CATALOG_TYPE%,$VOLUME_CATALOG_TYPE,g;
Rohit Karajgi2eb9a132012-08-08 02:34:51 -0700257 s,%VOLUME_BUILD_INTERVAL%,$VOLUME_BUILD_INTERVAL,g;
258 s,%VOLUME_BUILD_TIMEOUT%,$VOLUME_BUILD_TIMEOUT,g;
Dean Troyer608bb122012-01-10 14:43:17 -0600259" -i $TEMPEST_CONF
Jesse Andrewsd7326d22011-11-20 10:02:26 -0800260
Jay Pipes58d34ea2012-04-05 17:19:02 -0400261echo "Created tempest configuration file:"
262cat $TEMPEST_CONF
Jay Pipes58d34ea2012-04-05 17:19:02 -0400263
Jay Pipes678a1882012-04-23 10:56:15 -0400264echo "\n"
265echo "**************************************************"
266echo "Finished Configuring Tempest"
267echo "**************************************************"