From 1d83b44f1412f85fb60a8c434304e9f91854ab51 Mon Sep 17 00:00:00 2001 From: Zhuli <604832220@qq.com> Date: Wed, 14 Feb 2018 17:22:51 +0800 Subject: [PATCH] UT: dims/openstack-cloud-controller-manager + devstack [in vm] --- .../.gitkeep | 0 .../run.yaml | 93 +++++++++++++++++++ zuul.d/jobs.yaml | 9 ++ zuul.d/nodesets.yaml | 6 ++ 4 files changed, 108 insertions(+) delete mode 100644 playbooks/openstack-cloud-controller-manager-unittest/.gitkeep create mode 100644 playbooks/openstack-cloud-controller-manager-unittest/run.yaml diff --git a/playbooks/openstack-cloud-controller-manager-unittest/.gitkeep b/playbooks/openstack-cloud-controller-manager-unittest/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/playbooks/openstack-cloud-controller-manager-unittest/run.yaml b/playbooks/openstack-cloud-controller-manager-unittest/run.yaml new file mode 100644 index 0000000000000..b8b1a9c40c434 --- /dev/null +++ b/playbooks/openstack-cloud-controller-manager-unittest/run.yaml @@ -0,0 +1,93 @@ +- hosts: all + become: yes + roles: + - clone-devstack-gate-to-workspace + - create-devstack-local-conf + - install-devstack + tasks: + - shell: + cmd: | + set -e + set -x + + # Prepare env on executing node + source /opt/stack/new/devstack/openrc admin admin + go get github.com/Masterminds/glide + make depend + + is_instance_active() { + local instance_id=$1 + for i in {1..50} + do + [[ $(openstack server show $instance_id -f value -c status) == ACTIVE ]] && return + echo "Waiting instance(id=$instance_id) for ACTIVE... $i" + sleep 1 + done + + return 1 + } + + is_instance_ssh_accessible() { + local user=$1 + local host=$2 + local private_key=$3 + for i in {1..50} + do + ssh -i $private_key -o ConnectTimeout=5 -o StrictHostKeyChecking=no $user@$host : && return + echo "Waiting host($host) for ssh accessible... $i" + sleep 10 + done + + return 1 + } + + # Update subnet dns to allow access to internet + SUBNET_ID=$(openstack subnet list --network private --ip-version 4 -f value -c ID) + openstack subnet set --dns-nameserver 8.8.8.8 $SUBNET_ID + + IMAGE_SOURCE='http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img' + IMAGE_NAME=${IMAGE_SOURCE##*/} + wget -q -t 2 -c "$IMAGE_SOURCE" -O "$IMAGE_NAME" + IMAGE_ID=$(openstack image create --file "$IMAGE_NAME" --min-disk 1 --container-format bare --disk-format qcow2 "$IMAGE_NAME" -f value -c id) + rm "$IMAGE_NAME" + + openstack flavor create --vcpus 8 --ram 16384 --disk 10 flavor_1 + openstack keypair create keypair_1 > privatekey_1 + chmod 600 privatekey_1 + + # Create install and wait for ACTIVE + INSTANCE_ID=$(openstack server create --image $IMAGE_ID --flavor flavor_1 --network private --key-name keypair_1 instance_1 -f value -c id) + if ! is_instance_active $INSTANCE_ID; then + echo "Instance(id=$INSTANCE_ID) is still not ACTIVE, exit" + exit 1 + fi + + PORT_ID=$(openstack port list --device-id $INSTANCE_ID -f value -c id) + SECURITY_GROUP_ID=$(openstack port show $PORT_ID -f value -c security_group_ids) + openstack security group rule create --ingress --protocol tcp --dst-port 22 $SECURITY_GROUP_ID + FLOATING_IP=$(openstack floating ip create public -f value -c floating_ip_address) + openstack server add floating ip $INSTANCE_ID $FLOATING_IP + + if ! is_instance_ssh_accessible ubuntu $FLOATING_IP privatekey_1; then + echo "Instance(id=$INSTANCE_ID) is still not ssh accessible, exit" + exit 1 + fi + + # Remove env contains 'short_source' which is a function defined by devstack for formating PS4 + export -p | grep -v short_source > exported-envs + for rsync_dir in /home/zuul/src /home/zuul/bin /home/zuul/pkg /usr/local/go + do + rsync -az -e 'ssh -i privatekey_1' --rsync-path "sudo mkdir -p $rsync_dir && sudo rsync" $rsync_dir/ ubuntu@$FLOATING_IP:$rsync_dir + done + + # Run test inside devstack instance + ssh -i privatekey_1 ubuntu@$FLOATING_IP " + set -x + cd $PWD + source exported-envs + sudo apt install make -y + TESTARGS='-v' make test 2>&1 + " | tee $TEST_RESULTS_TXT + executable: /bin/bash + chdir: '{{ zuul.project.src_dir }}' + environment: '{{ golang_env }}' diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml index 482b092751f77..94703384436e3 100644 --- a/zuul.d/jobs.yaml +++ b/zuul.d/jobs.yaml @@ -200,3 +200,12 @@ run: playbooks/terraform-provider-opentelekomcloud-acceptance-test-opentelekomcloud/run.yaml secrets: - opentelekomcloud_credentials + +# Kubernetes jobs +- job: + name: openstack-cloud-controller-manager-unittest + parent: golang-test + description: | + Run Kubernetes openstack-cloud-controller-manager unit test in devstack instance + run: playbooks/openstack-cloud-controller-manager-unittest/run.yaml + nodeset: ubuntu-xenial-large diff --git a/zuul.d/nodesets.yaml b/zuul.d/nodesets.yaml index cb9888d186815..79a3072a2316d 100644 --- a/zuul.d/nodesets.yaml +++ b/zuul.d/nodesets.yaml @@ -17,3 +17,9 @@ nodes: - name: ubuntu-xenial-ut label: ubuntu-xenial-ut + +- nodeset: + name: ubuntu-xenial-large + nodes: + - name: ubuntu-xenial-large + label: ubuntu-xenial-large