diff options
| author | Michal Nasiadka <mnasiadka@gmail.com> | 2020-11-09 10:17:10 +0100 |
|---|---|---|
| committer | Michal Nasiadka <mnasiadka@gmail.com> | 2021-03-24 16:36:44 +0000 |
| commit | 7a066f715467db56a637dd69de3e86419a0e58de (patch) | |
| tree | 24acb1b842e8b2fa7fb022c9ca7dc7030ac98e10 /tests/test-ovn.sh | |
| parent | 2ba4c88c8dcef579824b58e0ad2a13ae6e187f3b (diff) | |
| download | kolla-ansible-7a066f715467db56a637dd69de3e86419a0e58de.tar.gz kolla-ansible-7a066f715467db56a637dd69de3e86419a0e58de.zip | |
Add missing octavia-driver-agent
For using 3rd party Octavia providers (such as OVN provider) an
octavia-driver-agent container must be running to expose those providers to
use.
OVN CI job has been extended with deploying Octavia and testing OVN Load
Balancer.
Closes-Bug: #1903506
Depends-On: https://review.opendev.org/c/openstack/kolla/+/771191
Change-Id: Ibafa8b7307981f2a51e630cc113d18af6162171c
Diffstat (limited to 'tests/test-ovn.sh')
| -rwxr-xr-x | tests/test-ovn.sh | 90 |
1 files changed, 85 insertions, 5 deletions
diff --git a/tests/test-ovn.sh b/tests/test-ovn.sh index bf47f3de5..9ed190619 100755 --- a/tests/test-ovn.sh +++ b/tests/test-ovn.sh @@ -7,7 +7,7 @@ set -o pipefail # Enable unbuffered output export PYTHONUNBUFFERED=1 -function test_ovn_logged { +function test_ovn { # NOTE(yoctozepto): could use real ini parsing but this is fine for now local neutron_ml2_conf_path=/etc/kolla/neutron-server/ml2_conf.ini ovn_nb_connection=$(sudo grep -P -o -e "(?<=^ovn_nb_connection = ).*" "$neutron_ml2_conf_path") @@ -42,9 +42,87 @@ function test_ovn_logged { fi } -function test_ovn { - echo "Testing OVN" - test_ovn_logged > /tmp/logs/ansible/test-ovn 2>&1 +function test_octavia { + . /etc/kolla/admin-openrc.sh + . ~/openstackclient-venv/bin/activate + echo "Testing OVN Octavia provider" + echo "Smoke test" + openstack loadbalancer list + + # Create a server to act as a backend + openstack server create --wait --image cirros --flavor m1.tiny --key-name mykey --network demo-net lb_member --wait + member_fip=$(openstack floating ip create public1 -f value -c floating_ip_address) + openstack server add floating ip lb_member ${member_fip} + member_ip=$(openstack floating ip show ${member_fip} -f value -c fixed_ip_address) + + # Dummy HTTP server. + attempts=12 + for i in $(seq 1 ${attempts}); do + if ssh -v -o BatchMode=yes -o StrictHostKeyChecking=no cirros@${member_fip} 'nohup sh -c "while true; do echo -e \"HTTP/1.1 200 OK\n\n $(date)\" | sudo nc -l -p 8000; done &"'; then + break + elif [[ $i -eq ${attempts} ]]; then + echo "Failed to access server via SSH after ${attempts} attempts" + echo "Console log:" + openstack console log show lb_member + return 1 + else + echo "Cannot access server - retrying" + fi + sleep 10 + done + + echo "Creating Octavia OVN LB:" + openstack loadbalancer create --vip-network-id demo-net --provider ovn --name test_ovn_lb --wait + openstack loadbalancer listener create --protocol TCP --protocol-port 8000 --name test_ovn_lb_listener --wait test_ovn_lb + openstack loadbalancer pool create --protocol TCP --lb-algorithm SOURCE_IP_PORT --listener test_ovn_lb_listener --name test_ovn_lb_pool --wait + subnet_id=$(openstack subnet list -c ID -f value --name demo-subnet) + openstack loadbalancer member create --address ${member_ip} --subnet-id ${subnet_id} --protocol-port 8000 --wait test_ovn_lb_pool + echo "Add a floating IP to the load balancer." + lb_fip=$(openstack floating ip create public1 -f value -c name) + lb_vip=$(openstack loadbalancer show test_ovn_lb -f value -c vip_address) + lb_port_id=$(openstack port list --fixed-ip ip-address=$lb_vip -f value -c ID) + openstack floating ip set $lb_fip --port $lb_port_id + + echo "OVN NB entries for LB:" + sudo docker exec ovn_northd ovn-nbctl --db "$ovn_nb_connection" list load_balancer + echo "OVN NB entries for NAT:" + sudo docker exec ovn_northd ovn-nbctl --db "$ovn_nb_connection" list nat + + echo "Attempt to access the load balanced HTTP server." + attempts=12 + curl_args=( + --include + --location + --fail + ) + for i in $(seq 1 ${attempts}); do + if curl "${curl_args[@]}" $lb_fip:8000; then + break + elif [[ $i -eq ${attempts} ]]; then + echo "Failed to access load balanced service after ${attempts} attempts" + return 1 + else + echo "Cannot access load balancer - retrying" + fi + sleep 10 + done + + echo "Cleaning up" + openstack loadbalancer delete test_ovn_lb --cascade --wait + openstack floating ip delete ${lb_fip} + openstack server remove floating ip lb_member ${member_fip} + openstack floating ip delete ${member_fip} + openstack server delete --wait lb_member +} + +function test_ovn_logged { + test_ovn + test_octavia +} + +function test_ovn_setup { + echo "Testing OVN and Octavia OVN provider" + test_ovn_logged &> /tmp/logs/ansible/test-ovn result=$? if [[ $result != 0 ]]; then echo "Testing OVN failed. See ansible/test-ovn for details" @@ -54,4 +132,6 @@ function test_ovn { return $result } -test_ovn + + +test_ovn_setup |
