aboutsummaryrefslogtreecommitdiff
path: root/tests/test-ovn.sh
diff options
context:
space:
mode:
authorMichal Nasiadka <mnasiadka@gmail.com>2020-11-09 10:17:10 +0100
committerMichal Nasiadka <mnasiadka@gmail.com>2021-03-24 16:36:44 +0000
commit7a066f715467db56a637dd69de3e86419a0e58de (patch)
tree24acb1b842e8b2fa7fb022c9ca7dc7030ac98e10 /tests/test-ovn.sh
parent2ba4c88c8dcef579824b58e0ad2a13ae6e187f3b (diff)
downloadkolla-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-xtests/test-ovn.sh90
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