blob: e8c8f621401cf1ebeca8c9423e9b550950bf4549 [file] [log] [blame]
Dan Wendlandtea23e682012-08-22 05:53:17 -07001#!/usr/bin/env bash
2#
Anita Kuno0d4bd7e2014-02-02 14:59:39 -06003# Copyright 2012, Cisco Systems
4# Copyright 2012, VMware, Inc.
5# Copyright 2012, NTT MCL, Inc.
6#
7# Please direct any questions to dedutta@cisco.com, dwendlandt@vmware.com, nachi@nttmcl.com
8#
Mark McClainb05c8762013-07-06 23:29:39 -04009# **neutron-adv-test.sh**
Dan Wendlandtea23e682012-08-22 05:53:17 -070010
Mark McClainb05c8762013-07-06 23:29:39 -040011# Perform integration testing of Nova and other components with Neutron.
Dan Wendlandtea23e682012-08-22 05:53:17 -070012
13echo "*********************************************************************"
14echo "Begin DevStack Exercise: $0"
15echo "*********************************************************************"
16
17# This script exits on an error so that errors don't compound and you see
Joe Gordon46400262013-06-30 04:32:27 -070018# only the first error that occurred.
Dan Wendlandtea23e682012-08-22 05:53:17 -070019
20set -o errtrace
Dean Troyer6d04fd72012-12-21 11:03:37 -060021
Dan Wendlandtea23e682012-08-22 05:53:17 -070022# Print the commands being run so that we can see the command that triggers
igor01acdab2016-07-29 13:11:53 +020023# an error. It is also useful for following as the install occurs.
Dan Wendlandtea23e682012-08-22 05:53:17 -070024set -o xtrace
25
Dan Wendlandtea23e682012-08-22 05:53:17 -070026# Environment
Dean Troyer6d04fd72012-12-21 11:03:37 -060027# -----------
Dan Wendlandtea23e682012-08-22 05:53:17 -070028
29# Keep track of the current directory
30EXERCISE_DIR=$(cd $(dirname "$0") && pwd)
31TOP_DIR=$(cd $EXERCISE_DIR/..; pwd)
32
33# Import common functions
34source $TOP_DIR/functions
35
36# Import configuration
37source $TOP_DIR/openrc
38
Mark McClainb05c8762013-07-06 23:29:39 -040039# Import neutron functions
Sean M. Collins2a242512016-05-03 09:03:09 -040040source $TOP_DIR/lib/neutron
Dean Troyer5a9739a2015-03-25 11:33:51 -050041source $TOP_DIR/lib/neutron-legacy
Nachi Ueno5db5bfa2012-10-29 11:25:29 -070042
Mark McClainb05c8762013-07-06 23:29:39 -040043# If neutron is not enabled we exit with exitcode 55, which means exercise is skipped.
44neutron_plugin_check_adv_test_requirements || exit 55
armando-migliaccio7c025fe2013-05-08 11:33:07 -070045
Nachi Ueno5db5bfa2012-10-29 11:25:29 -070046# Import exercise configuration
47source $TOP_DIR/exerciserc
48
Mark McClainb05c8762013-07-06 23:29:39 -040049# Neutron Settings
Dean Troyer6d04fd72012-12-21 11:03:37 -060050# ----------------
Dan Wendlandtea23e682012-08-22 05:53:17 -070051
Sean Dague7580a0c2016-02-17 06:23:36 -050052PROJECTS="DEMO1"
Dan Wendlandtea23e682012-08-22 05:53:17 -070053# TODO (nati)_Test public network
Sean Dague7580a0c2016-02-17 06:23:36 -050054#PROJECTS="DEMO1,DEMO2"
Dan Wendlandtea23e682012-08-22 05:53:17 -070055
56PUBLIC_NAME="admin"
57DEMO1_NAME="demo1"
58DEMO2_NAME="demo2"
59
60PUBLIC_NUM_NET=1
61DEMO1_NUM_NET=1
62DEMO2_NUM_NET=2
63
64PUBLIC_NET1_CIDR="200.0.0.0/24"
Nachi Ueno5db5bfa2012-10-29 11:25:29 -070065DEMO1_NET1_CIDR="10.10.0.0/24"
66DEMO2_NET1_CIDR="10.20.0.0/24"
67DEMO2_NET2_CIDR="10.20.1.0/24"
Dan Wendlandtea23e682012-08-22 05:53:17 -070068
69PUBLIC_NET1_GATEWAY="200.0.0.1"
Nachi Ueno5db5bfa2012-10-29 11:25:29 -070070DEMO1_NET1_GATEWAY="10.10.0.1"
71DEMO2_NET1_GATEWAY="10.20.0.1"
72DEMO2_NET2_GATEWAY="10.20.1.1"
Dan Wendlandtea23e682012-08-22 05:53:17 -070073
74PUBLIC_NUM_VM=1
75DEMO1_NUM_VM=1
76DEMO2_NUM_VM=2
77
78PUBLIC_VM1_NET='admin-net1'
79DEMO1_VM1_NET='demo1-net1'
80# Multinic settings. But this is fail without nic setting in OS image
81DEMO2_VM1_NET='demo2-net1'
82DEMO2_VM2_NET='demo2-net2'
83
84PUBLIC_NUM_ROUTER=1
85DEMO1_NUM_ROUTER=1
86DEMO2_NUM_ROUTER=1
87
88PUBLIC_ROUTER1_NET="admin-net1"
89DEMO1_ROUTER1_NET="demo1-net1"
90DEMO2_ROUTER1_NET="demo2-net1"
91
Dean Troyer6d04fd72012-12-21 11:03:37 -060092# Various functions
93# -----------------
94
Sean Dague7580a0c2016-02-17 06:23:36 -050095function foreach_project {
Dan Wendlandtea23e682012-08-22 05:53:17 -070096 COMMAND=$1
Sean Dague7580a0c2016-02-17 06:23:36 -050097 for PROJECT in ${PROJECTS//,/ };do
98 eval ${COMMAND//%PROJECT%/$PROJECT}
Dan Wendlandtea23e682012-08-22 05:53:17 -070099 done
100}
101
Sean Dague7580a0c2016-02-17 06:23:36 -0500102function foreach_project_resource {
Dan Wendlandtea23e682012-08-22 05:53:17 -0700103 COMMAND=$1
104 RESOURCE=$2
Sean Dague7580a0c2016-02-17 06:23:36 -0500105 for PROJECT in ${PROJECTS//,/ };do
106 eval 'NUM=$'"${PROJECT}_NUM_$RESOURCE"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700107 for i in `seq $NUM`;do
Sean Dague7580a0c2016-02-17 06:23:36 -0500108 local COMMAND_LOCAL=${COMMAND//%PROJECT%/$PROJECT}
Dan Wendlandtea23e682012-08-22 05:53:17 -0700109 COMMAND_LOCAL=${COMMAND_LOCAL//%NUM%/$i}
110 eval $COMMAND_LOCAL
111 done
112 done
113}
114
Sean Dague7580a0c2016-02-17 06:23:36 -0500115function foreach_project_vm {
Dan Wendlandtea23e682012-08-22 05:53:17 -0700116 COMMAND=$1
Sean Dague7580a0c2016-02-17 06:23:36 -0500117 foreach_project_resource "$COMMAND" 'VM'
Dan Wendlandtea23e682012-08-22 05:53:17 -0700118}
119
Sean Dague7580a0c2016-02-17 06:23:36 -0500120function foreach_project_net {
Dan Wendlandtea23e682012-08-22 05:53:17 -0700121 COMMAND=$1
Sean Dague7580a0c2016-02-17 06:23:36 -0500122 foreach_project_resource "$COMMAND" 'NET'
Dan Wendlandtea23e682012-08-22 05:53:17 -0700123}
124
125function get_image_id {
Ian Wienandada886d2015-10-07 14:06:26 +1100126 local IMAGE_ID
127 IMAGE_ID=$(openstack image list | egrep " $DEFAULT_IMAGE_NAME " | get_field 1)
DennyZhang23178a92013-10-22 17:07:32 -0500128 die_if_not_set $LINENO IMAGE_ID "Failure retrieving IMAGE_ID"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700129 echo "$IMAGE_ID"
130}
131
Sean Dague7580a0c2016-02-17 06:23:36 -0500132function get_project_id {
133 local PROJECT_NAME=$1
134 local PROJECT_ID
135 PROJECT_ID=`openstack project list | grep " $PROJECT_NAME " | head -n 1 | get_field 1`
136 die_if_not_set $LINENO PROJECT_ID "Failure retrieving PROJECT_ID for $PROJECT_NAME"
137 echo "$PROJECT_ID"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700138}
139
140function get_user_id {
141 local USER_NAME=$1
Ian Wienandada886d2015-10-07 14:06:26 +1100142 local USER_ID
143 USER_ID=`openstack user list | grep $USER_NAME | awk '{print $2}'`
DennyZhang23178a92013-10-22 17:07:32 -0500144 die_if_not_set $LINENO USER_ID "Failure retrieving USER_ID for $USER_NAME"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700145 echo "$USER_ID"
146}
147
148function get_role_id {
149 local ROLE_NAME=$1
Ian Wienandada886d2015-10-07 14:06:26 +1100150 local ROLE_ID
Mike Perezc271b3e2016-10-03 16:00:33 -0700151 ROLE_ID=`openstack role assignment list | grep $ROLE_NAME | awk '{print $2}'`
DennyZhang23178a92013-10-22 17:07:32 -0500152 die_if_not_set $LINENO ROLE_ID "Failure retrieving ROLE_ID for $ROLE_NAME"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700153 echo "$ROLE_ID"
154}
155
156function get_network_id {
157 local NETWORK_NAME="$1"
Ian Wienandada886d2015-10-07 14:06:26 +1100158 local NETWORK_ID
Jordan Pittierd038b602016-11-04 13:32:39 +0100159 NETWORK_ID=`openstack network show -f value -c id $NETWORK_NAME`
Dan Wendlandtea23e682012-08-22 05:53:17 -0700160 echo $NETWORK_ID
161}
162
163function get_flavor_id {
164 local INSTANCE_TYPE=$1
Ian Wienandada886d2015-10-07 14:06:26 +1100165 local FLAVOR_ID
166 FLAVOR_ID=`nova flavor-list | grep $INSTANCE_TYPE | awk '{print $2}'`
DennyZhang23178a92013-10-22 17:07:32 -0500167 die_if_not_set $LINENO FLAVOR_ID "Failure retrieving FLAVOR_ID for $INSTANCE_TYPE"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700168 echo "$FLAVOR_ID"
169}
170
171function confirm_server_active {
172 local VM_UUID=$1
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700173 if ! timeout $ACTIVE_TIMEOUT sh -c "while ! nova show $VM_UUID | grep status | grep -q ACTIVE; do sleep 1; done"; then
Dean Troyer6d04fd72012-12-21 11:03:37 -0600174 echo "server '$VM_UUID' did not become active!"
175 false
176 fi
Dan Wendlandtea23e682012-08-22 05:53:17 -0700177}
178
Jakub Libosvar52a7b6e2014-01-14 18:52:51 +0100179function neutron_debug_admin {
180 local os_username=$OS_USERNAME
Sean Dague7580a0c2016-02-17 06:23:36 -0500181 local os_project_id=$OS_PROJECT_ID
Jakub Libosvar52a7b6e2014-01-14 18:52:51 +0100182 source $TOP_DIR/openrc admin admin
183 neutron-debug $@
Sean Dague7580a0c2016-02-17 06:23:36 -0500184 source $TOP_DIR/openrc $os_username $os_project_id
Jakub Libosvar52a7b6e2014-01-14 18:52:51 +0100185}
186
Sean Dague7580a0c2016-02-17 06:23:36 -0500187function add_project {
Steve Martinelli2a09d0c2014-03-14 00:33:58 -0500188 openstack project create $1
189 openstack user create $2 --password ${ADMIN_PASSWORD} --project $1
190 openstack role add Member --project $1 --user $2
Dan Wendlandtea23e682012-08-22 05:53:17 -0700191}
192
Sean Dague7580a0c2016-02-17 06:23:36 -0500193function remove_project {
194 local PROJECT=$1
195 local PROJECT_ID
196 PROJECT_ID=$(get_project_id $PROJECT)
197 openstack project delete $PROJECT_ID
Dan Wendlandtea23e682012-08-22 05:53:17 -0700198}
199
200function remove_user {
201 local USER=$1
Ian Wienandada886d2015-10-07 14:06:26 +1100202 local USER_ID
203 USER_ID=$(get_user_id $USER)
Steve Martinelli2a09d0c2014-03-14 00:33:58 -0500204 openstack user delete $USER_ID
Dan Wendlandtea23e682012-08-22 05:53:17 -0700205}
206
Sean Dague7580a0c2016-02-17 06:23:36 -0500207function create_projects {
Dan Wendlandtea23e682012-08-22 05:53:17 -0700208 source $TOP_DIR/openrc admin admin
Sean Dague7580a0c2016-02-17 06:23:36 -0500209 add_project demo1 demo1 demo1
210 add_project demo2 demo2 demo2
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700211 source $TOP_DIR/openrc demo demo
Dan Wendlandtea23e682012-08-22 05:53:17 -0700212}
213
Sean Dague7580a0c2016-02-17 06:23:36 -0500214function delete_projects_and_users {
Dan Wendlandtea23e682012-08-22 05:53:17 -0700215 source $TOP_DIR/openrc admin admin
216 remove_user demo1
Sean Dague7580a0c2016-02-17 06:23:36 -0500217 remove_project demo1
Dan Wendlandtea23e682012-08-22 05:53:17 -0700218 remove_user demo2
Sean Dague7580a0c2016-02-17 06:23:36 -0500219 remove_project demo2
220 echo "removed all projects"
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700221 source $TOP_DIR/openrc demo demo
Dan Wendlandtea23e682012-08-22 05:53:17 -0700222}
223
224function create_network {
Sean Dague7580a0c2016-02-17 06:23:36 -0500225 local PROJECT=$1
Dan Wendlandtea23e682012-08-22 05:53:17 -0700226 local GATEWAY=$2
227 local CIDR=$3
228 local NUM=$4
229 local EXTRA=$5
Sean Dague7580a0c2016-02-17 06:23:36 -0500230 local NET_NAME="${PROJECT}-net$NUM"
231 local ROUTER_NAME="${PROJECT}-router${NUM}"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700232 source $TOP_DIR/openrc admin admin
Sean Dague7580a0c2016-02-17 06:23:36 -0500233 local PROJECT_ID
234 PROJECT_ID=$(get_project_id $PROJECT)
235 source $TOP_DIR/openrc $PROJECT $PROJECT
Ian Wienandada886d2015-10-07 14:06:26 +1100236 local NET_ID
Armando Migliaccio4f11ff32016-10-27 06:15:23 -0700237 NET_ID=$(openstack network create --project $PROJECT_ID $NET_NAME $EXTRA| grep ' id ' | awk '{print $4}' )
Sean Dague7580a0c2016-02-17 06:23:36 -0500238 die_if_not_set $LINENO NET_ID "Failure creating NET_ID for $PROJECT_ID $NET_NAME $EXTRA"
Armando Migliaccio4f11ff32016-10-27 06:15:23 -0700239 openstack subnet create --ip-version 4 --project $PROJECT_ID --gateway $GATEWAY --subnet-pool None --network $NET_ID --subnet-range $CIDR "${NET_NAME}_subnet"
Jakub Libosvar52a7b6e2014-01-14 18:52:51 +0100240 neutron_debug_admin probe-create --device-owner compute $NET_ID
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700241 source $TOP_DIR/openrc demo demo
Dan Wendlandtea23e682012-08-22 05:53:17 -0700242}
243
244function create_networks {
Sean Dague7580a0c2016-02-17 06:23:36 -0500245 foreach_project_net 'create_network ${%PROJECT%_NAME} ${%PROJECT%_NET%NUM%_GATEWAY} ${%PROJECT%_NET%NUM%_CIDR} %NUM% ${%PROJECT%_NET%NUM%_EXTRA}'
Dan Wendlandtea23e682012-08-22 05:53:17 -0700246 #TODO(nati) test security group function
Sean Dague7580a0c2016-02-17 06:23:36 -0500247 # allow ICMP for both project's security groups
Dan Wendlandtea23e682012-08-22 05:53:17 -0700248 #source $TOP_DIR/openrc demo1 demo1
249 #$NOVA secgroup-add-rule default icmp -1 -1 0.0.0.0/0
250 #source $TOP_DIR/openrc demo2 demo2
251 #$NOVA secgroup-add-rule default icmp -1 -1 0.0.0.0/0
252}
253
254function create_vm {
Sean Dague7580a0c2016-02-17 06:23:36 -0500255 local PROJECT=$1
Dan Wendlandtea23e682012-08-22 05:53:17 -0700256 local NUM=$2
257 local NET_NAMES=$3
Sean Dague7580a0c2016-02-17 06:23:36 -0500258 source $TOP_DIR/openrc $PROJECT $PROJECT
Dan Wendlandtea23e682012-08-22 05:53:17 -0700259 local NIC=""
260 for NET_NAME in ${NET_NAMES//,/ };do
261 NIC="$NIC --nic net-id="`get_network_id $NET_NAME`
262 done
263 #TODO (nati) Add multi-nic test
264 #TODO (nati) Add public-net test
Ian Wienandada886d2015-10-07 14:06:26 +1100265 local VM_UUID
266 VM_UUID=`nova boot --flavor $(get_flavor_id m1.tiny) \
Dan Wendlandtea23e682012-08-22 05:53:17 -0700267 --image $(get_image_id) \
268 $NIC \
Sean Dague7580a0c2016-02-17 06:23:36 -0500269 $PROJECT-server$NUM | grep ' id ' | cut -d"|" -f3 | sed 's/ //g'`
270 die_if_not_set $LINENO VM_UUID "Failure launching $PROJECT-server$NUM"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700271 confirm_server_active $VM_UUID
272}
273
274function create_vms {
Sean Dague7580a0c2016-02-17 06:23:36 -0500275 foreach_project_vm 'create_vm ${%PROJECT%_NAME} %NUM% ${%PROJECT%_VM%NUM%_NET}'
Dan Wendlandtea23e682012-08-22 05:53:17 -0700276}
277
278function ping_ip {
Sean Dague922c8ae2013-10-22 10:06:06 -0400279 # Test agent connection. Assumes namespaces are disabled, and
280 # that DHCP is in use, but not L3
281 local VM_NAME=$1
282 local NET_NAME=$2
283 IP=$(get_instance_ip $VM_NAME $NET_NAME)
Sean Dagueaf9bf862015-04-16 08:58:32 -0400284 ping_check $IP $BOOT_TIMEOUT $NET_NAME
Dan Wendlandtea23e682012-08-22 05:53:17 -0700285}
286
287function check_vm {
Sean Dague7580a0c2016-02-17 06:23:36 -0500288 local PROJECT=$1
Dan Wendlandtea23e682012-08-22 05:53:17 -0700289 local NUM=$2
Sean Dague7580a0c2016-02-17 06:23:36 -0500290 local VM_NAME="$PROJECT-server$NUM"
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700291 local NET_NAME=$3
Sean Dague7580a0c2016-02-17 06:23:36 -0500292 source $TOP_DIR/openrc $PROJECT $PROJECT
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700293 ping_ip $VM_NAME $NET_NAME
Dan Wendlandtea23e682012-08-22 05:53:17 -0700294 # TODO (nati) test ssh connection
295 # TODO (nati) test inter connection between vm
Dan Wendlandtea23e682012-08-22 05:53:17 -0700296 # TODO (nati) test dhcp host routes
297 # TODO (nati) test multi-nic
Dan Wendlandtea23e682012-08-22 05:53:17 -0700298}
299
300function check_vms {
Sean Dague7580a0c2016-02-17 06:23:36 -0500301 foreach_project_vm 'check_vm ${%PROJECT%_NAME} %NUM% ${%PROJECT%_VM%NUM%_NET}'
Dan Wendlandtea23e682012-08-22 05:53:17 -0700302}
303
304function shutdown_vm {
Sean Dague7580a0c2016-02-17 06:23:36 -0500305 local PROJECT=$1
Dan Wendlandtea23e682012-08-22 05:53:17 -0700306 local NUM=$2
Sean Dague7580a0c2016-02-17 06:23:36 -0500307 source $TOP_DIR/openrc $PROJECT $PROJECT
308 VM_NAME=${PROJECT}-server$NUM
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700309 nova delete $VM_NAME
Dan Wendlandtea23e682012-08-22 05:53:17 -0700310}
311
312function shutdown_vms {
Sean Dague7580a0c2016-02-17 06:23:36 -0500313 foreach_project_vm 'shutdown_vm ${%PROJECT%_NAME} %NUM%'
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700314 if ! timeout $TERMINATE_TIMEOUT sh -c "while nova list | grep -q ACTIVE; do sleep 1; done"; then
Nachi Ueno07115eb2013-02-26 12:38:18 -0800315 die $LINENO "Some VMs failed to shutdown"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700316 fi
317}
318
319function delete_network {
Sean Dague7580a0c2016-02-17 06:23:36 -0500320 local PROJECT=$1
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700321 local NUM=$2
Sean Dague7580a0c2016-02-17 06:23:36 -0500322 local NET_NAME="${PROJECT}-net$NUM"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700323 source $TOP_DIR/openrc admin admin
Sean Dague7580a0c2016-02-17 06:23:36 -0500324 local PROJECT_ID
325 PROJECT_ID=$(get_project_id $PROJECT)
Dan Wendlandtea23e682012-08-22 05:53:17 -0700326 #TODO(nati) comment out until l3-agent merged
327 #for res in port subnet net router;do
Armando Migliaccio4f11ff32016-10-27 06:15:23 -0700328 for net_id in `openstack network list -c ID -c Name | grep $NET_NAME | awk '{print $2}'`;do
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700329 delete_probe $net_id
Armando Migliaccio4f11ff32016-10-27 06:15:23 -0700330 openstack subnet list | grep $net_id | awk '{print $2}' | xargs -I% openstack subnet delete %
331 openstack network delete $net_id
Dan Wendlandtea23e682012-08-22 05:53:17 -0700332 done
Nachi Ueno5db5bfa2012-10-29 11:25:29 -0700333 source $TOP_DIR/openrc demo demo
Dan Wendlandtea23e682012-08-22 05:53:17 -0700334}
335
336function delete_networks {
Sean Dague7580a0c2016-02-17 06:23:36 -0500337 foreach_project_net 'delete_network ${%PROJECT%_NAME} %NUM%'
Sean Dague922c8ae2013-10-22 10:06:06 -0400338 # TODO(nati) add secuirty group check after it is implemented
339 # source $TOP_DIR/openrc demo1 demo1
340 # nova secgroup-delete-rule default icmp -1 -1 0.0.0.0/0
341 # source $TOP_DIR/openrc demo2 demo2
342 # nova secgroup-delete-rule default icmp -1 -1 0.0.0.0/0
Dan Wendlandtea23e682012-08-22 05:53:17 -0700343}
344
345function create_all {
Sean Dague7580a0c2016-02-17 06:23:36 -0500346 create_projects
Dan Wendlandtea23e682012-08-22 05:53:17 -0700347 create_networks
348 create_vms
349}
350
351function delete_all {
352 shutdown_vms
353 delete_networks
Sean Dague7580a0c2016-02-17 06:23:36 -0500354 delete_projects_and_users
Dan Wendlandtea23e682012-08-22 05:53:17 -0700355}
356
357function all {
358 create_all
359 check_vms
360 delete_all
361}
362
Dean Troyer6d04fd72012-12-21 11:03:37 -0600363# Test functions
364# --------------
365
Dan Wendlandtea23e682012-08-22 05:53:17 -0700366function test_functions {
367 IMAGE=$(get_image_id)
368 echo $IMAGE
369
Sean Dague7580a0c2016-02-17 06:23:36 -0500370 PROJECT_ID=$(get_project_id demo)
371 echo $PROJECT_ID
Dan Wendlandtea23e682012-08-22 05:53:17 -0700372
373 FLAVOR_ID=$(get_flavor_id m1.tiny)
374 echo $FLAVOR_ID
375
376 NETWORK_ID=$(get_network_id admin)
377 echo $NETWORK_ID
378}
379
Dean Troyer6d04fd72012-12-21 11:03:37 -0600380# Usage and main
381# --------------
382
Ian Wienandaee18c72014-02-21 15:35:08 +1100383function usage {
Dan Wendlandtea23e682012-08-22 05:53:17 -0700384 echo "$0: [-h]"
385 echo " -h, --help Display help message"
Sean Dague7580a0c2016-02-17 06:23:36 -0500386 echo " -t, --project Create projects"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700387 echo " -n, --net Create networks"
388 echo " -v, --vm Create vms"
389 echo " -c, --check Check connection"
Sean Dague7580a0c2016-02-17 06:23:36 -0500390 echo " -x, --delete-projects Delete projects"
Dan Wendlandtea23e682012-08-22 05:53:17 -0700391 echo " -y, --delete-nets Delete networks"
392 echo " -z, --delete-vms Delete vms"
393 echo " -T, --test Test functions"
394}
395
Ian Wienandaee18c72014-02-21 15:35:08 +1100396function main {
Dan Wendlandtea23e682012-08-22 05:53:17 -0700397
398 echo Description
Dan Wendlandtea23e682012-08-22 05:53:17 -0700399
400 if [ $# -eq 0 ] ; then
401 # if no args are provided, run all tests
402 all
403 else
404
405 while [ "$1" != "" ]; do
406 case $1 in
407 -h | --help ) usage
408 exit
409 ;;
410 -n | --net ) create_networks
411 exit
412 ;;
413 -v | --vm ) create_vms
414 exit
415 ;;
Sean Dague7580a0c2016-02-17 06:23:36 -0500416 -t | --project ) create_projects
Dan Wendlandtea23e682012-08-22 05:53:17 -0700417 exit
418 ;;
419 -c | --check ) check_vms
420 exit
421 ;;
422 -T | --test ) test_functions
423 exit
424 ;;
Sean Dague7580a0c2016-02-17 06:23:36 -0500425 -x | --delete-projects ) delete_projects_and_users
Dan Wendlandtea23e682012-08-22 05:53:17 -0700426 exit
427 ;;
428 -y | --delete-nets ) delete_networks
429 exit
430 ;;
431 -z | --delete-vms ) shutdown_vms
432 exit
433 ;;
434 -a | --all ) all
435 exit
436 ;;
437 * ) usage
438 exit 1
439 esac
440 shift
441 done
442 fi
443}
444
Ian Wienand04c0f0b2015-06-30 13:47:51 +1000445trap failed ERR
446function failed {
447 local r=$?
448 set +o errtrace
449 set +o xtrace
450 echo "Failed to execute"
451 echo "Starting cleanup..."
452 delete_all
453 echo "Finished cleanup"
454 exit $r
455}
456
Dean Troyer6d04fd72012-12-21 11:03:37 -0600457# Kick off script
458# ---------------
Dan Wendlandtea23e682012-08-22 05:53:17 -0700459
Dan Wendlandtea23e682012-08-22 05:53:17 -0700460echo $*
461main $*
462
463set +o xtrace
464echo "*********************************************************************"
465echo "SUCCESS: End DevStack Exercise: $0"
466echo "*********************************************************************"