blob: fa637c12fbc6fa2e46ff745042d6e085d121ea0d [file] [log] [blame]
Sean Dagued0931212012-10-04 16:06:44 -04001# lib/tempest
Dean Troyer6d04fd72012-12-21 11:03:37 -06002# Install and configure Tempest
Sean Dagued0931212012-10-04 16:06:44 -04003
4# Dependencies:
5# ``functions`` file
Attila Fazekas2aa35172012-12-05 20:03:40 +01006# ``lib/nova`` service is runing
Sean Dagued0931212012-10-04 16:06:44 -04007# <list other global vars that are assumed to be defined>
Attila Fazekas65c08462012-12-07 14:20:51 +01008# - ``DEST``
9# - ``ADMIN_PASSWORD``
10# - ``DEFAULT_IMAGE_NAME``
11# - ``S3_SERVICE_PORT``
12# - ``SERVICE_HOST``
13# - ``BASE_SQL_CONN`` ``lib/database`` declares
Attila Fazekas2aa35172012-12-05 20:03:40 +010014# Optional Dependencies:
Attila Fazekas65c08462012-12-07 14:20:51 +010015# IDENTITY_USE_SSL, IDENTITY_HOST, IDENTITY_PORT, IDENTITY_PATH
Attila Fazekas2aa35172012-12-05 20:03:40 +010016# ALT_* (similar vars exists in keystone_data.sh)
Attila Fazekas65c08462012-12-07 14:20:51 +010017# ``OS_USERNAME``
18# ``IMAGE_PORT``, ``IMAGE_HOST``
19# ``LIVE_MIGRATION_AVAILABLE``
20# ``USE_BLOCK_MIGRATION_FOR_LIVE_MIGRATION``
21# ``DEFAULT_INSTANCE_TYPE``
22# ``DEFAULT_INSTANCE_USER``
Sean Dagued0931212012-10-04 16:06:44 -040023# ``stack.sh`` calls the entry points in this order:
24#
Attila Fazekas2aa35172012-12-05 20:03:40 +010025# install_tempest
26# configure_tempest
Sean Dagued0931212012-10-04 16:06:44 -040027
28# Save trace setting
29XTRACE=$(set +o | grep xtrace)
30set +o xtrace
31
Dean Troyer6d04fd72012-12-21 11:03:37 -060032
Sean Dagued0931212012-10-04 16:06:44 -040033# Defaults
34# --------
35
Sean Dagued0931212012-10-04 16:06:44 -040036# Set up default directories
37TEMPEST_DIR=$DEST/tempest
Attila Fazekas2aa35172012-12-05 20:03:40 +010038TEMPEST_CONF_DIR=$TEMPEST_DIR/etc
39TEMPEST_CONF=$TEMPEST_CONF_DIR/tempest.conf
40
Dean Troyer6d04fd72012-12-21 11:03:37 -060041NOVA_SOURCE_DIR=$DEST/nova
42
Attila Fazekas2aa35172012-12-05 20:03:40 +010043BUILD_INTERVAL=3
44BUILD_TIMEOUT=400
Sean Dagued0931212012-10-04 16:06:44 -040045
Dean Troyer6d04fd72012-12-21 11:03:37 -060046
Sean Dagued0931212012-10-04 16:06:44 -040047# Entry Points
48# ------------
49
Sean Dagued0931212012-10-04 16:06:44 -040050# configure_tempest() - Set config files, create data dirs, etc
51function configure_tempest() {
Attila Fazekas65c08462012-12-07 14:20:51 +010052 local image_lines
53 local images
54 local num_images
55 local image_uuid
56 local image_uuid_alt
Attila Fazekas2aa35172012-12-05 20:03:40 +010057 local errexit
Attila Fazekas65c08462012-12-07 14:20:51 +010058 local password
59 local line
60 local flavors
61 local flavors_ref
62 local flavor_lines
Maru Newbya5c774e2012-12-10 10:40:01 +000063 local public_network_id
64 local tenant_networks_reachable
Attila Fazekas2aa35172012-12-05 20:03:40 +010065
Dean Troyer6d04fd72012-12-21 11:03:37 -060066 # TODO(afazekas):
Sean Dagued0931212012-10-04 16:06:44 -040067 # sudo python setup.py deploy
Attila Fazekas2aa35172012-12-05 20:03:40 +010068
69 # This function exits on an error so that errors don't compound and you see
70 # only the first error that occured.
71 errexit=$(set +o | grep errexit)
72 set -o errexit
73
Dean Troyer6d04fd72012-12-21 11:03:37 -060074 # Save IFS
Attila Fazekas2aa35172012-12-05 20:03:40 +010075 ifs=$IFS
76
77 # Glance should already contain images to be used in tempest
78 # testing. Here we simply look for images stored in Glance
79 # and set the appropriate variables for use in the tempest config
80 # We ignore ramdisk and kernel images, look for the default image
Attila Fazekas65c08462012-12-07 14:20:51 +010081 # ``DEFAULT_IMAGE_NAME``. If not found, we set the ``image_uuid`` to the
82 # first image returned and set ``image_uuid_alt`` to the second,
Attila Fazekas2aa35172012-12-05 20:03:40 +010083 # if there is more than one returned...
84 # ... Also ensure we only take active images, so we don't get snapshots in process
Cody A.W. Somervillec24e23b2012-12-21 02:10:45 -050085 declare -a images
86
87 while read -r IMAGE_NAME IMAGE_UUID; do
88 if [ "$IMAGE_NAME" = "$DEFAULT_IMAGE_NAME" ]; then
89 image_uuid="$IMAGE_UUID"
90 image_uuid_alt="$IMAGE_UUID"
Attila Fazekas2aa35172012-12-05 20:03:40 +010091 fi
Cody A.W. Somervillec24e23b2012-12-21 02:10:45 -050092 images+=($IMAGE_UUID)
93 done < <(glance image-list --status=active | awk -F'|' '!/^(+--)|ID|aki|ari/ { print $3,$2 }')
94
95 case "${#images[*]}" in
96 0)
97 echo "Found no valid images to use!"
98 exit 1
99 ;;
100 1)
101 if [ -z "$image_uuid" ]; then
102 image_uuid=${images[0]}
103 image_uuid_alt=${images[0]}
104 fi
105 ;;
106 *)
107 if [ -z "$image_uuid" ]; then
108 image_uuid=${images[0]}
109 image_uuid_alt=${images[1]}
110 fi
111 ;;
112 esac
Attila Fazekas2aa35172012-12-05 20:03:40 +0100113
114 # Create tempest.conf from tempest.conf.sample
115 # copy every time, because the image UUIDS are going to change
116 cp $TEMPEST_CONF.sample $TEMPEST_CONF
117
118 IDENTITY_USE_SSL=${IDENTITY_USE_SSL:-False}
119 IDENTITY_HOST=${IDENTITY_HOST:-127.0.0.1}
120 IDENTITY_PORT=${IDENTITY_PORT:-5000}
121 # TODO(jaypipes): This is dumb and needs to be removed
122 # from the Tempest configuration file entirely...
123 IDENTITY_PATH=${IDENTITY_PATH:-tokens}
124
Attila Fazekas65c08462012-12-07 14:20:51 +0100125 password=${ADMIN_PASSWORD:-secrete}
Attila Fazekas2aa35172012-12-05 20:03:40 +0100126
127 # See files/keystone_data.sh where alt_demo user
128 # and tenant are set up...
129 ALT_USERNAME=${ALT_USERNAME:-alt_demo}
130 ALT_TENANT_NAME=${ALT_TENANT_NAME:-alt_demo}
131
132 # Check Nova for existing flavors and, if set, look for the
Attila Fazekas65c08462012-12-07 14:20:51 +0100133 # ``DEFAULT_INSTANCE_TYPE`` and use that. Otherwise, just use the first flavor.
134 flavor_lines=`nova flavor-list`
135 IFS=$'\r\n'
136 flavors=""
Dean Troyerceaa38b2012-12-12 17:09:57 -0600137 if [[ -n "$DEFAULT_INSTANCE_TYPE" ]]; then
138 for line in $flavor_lines; do
139 f=$(echo $line | awk "/ $DEFAULT_INSTANCE_TYPE / { print \$2 }")
140 flavors="$flavors $f"
141 done
Attila Fazekas2aa35172012-12-05 20:03:40 +0100142 fi
Dean Troyerceaa38b2012-12-12 17:09:57 -0600143 for line in $flavor_lines; do
144 flavors="$flavors `echo $line | grep -v "^\(|\s*ID\|+--\)" | cut -d' ' -f2`"
Attila Fazekas2aa35172012-12-05 20:03:40 +0100145 done
146
147 IFS=" "
Attila Fazekas65c08462012-12-07 14:20:51 +0100148 flavors=($flavors)
149 num_flavors=${#flavors[*]}
150 echo "Found $num_flavors flavors"
151 if [[ $num_flavors -eq 0 ]]; then
Attila Fazekas2aa35172012-12-05 20:03:40 +0100152 echo "Found no valid flavors to use!"
153 exit 1
154 fi
Attila Fazekas65c08462012-12-07 14:20:51 +0100155 flavor_ref=${flavors[0]}
156 flavor_ref_alt=$flavor_ref
157 if [[ $num_flavors -gt 1 ]]; then
158 flavor_ref_alt=${flavors[1]}
Attila Fazekas2aa35172012-12-05 20:03:40 +0100159 fi
160
Maru Newbya5c774e2012-12-10 10:40:01 +0000161 if [ "$Q_USE_NAMESPACE" != "False" ]; then
162 tenant_networks_reachable=false
163 else
164 tenant_networks_reachable=true
165 fi
166
167 if is_service_enabled q-l3; then
168 public_network_id=$(quantum net-list | grep $PUBLIC_NETWORK_NAME | \
169 awk '{print $2}')
170 fi
171
Attila Fazekas2aa35172012-12-05 20:03:40 +0100172 # Timeouts
173 iniset $TEMPEST_CONF compute build_timeout $BUILD_TIMEOUT
174 iniset $TEMPEST_CONF volume build_timeout $BUILD_TIMEOUT
175 iniset $TEMPEST_CONF boto build_timeout $BUILD_TIMEOUT
176 iniset $TEMPEST_CONF compute build_interval $BUILD_INTERVAL
177 iniset $TEMPEST_CONF volume build_interval $BUILD_INTERVAL
178 iniset $TEMPEST_CONF boto build_interval $BUILD_INTERVAL
179 iniset $TEMPEST_CONF boto http_socket_timeout 5
180
181 iniset $TEMPEST_CONF identity use_ssl $IDENTITY_USE_SSL
182 iniset $TEMPEST_CONF identity host $IDENTITY_HOST
183 iniset $TEMPEST_CONF identity port $IDENTITY_PORT
184 iniset $TEMPEST_CONF identity path $IDENTITY_PATH
185
Attila Fazekas65c08462012-12-07 14:20:51 +0100186 iniset $TEMPEST_CONF compute password "$password"
Attila Fazekas2aa35172012-12-05 20:03:40 +0100187 iniset $TEMPEST_CONF compute alt_username $ALT_USERNAME
Attila Fazekas65c08462012-12-07 14:20:51 +0100188 iniset $TEMPEST_CONF compute alt_password "$password"
Attila Fazekas2aa35172012-12-05 20:03:40 +0100189 iniset $TEMPEST_CONF compute alt_tenant_name $ALT_TENANT_NAME
190 iniset $TEMPEST_CONF compute resize_available False
191 iniset $TEMPEST_CONF compute change_password_available False
192 iniset $TEMPEST_CONF compute compute_log_level ERROR
Nachi Ueno06fac372012-12-26 14:09:43 -0800193 # Note(nati) current tempest don't create network for each tenant
194 # so reuse same tenant for now
195 if is_service_enabled quantum; then
196 TEMPEST_ALLOW_TENANT_ISOLATION=${TEMPEST_ALLOW_TENANT_ISOLATION:-False}
197 fi
198 iniset $TEMPEST_CONF compute allow_tenant_isolation ${TEMPEST_ALLOW_TENANT_ISOLATION:-True}
Attila Fazekas2aa35172012-12-05 20:03:40 +0100199 #Skip until #1074039 is fixed
200 iniset $TEMPEST_CONF compute run_ssh False
201 iniset $TEMPEST_CONF compute ssh_user ${DEFAULT_INSTANCE_USER:-$OS_USERNAME}
Akihiro MOTOKI66afb472012-12-21 15:34:13 +0900202 iniset $TEMPEST_CONF compute network_for_ssh $PRIVATE_NETWORK_NAME
Attila Fazekas2aa35172012-12-05 20:03:40 +0100203 iniset $TEMPEST_CONF compute ip_version_for_ssh 4
204 iniset $TEMPEST_CONF compute ssh_timeout 4
Attila Fazekas65c08462012-12-07 14:20:51 +0100205 iniset $TEMPEST_CONF compute image_ref $image_uuid
206 iniset $TEMPEST_CONF compute image_ref_alt $image_uuid_alt
207 iniset $TEMPEST_CONF compute flavor_ref $flavor_ref
208 iniset $TEMPEST_CONF compute flavor_ref_alt $flavor_ref_alt
Attila Fazekas2aa35172012-12-05 20:03:40 +0100209 iniset $TEMPEST_CONF compute source_dir $NOVA_SOURCE_DIR
210 iniset $TEMPEST_CONF compute live_migration_available ${LIVE_MIGRATION_AVAILABLE:-False}
Akihiro MOTOKI66afb472012-12-21 15:34:13 +0900211 iniset $TEMPEST_CONF compute use_block_migration_for_live_migration ${USE_BLOCK_MIGRATION_FOR_LIVE_MIGRATION:-False}
Attila Fazekas2aa35172012-12-05 20:03:40 +0100212 # Inherited behavior, might be wrong
213 iniset $TEMPEST_CONF compute bin_dir $NOVA_BIN_DIR
214 # TODO(jaypipes): Create the key file here... right now, no whitebox
215 # tests actually use a key.
216 iniset $TEMPEST_CONF compute path_to_private_key $TEMPEST_DIR/id_rsa
217 iniset $TEMPEST_CONF compute db_uri $BASE_SQL_CONN/nova
218
219 # image
220 iniset $TEMPEST_CONF image host ${IMAGE_HOST:-127.0.0.1}
221 iniset $TEMPEST_CONF image port ${IMAGE_PORT:-9292}
Attila Fazekas65c08462012-12-07 14:20:51 +0100222 iniset $TEMPEST_CONF image password "$password"
Attila Fazekas2aa35172012-12-05 20:03:40 +0100223
224 # identity-admin
Attila Fazekas65c08462012-12-07 14:20:51 +0100225 iniset $TEMPEST_CONF "identity-admin" password "$password"
Attila Fazekas2aa35172012-12-05 20:03:40 +0100226
227 # compute admin
Attila Fazekas65c08462012-12-07 14:20:51 +0100228 iniset $TEMPEST_CONF "compute-admin" password "$password"
Attila Fazekas2aa35172012-12-05 20:03:40 +0100229
Maru Newbya5c774e2012-12-10 10:40:01 +0000230 # network admin
231 iniset $TEMPEST_CONF "network-admin" password "$password"
232
Attila Fazekas2aa35172012-12-05 20:03:40 +0100233 # network
234 iniset $TEMPEST_CONF network api_version 2.0
Maru Newbya5c774e2012-12-10 10:40:01 +0000235 iniset $TEMPEST_CONF network password "$password"
236 iniset $TEMPEST_CONF network tenant_networks_reachable "$tenant_networks_reachable"
237 iniset $TEMPEST_CONF network public_network_id "$public_network_id"
Attila Fazekas2aa35172012-12-05 20:03:40 +0100238
239 #boto
240 iniset $TEMPEST_CONF boto ec2_url "http://$SERVICE_HOST:8773/services/Cloud"
241 iniset $TEMPEST_CONF boto s3_url "http://$SERVICE_HOST:${S3_SERVICE_PORT:-3333}"
242
243 echo "Created tempest configuration file:"
244 cat $TEMPEST_CONF
245
246 # Restore IFS
247 IFS=$ifs
248 #Restore errexit
249 $errexit
Sean Dagued0931212012-10-04 16:06:44 -0400250}
251
Sean Dagued0931212012-10-04 16:06:44 -0400252# install_tempest() - Collect source and prepare
253function install_tempest() {
254 git_clone $TEMPEST_REPO $TEMPEST_DIR $TEMPEST_BRANCH
Jeremy Stanley9a352da2012-11-28 17:22:39 +0000255
256 # Tempest doesn't satisfy its dependencies on its own, so
257 # install them here instead.
jiajun xud75bc1f2012-12-04 08:51:35 +0800258 pip_install -r $TEMPEST_DIR/tools/pip-requires
Sean Dagued0931212012-10-04 16:06:44 -0400259}
260
Sean Dagued0931212012-10-04 16:06:44 -0400261# Restore xtrace
262$XTRACE