mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-13 07:56:57 +02:00
Merge pull request #175 from marineam/coretest
Use coretest in AMI test script
This commit is contained in:
commit
5dc090dae9
@ -10,6 +10,6 @@ fi
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
sudo $DIR/build_ebs_on_ec2.sh -V $VER -K $DIR/aws-pk.pem -C $DIR/aws-cert.pem
|
sudo $DIR/build_ebs_on_ec2.sh -V $VER -K $DIR/aws-pk.pem -C $DIR/aws-cert.pem
|
||||||
$DIR/test_ami2.sh -v -V $VER -K $DIR/aws-pk.pem -C $DIR/aws-cert.pem
|
$DIR/test_ami.sh -v -V $VER -K $DIR/aws-pk.pem -C $DIR/aws-cert.pem
|
||||||
$DIR/copy_ami.sh -V $VER -K $DIR/aws-pk.pem -C $DIR/aws-cert.pem
|
$DIR/copy_ami.sh -V $VER -K $DIR/aws-pk.pem -C $DIR/aws-cert.pem
|
||||||
$DIR/upload_ami_txt.sh -V $VER -K $DIR/aws-pk.pem -C $DIR/aws-cert.pem
|
$DIR/upload_ami_txt.sh -V $VER -K $DIR/aws-pk.pem -C $DIR/aws-cert.pem
|
||||||
|
@ -63,7 +63,6 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo -n "Creating keys and security group... "
|
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"
|
||||||
@ -105,18 +104,29 @@ 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
|
for port in 22 4001 7001; do
|
||||||
timeout 90 perl -MIO::Socket::INET -e "
|
timeout 120 perl -MIO::Socket::INET -e "
|
||||||
until(new IO::Socket::INET('$host:$port')){sleep 1}"
|
until(new IO::Socket::INET('$host:$port')){sleep 1}"
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
echo "OK ($instances)"
|
echo "OK ($instances)"
|
||||||
|
|
||||||
|
echo "Running coretest..."
|
||||||
|
for host in ${ips[@]}; do
|
||||||
|
if ! ssh -i "$key_file" -l core -o StrictHostKeyChecking=no "$host" \
|
||||||
|
coretest -test.v=true -test.parallel=8
|
||||||
|
then
|
||||||
|
echo "coretest failed for $host" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "OK"
|
||||||
|
|
||||||
echo -n "Testing etcd... "
|
echo -n "Testing etcd... "
|
||||||
test_key="v1/keys/test"
|
test_key="v1/keys/test"
|
||||||
# XXX: the sleep *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 5
|
||||||
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 5
|
||||||
for host in ${ips[@]}; do
|
for host in ${ips[@]}; do
|
||||||
if ! curl --fail -s -L "${host}:4001/$test_key" | grep -q $token; then
|
if ! curl --fail -s -L "${host}:4001/$test_key" | grep -q $token; then
|
||||||
echo "etcd bootstrap appears to have failed for $host" >&2
|
echo "etcd bootstrap appears to have failed for $host" >&2
|
||||||
@ -125,36 +135,7 @@ for host in ${ips[@]}; do
|
|||||||
done
|
done
|
||||||
echo "OK"
|
echo "OK"
|
||||||
|
|
||||||
AUTOTEST_DIR=$(mktemp -d)
|
|
||||||
trap 'cd /; rm -rf "${AUTOTEST_DIR}"' EXIT
|
|
||||||
pushd "${AUTOTEST_DIR}"
|
|
||||||
|
|
||||||
wget https://github.com/autotest/autotest/archive/0.15.1.tar.gz
|
|
||||||
tar -xzf 0.15.1.tar.gz
|
|
||||||
git clone git://github.com/coreos/coreos-autotest.git
|
|
||||||
cp -r ./coreos-autotest/client/* ./autotest-0.15.1/client/tests
|
|
||||||
|
|
||||||
cp ~/.ssh/config ~/.ssh/config.back
|
|
||||||
for host in ${ips[@]}; do
|
|
||||||
cat >> ~/.ssh/config <<EOF
|
|
||||||
Host $host
|
|
||||||
User core
|
|
||||||
IdentityFile $key_file
|
|
||||||
EOF
|
|
||||||
done
|
|
||||||
|
|
||||||
pushd autotest-0.15.1
|
|
||||||
sed -i 's_/usr/local/autotest,/home/autotest_/tmp/autotest_' global_config.ini
|
|
||||||
|
|
||||||
for file in `find -wholename "./client/tests/coreos_*/control"`
|
|
||||||
do
|
|
||||||
./server/autotest-remote -m ${ips} -c ${file} --install-in-tmpdir --ssh-user core
|
|
||||||
done
|
|
||||||
popd
|
|
||||||
popd
|
|
||||||
|
|
||||||
echo -n "Cleaning up environment... "
|
echo -n "Cleaning up environment... "
|
||||||
cp ~/.ssh/config.back ~/.ssh/config
|
|
||||||
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
|
||||||
|
@ -1,133 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# This expects to run on an EC2 instance.
|
|
||||||
#
|
|
||||||
# mad props to Eric Hammond for the initial script
|
|
||||||
# https://github.com/alestic/alestic-hardy-ebs/blob/master/bin/alestic-hardy-ebs-build-ami
|
|
||||||
|
|
||||||
# This script will launch three ec2 nodes with shared user-data, and then
|
|
||||||
# then test of the cluster is bootstrapped
|
|
||||||
|
|
||||||
# Set pipefail along with -e in hopes that we catch more errors
|
|
||||||
set -e -o pipefail
|
|
||||||
|
|
||||||
USAGE="Usage: $0 -a ami-id
|
|
||||||
-a ami-id ID of the AMI to be tests (required)
|
|
||||||
-K KEY Path to Amazon API private key.
|
|
||||||
-C CERT Path to Amazon API key certificate.
|
|
||||||
-h this ;-)
|
|
||||||
-v Verbose, see all the things!
|
|
||||||
|
|
||||||
This script must be run from an ec2 host with the ec2 tools installed.
|
|
||||||
"
|
|
||||||
|
|
||||||
AMI=
|
|
||||||
VER=
|
|
||||||
|
|
||||||
while getopts "a:V:K:C:hv" OPTION
|
|
||||||
do
|
|
||||||
case $OPTION in
|
|
||||||
a) AMI="$OPTARG";;
|
|
||||||
V) VER="$OPTARG";;
|
|
||||||
K) export EC2_PRIVATE_KEY="$OPTARG";;
|
|
||||||
C) export EC2_CERT="$OPTARG";;
|
|
||||||
h) echo "$USAGE"; exit;;
|
|
||||||
v) set -x;;
|
|
||||||
*) exit 1;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ $(id -u) -eq 0 ]]; then
|
|
||||||
echo "$0: This command should not be ran run as root!" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$AMI" && -n "$VER" ]]; then
|
|
||||||
AMI=$(ec2-describe-images -F name="CoreOS-$VER" | grep -m1 ^IMAGE \
|
|
||||||
| cut -f2) || true # Don't die silently, error messages are good
|
|
||||||
if [[ -z "$AMI" ]]; then
|
|
||||||
echo "$0: Cannot find an AMI for CoreOS $VER" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif [[ -n "$AMI" ]]; then
|
|
||||||
# check to make sure this is a valid image
|
|
||||||
if ! ec2-describe-images -F image-id="$AMI" | grep -q "$AMI"; then
|
|
||||||
echo "$0: Unknown image: $AMI" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "$0: AMI id or version required (-a or -V options)" >&2
|
|
||||||
echo "$USAGE" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -n "Creating keys and security group... "
|
|
||||||
key_name="autotest-`date +%s`"
|
|
||||||
key_file="/tmp/$key_name"
|
|
||||||
ec2-create-keypair $key_name | grep -v KEYPAIR > $key_file
|
|
||||||
chmod 600 $key_file
|
|
||||||
|
|
||||||
sg_name=$key_name
|
|
||||||
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 7001 > /dev/null
|
|
||||||
ec2-authorize "$sg_name" -P tcp -p 22 > /dev/null
|
|
||||||
echo "OK ($key_name)"
|
|
||||||
|
|
||||||
# might be needed later for multi-zone tests
|
|
||||||
zoneurl=http://instance-data/latest/meta-data/placement/availability-zone
|
|
||||||
zone=$(curl --fail -s $zoneurl)
|
|
||||||
region=$(echo $zone | sed 's/.$//')
|
|
||||||
|
|
||||||
token=$(uuidgen)
|
|
||||||
|
|
||||||
echo -n "Booting instances... "
|
|
||||||
instances=$(ec2-run-instances \
|
|
||||||
--user-data "$token" \
|
|
||||||
--instance-type "t1.micro" \
|
|
||||||
--instance-count 3 \
|
|
||||||
--group "$sg_name" \
|
|
||||||
--key "$key_name" $AMI | \
|
|
||||||
grep INSTANCE | cut -f2)
|
|
||||||
# little hack to create a describe instances command that only
|
|
||||||
# pulls data for these instances
|
|
||||||
ec2_cmd=$(echo $instances | sed 's/ / --filter instance-id=/g')
|
|
||||||
ec2_cmd="ec2-describe-instances --filter instance-id=$ec2_cmd"
|
|
||||||
|
|
||||||
while $ec2_cmd | grep INSTANCE | grep -q pending
|
|
||||||
do sleep 10; done
|
|
||||||
|
|
||||||
declare -a ips=($($ec2_cmd | grep INSTANCE | cut -f4))
|
|
||||||
|
|
||||||
# sleep until all the sockets we need come up
|
|
||||||
for host in ${ips[@]}; do
|
|
||||||
for port in 22 4001 7001; do
|
|
||||||
timeout 90 perl -MIO::Socket::INET -e "
|
|
||||||
until(new IO::Socket::INET('$host:$port')){sleep 1}"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
echo "OK ($instances)"
|
|
||||||
|
|
||||||
echo -n "Testing etcd... "
|
|
||||||
test_key="v1/keys/test"
|
|
||||||
# XXX: the sleep *should never* be required, this is a bug in etcd
|
|
||||||
sleep 1
|
|
||||||
curl --fail -s -L "${ips[0]}:4001/$test_key" -d value="$token" > /dev/null
|
|
||||||
sleep 1
|
|
||||||
for host in ${ips[@]}; do
|
|
||||||
if ! curl --fail -s -L "${host}:4001/$test_key" | grep -q $token; then
|
|
||||||
echo "etcd bootstrap appears to have failed for $host" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo "OK"
|
|
||||||
|
|
||||||
echo -n "Cleaning up environment... "
|
|
||||||
ec2-terminate-instances $instances > /dev/null
|
|
||||||
while ! $ec2_cmd | grep INSTANCE | grep -q terminated
|
|
||||||
do sleep 10; done
|
|
||||||
|
|
||||||
ec2-delete-group $sg_name > /dev/null
|
|
||||||
ec2-delete-keypair $key_name > /dev/null
|
|
||||||
rm $key_file
|
|
||||||
echo "OK"
|
|
Loading…
Reference in New Issue
Block a user