Used uuidgen

Refacted timeout section to be a loop
Added output for progress
Fixed indentation
This commit is contained in:
Alex Polvi 2013-08-18 09:15:15 -07:00
parent f986ba2d03
commit a191ff9973

View File

@ -50,6 +50,7 @@ if ! ec2-describe-images -F image-id="$AMI" | grep -q "$AMI"; then
exit 1 exit 1
fi fi
echo -n "Creating keys and security group... "
key_name="autotest-`date +%s`" key_name="autotest-`date +%s`"
key_file="/tmp/$key_name" key_file="/tmp/$key_name"
ec2-create-keypair $key_name | grep -v KEYPAIR > $key_file ec2-create-keypair $key_name | grep -v KEYPAIR > $key_file
@ -60,14 +61,16 @@ sg=$(ec2-create-group $sg_name --description "$sg_name" | cut -f2)
ec2-authorize "$sg_name" -P tcp -p 4001 > /dev/null ec2-authorize "$sg_name" -P tcp -p 4001 > /dev/null
ec2-authorize "$sg_name" -P tcp -p 7001 > /dev/null ec2-authorize "$sg_name" -P tcp -p 7001 > /dev/null
ec2-authorize "$sg_name" -P tcp -p 22 > /dev/null ec2-authorize "$sg_name" -P tcp -p 22 > /dev/null
echo "OK ($key_name)"
# might be needed later for multi-zone tests # might be needed later for multi-zone tests
zoneurl=http://instance-data/latest/meta-data/placement/availability-zone zoneurl=http://instance-data/latest/meta-data/placement/availability-zone
zone=$(curl --fail -s $zoneurl) zone=$(curl --fail -s $zoneurl)
region=$(echo $zone | sed 's/.$//') region=$(echo $zone | sed 's/.$//')
token=$(dd if=/dev/urandom bs=8 count=1 2> /dev/null| sha1sum|cut -d' ' -f1) token=$(uuidgen)
echo -n "Booting instances... "
instances=$(ec2-run-instances \ instances=$(ec2-run-instances \
--user-data "$token" \ --user-data "$token" \
--instance-type "t1.micro" \ --instance-type "t1.micro" \
@ -75,7 +78,6 @@ instances=$(ec2-run-instances \
--group "$sg_name" \ --group "$sg_name" \
--key "$key_name" $AMI | \ --key "$key_name" $AMI | \
grep INSTANCE | cut -f2) grep INSTANCE | cut -f2)
# little hack to create a describe instances command that only # little hack to create a describe instances command that only
# pulls data for these instances # pulls data for these instances
ec2_cmd=$(echo $instances | sed 's/ / --filter instance-id=/g') ec2_cmd=$(echo $instances | sed 's/ / --filter instance-id=/g')
@ -88,16 +90,16 @@ declare -a ips=($($ec2_cmd | grep INSTANCE | cut -f4))
# sleep until all the sockets we need come up # sleep until all the sockets we need come up
for host in ${ips[@]}; do for host in ${ips[@]}; do
for port in 22 4001 7001; do
timeout 30 perl -MIO::Socket::INET -e " timeout 30 perl -MIO::Socket::INET -e "
until(new IO::Socket::INET('$host:22')){sleep 1}" until(new IO::Socket::INET('$host:$port')){sleep 1}"
timeout 30 perl -MIO::Socket::INET -e "
until(new IO::Socket::INET('$host:4001')){sleep 1}"
timeout 30 perl -MIO::Socket::INET -e "
until(new IO::Socket::INET('$host:7001')){sleep 1}"
done done
done
echo "OK ($instances)"
echo -n "Testing etcd... "
test_key="v1/keys/test" test_key="v1/keys/test"
# XXX: the sleeps *should never* be required, this is a bug in etcd # XXX: the sleep *should never* be required, this is a bug in etcd
sleep 1 sleep 1
curl --fail -s -L "${ips[0]}:4001/$test_key" -d value="$token" > /dev/null curl --fail -s -L "${ips[0]}:4001/$test_key" -d value="$token" > /dev/null
sleep 1 sleep 1
@ -107,7 +109,9 @@ for host in ${ips[@]}; do
exit 1 exit 1
fi fi
done done
echo "OK"
echo -n "Cleaning up environment... "
ec2-terminate-instances $instances > /dev/null ec2-terminate-instances $instances > /dev/null
while ! $ec2_cmd | grep INSTANCE | grep -q terminated while ! $ec2_cmd | grep INSTANCE | grep -q terminated
do sleep 10; done do sleep 10; done
@ -115,3 +119,4 @@ while ! $ec2_cmd | grep INSTANCE | grep -q terminated
ec2-delete-group $sg_name > /dev/null ec2-delete-group $sg_name > /dev/null
ec2-delete-keypair $key_name > /dev/null ec2-delete-keypair $key_name > /dev/null
rm $key_file rm $key_file
echo "OK"