Skip to content

Instantly share code, notes, and snippets.

@MoteHue
Created March 29, 2023 16:00
Show Gist options
  • Save MoteHue/ee5990bddea0677f54d8bb93d307aa71 to your computer and use it in GitHub Desktop.
Save MoteHue/ee5990bddea0677f54d8bb93d307aa71 to your computer and use it in GitHub Desktop.
#!/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