-
-
Save MoteHue/ee5990bddea0677f54d8bb93d307aa71 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash -x | |
. ~/public-openrc.sh | |
. ~/venvs/octavia-test/bin/activate | |
flavor_name=m1.small | |
key_name=os-admin | |
net_name=admin-tenant | |
lb_port=80 | |
if ! (openstack security group list --project $OS_PROJECT_NAME | grep -q lb_test ) | |
then | |
echo "Creating security group" | |
openstack security group create lb_test | |
openstack security group rule create --ingress --project $OS_PROJECT_NAME --ethertype IPv4 --protocol tcp --dst-port 22 lb_test | |
openstack security group rule create --ingress --project $OS_PROJECT_NAME --ethertype IPv4 --protocol tcp --dst-port $lb_port lb_test | |
fi | |
echo "Testing OVN Octavia provider" | |
echo "Smoke test" | |
openstack loadbalancer list | |
# Create a server to act as a backend | |
openstack server create --wait --image Ubuntu-20.04 --flavor $flavor_name --key-name $key_name --network $net_name lb_member | |
openstack server add security group lb_member lb_test | |
member_fip=$(openstack floating ip create external -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) | |
# Wait for ssh port liveness | |
attempts=10 | |
for i in $(seq 1 ${attempts}); do | |
if ssh -v -o StrictHostKeyChecking=no -i ~/.ssh/$key_name ubuntu@${member_fip} 'hostname'; 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 | |
ssh -i ~/.ssh/$key_name ubuntu@${member_fip} sudo apt update | |
ssh -i ~/.ssh/$key_name ubuntu@${member_fip} sudo apt install -y nginx | |
ssh -i ~/.ssh/$key_name ubuntu@${member_fip} sudo systemctl start nginx | |
echo "Creating Octavia OVN LB:" | |
openstack loadbalancer create --vip-network-id $net_name --provider ovn --name test_ovn_lb --wait | |
openstack loadbalancer listener create --protocol TCP --protocol-port $lb_port --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 $net_name) | |
openstack loadbalancer member create --address ${member_ip} --subnet-id ${subnet_id} --protocol-port $lb_port --wait test_ovn_lb_pool | |
echo "Add a floating IP to the load balancer." | |
lb_fip=$(openstack floating ip create external -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 "Attempt to access the load balanced HTTP server." | |
attempts=2 | |
curl_args=( | |
--include | |
--location | |
--fail | |
) | |
for i in $(seq 1 ${attempts}); do | |
if curl "${curl_args[@]}" http://$lb_fip:$lb_port; 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 | |
openstack security group delete lb_test |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment