From 2b8aa2cb08dc012684e23df13e607365b66cd387 Mon Sep 17 00:00:00 2001 From: Sagi Shnaidman Date: Wed, 27 Jan 2021 02:39:32 +0200 Subject: [PATCH] Add Octavia job for testing Load Balancer Add basic test for LB. Configure Octavia job which will run on LB changes only. Change-Id: Ic76bb766f133c91a41893978ee864025dd659ab4 --- .zuul.yaml | 41 ++++++++++++++++++++ ci/playbooks/get_amphora_tarball.yaml | 6 +++ ci/roles/loadbalancer/defaults/main.yml | 3 ++ ci/roles/loadbalancer/tasks/main.yml | 50 +++++++++++++++++++++++++ ci/run-ansible-tests-collection.sh | 21 +++++++++++ ci/run-collection.yml | 2 + 6 files changed, 123 insertions(+) create mode 100644 ci/playbooks/get_amphora_tarball.yaml create mode 100644 ci/roles/loadbalancer/defaults/main.yml create mode 100644 ci/roles/loadbalancer/tasks/main.yml diff --git a/.zuul.yaml b/.zuul.yaml index 7bdf45b3..08e5009b 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -19,6 +19,42 @@ devstack_services: designate: true +- job: + name: ansible-collections-openstack-functional-devstack-octavia + parent: ansible-collections-openstack-functional-devstack + description: | + Run openstack collections functional tests against a master devstack + with Octavia plugin enabled, using releases of openstacksdk and latest + ansible release. Run it only on Load Balancer changes. + pre-run: ci/playbooks/get_amphora_tarball.yaml + required-projects: + - openstack/octavia + - name: github.com/ansible/ansible + override-checkout: stable-2.10 + files: + - ^ci/roles/loadbalancer/.*$ + - ^plugins/modules/lb_health_monitor.py + - ^plugins/modules/lb_listener.py + - ^plugins/modules/lb_member.py + - ^plugins/modules/lb_pool.py + - ^plugins/modules/loadbalancer.py + vars: + tox_envlist: ansible + devstack_plugins: + designate: https://opendev.org/openstack/designate + octavia: https://opendev.org/openstack/octavia + devstack_services: + designate: true + octavia: true + o-api: true + o-cw: true + o-hk: true + o-hm: true + devstack_localrc: + OCTAVIA_AMP_IMAGE_FILE: "/tmp/test-only-amphora-x64-haproxy-ubuntu-bionic.qcow2" + OCTAVIA_AMP_IMAGE_SIZE: 3 + OCTAVIA_AMP_IMAGE_NAME: "test-only-amphora-x64-haproxy-ubuntu-bionic" + - job: name: ansible-collections-openstack-functional-devstack-releases parent: ansible-collections-openstack-functional-devstack @@ -315,6 +351,9 @@ - ansible-collections-openstack-functional-devstack-queens-ansible-2.10: dependencies: *deps_unit_lint irrelevant-files: *ignore_files + - ansible-collections-openstack-functional-devstack-octavia: + dependencies: *deps_unit_lint + irrelevant-files: *ignore_files - bifrost-collections-src: voting: false @@ -342,6 +381,7 @@ - ansible-collections-openstack-functional-devstack-stein-ansible-2.10 - ansible-collections-openstack-functional-devstack-rocky-ansible-2.10 - ansible-collections-openstack-functional-devstack-queens-ansible-2.10 + - ansible-collections-openstack-functional-devstack-octavia periodic: jobs: @@ -363,3 +403,4 @@ - ansible-collections-openstack-functional-devstack-queens-ansible-devel - bifrost-collections-src - bifrost-keystone-collections-src + - ansible-collections-openstack-functional-devstack-octavia diff --git a/ci/playbooks/get_amphora_tarball.yaml b/ci/playbooks/get_amphora_tarball.yaml new file mode 100644 index 00000000..1fcbcdad --- /dev/null +++ b/ci/playbooks/get_amphora_tarball.yaml @@ -0,0 +1,6 @@ +- hosts: all + tasks: + - name: Download amphora tarball + get_url: + url: "https://tarballs.openstack.org/octavia/test-images/test-only-amphora-x64-haproxy-ubuntu-bionic.qcow2" + dest: /tmp/test-only-amphora-x64-haproxy-ubuntu-bionic.qcow2 diff --git a/ci/roles/loadbalancer/defaults/main.yml b/ci/roles/loadbalancer/defaults/main.yml new file mode 100644 index 00000000..296fb170 --- /dev/null +++ b/ci/roles/loadbalancer/defaults/main.yml @@ -0,0 +1,3 @@ +network_name: network_lb +subnet_name: subnet_lb +lb_name: test_lb diff --git a/ci/roles/loadbalancer/tasks/main.yml b/ci/roles/loadbalancer/tasks/main.yml new file mode 100644 index 00000000..1c62eefc --- /dev/null +++ b/ci/roles/loadbalancer/tasks/main.yml @@ -0,0 +1,50 @@ + +--- +- name: Create network {{ network_name }} for LB + openstack.cloud.network: + cloud: "{{ cloud }}" + name: "{{ network_name }}" + state: present + +- name: Create subnet {{ subnet_name }} on network {{ network_name }} for LB + openstack.cloud.subnet: + cloud: "{{ cloud }}" + network_name: "{{ network_name }}" + name: "{{ subnet_name }}" + state: present + enable_dhcp: true + dns_nameservers: + - 8.8.8.7 + - 8.8.8.8 + cidr: 192.168.0.0/24 + gateway_ip: 192.168.0.1 + allocation_pool_start: 192.168.0.2 + allocation_pool_end: 192.168.0.254 + +- name: Create loadbalancer - generic + openstack.cloud.loadbalancer: + cloud: "{{ cloud }}" + state: present + name: "{{ lb_name }}" + vip_subnet: "{{ subnet_name }}" + timeout: 450 + +- name: Delete loadbalancer + openstack.cloud.loadbalancer: + cloud: "{{ cloud }}" + state: absent + name: "{{ lb_name }}" + timeout: 150 + +- name: Delete subnet {{ subnet_name }} on network {{ network_name }} + openstack.cloud.subnet: + cloud: "{{ cloud }}" + network_name: "{{ network_name }}" + name: "{{ subnet_name }}" + state: absent + +- name: Delete network {{ network_name }} of LB + openstack.cloud.network: + cloud: "{{ cloud }}" + name: "{{ network_name }}" + state: absent diff --git a/ci/run-ansible-tests-collection.sh b/ci/run-ansible-tests-collection.sh index 6215eca8..0a8662e9 100644 --- a/ci/run-ansible-tests-collection.sh +++ b/ci/run-ansible-tests-collection.sh @@ -106,6 +106,27 @@ then exit 1 fi +# In case of Octavia enabled: +_octavia_image_path="/tmp/test-only-amphora-x64-haproxy-ubuntu-bionic.qcow2" +if systemctl list-units --full -all | grep -Fq "devstack@o-api.service" && \ + test -f "$_octavia_image_path" +then + # Upload apmhora image for Octavia to test load balancers + OCTAVIA_AMP_IMAGE_FILE=${OCTAVIA_AMP_IMAGE_FILE:-"$_octavia_image_path"} + OCTAVIA_AMP_IMAGE_NAME=${OCTAVIA_AMP_IMAGE_NAME:-"test-only-amphora-x64-haproxy-ubuntu-bionic"} + OCTAVIA_AMP_IMAGE_SIZE=${OCTAVIA_AMP_IMAGE_SIZE:-3} + openstack --os-cloud=${CLOUD} image create \ + --container-format bare \ + --disk-format qcow2 \ + --private \ + --file $OCTAVIA_AMP_IMAGE_FILE \ + --project service $OCTAVIA_AMP_IMAGE_NAME + openstack --os-cloud=${CLOUD} image set --tag amphora $OCTAVIA_AMP_IMAGE_NAME + # End of Octavia preparement +else + tag_opt="$tag_opt --skip-tags loadbalancer" +fi + # Discover openstackSDK version SDK_VER=$(python -c "import openstack; print(openstack.version.__version__)") pushd ci/ diff --git a/ci/run-collection.yml b/ci/run-collection.yml index 33865d3a..729cd7eb 100644 --- a/ci/run-collection.yml +++ b/ci/run-collection.yml @@ -42,3 +42,5 @@ - role: orchestration tags: orchestrate when: sdk_version is version("0.53.0", '>=') + - role: loadbalancer + tags: loadbalancer