|
| 1 | +- hosts: all |
| 2 | + become: yes |
| 3 | + roles: |
| 4 | + - clone-devstack-gate-to-workspace |
| 5 | + - create-devstack-local-conf |
| 6 | + - install-devstack |
| 7 | + tasks: |
| 8 | + - shell: |
| 9 | + cmd: | |
| 10 | + set -e |
| 11 | + set -x |
| 12 | +
|
| 13 | + # Prepare env on executing node |
| 14 | + source /opt/stack/new/devstack/openrc admin admin |
| 15 | + go get github.com/Masterminds/glide |
| 16 | + make depend |
| 17 | +
|
| 18 | + is_instance_active() { |
| 19 | + local instance_id=$1 |
| 20 | + for i in {1..50} |
| 21 | + do |
| 22 | + [[ $(openstack server show $instance_id -f value -c status) == ACTIVE ]] && return |
| 23 | + echo "Waiting instance(id=$instance_id) for ACTIVE... $i" |
| 24 | + sleep 1 |
| 25 | + done |
| 26 | +
|
| 27 | + return 1 |
| 28 | + } |
| 29 | +
|
| 30 | + is_instance_ssh_accessible() { |
| 31 | + local user=$1 |
| 32 | + local host=$2 |
| 33 | + local private_key=$3 |
| 34 | + for i in {1..50} |
| 35 | + do |
| 36 | + ssh -i $private_key -o ConnectTimeout=5 -o StrictHostKeyChecking=no $user@$host : && return |
| 37 | + echo "Waiting host($host) for ssh accessible... $i" |
| 38 | + sleep 10 |
| 39 | + done |
| 40 | +
|
| 41 | + return 1 |
| 42 | + } |
| 43 | +
|
| 44 | + # Update subnet dns to allow access to internet |
| 45 | + SUBNET_ID=$(openstack subnet list --network private --ip-version 4 -f value -c ID) |
| 46 | + openstack subnet set --dns-nameserver 8.8.8.8 $SUBNET_ID |
| 47 | +
|
| 48 | + IMAGE_SOURCE='http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img' |
| 49 | + IMAGE_NAME=${IMAGE_SOURCE##*/} |
| 50 | + wget -q -t 2 -c "$IMAGE_SOURCE" -O "$IMAGE_NAME" |
| 51 | + IMAGE_ID=$(openstack image create --file "$IMAGE_NAME" --min-disk 1 --container-format bare --disk-format qcow2 "$IMAGE_NAME" -f value -c id) |
| 52 | + rm "$IMAGE_NAME" |
| 53 | +
|
| 54 | + openstack flavor create --vcpus 8 --ram 16384 --disk 10 flavor_1 |
| 55 | + openstack keypair create keypair_1 > privatekey_1 |
| 56 | + chmod 600 privatekey_1 |
| 57 | +
|
| 58 | + # Create install and wait for ACTIVE |
| 59 | + INSTANCE_ID=$(openstack server create --image $IMAGE_ID --flavor flavor_1 --network private --key-name keypair_1 instance_1 -f value -c id) |
| 60 | + if ! is_instance_active $INSTANCE_ID; then |
| 61 | + echo "Instance(id=$INSTANCE_ID) is still not ACTIVE, exit" |
| 62 | + exit 1 |
| 63 | + fi |
| 64 | +
|
| 65 | + PORT_ID=$(openstack port list --device-id $INSTANCE_ID -f value -c id) |
| 66 | + SECURITY_GROUP_ID=$(openstack port show $PORT_ID -f value -c security_group_ids) |
| 67 | + openstack security group rule create --ingress --protocol tcp --dst-port 22 $SECURITY_GROUP_ID |
| 68 | + FLOATING_IP=$(openstack floating ip create public -f value -c floating_ip_address) |
| 69 | + openstack server add floating ip $INSTANCE_ID $FLOATING_IP |
| 70 | +
|
| 71 | + if ! is_instance_ssh_accessible ubuntu $FLOATING_IP privatekey_1; then |
| 72 | + echo "Instance(id=$INSTANCE_ID) is still not ssh accessible, exit" |
| 73 | + exit 1 |
| 74 | + fi |
| 75 | +
|
| 76 | + # Remove env contains 'short_source' which is a function defined by devstack for formating PS4 |
| 77 | + export -p | grep -v short_source > exported-envs |
| 78 | + for rsync_dir in /home/zuul/src /home/zuul/bin /home/zuul/pkg /usr/local/go |
| 79 | + do |
| 80 | + rsync -az -e 'ssh -i privatekey_1' --rsync-path "sudo mkdir -p $rsync_dir && sudo rsync" $rsync_dir/ ubuntu@$FLOATING_IP:$rsync_dir |
| 81 | + done |
| 82 | +
|
| 83 | + # Run test inside devstack instance |
| 84 | + ssh -i privatekey_1 ubuntu@$FLOATING_IP " |
| 85 | + set -x |
| 86 | + cd $PWD |
| 87 | + source exported-envs |
| 88 | + sudo apt install make -y |
| 89 | + TESTARGS='-v' make test 2>&1 |
| 90 | + " | tee $TEST_RESULTS_TXT |
| 91 | + executable: /bin/bash |
| 92 | + chdir: '{{ zuul.project.src_dir }}' |
| 93 | + environment: '{{ golang_env }}' |
0 commit comments