Skip to content

Instantly share code, notes, and snippets.

@johnsom
Created April 15, 2018 23:00
Show Gist options
  • Save johnsom/25709f5450ce9458b143575a123dae6a to your computer and use it in GitHub Desktop.
Save johnsom/25709f5450ce9458b143575a123dae6a to your computer and use it in GitHub Desktop.
setupmultinet.sh
#!/bin/bash
# set -x
function wait_for_nova_active {
echo "Waiting for $1 to become ACTIVE..."
status=$(openstack server show -c status -f value $1)
while [ "$status" != "ACTIVE" ]
do
sleep 1
status=$(openstack server show -c status -f value $1)
if [ $status == "ERROR" ]
then
echo "$1 ERRORED. Exiting."
exit 1;
fi
done
}
project_id=$(openstack project list | awk '/ admin / {print $2}')
sec_group_id=$(openstack security group list --project $project_id | awk '/ default / {print $2}')
openstack security group rule create --remote-ip 0.0.0.0/0 --dst-port 22 --protocol tcp $sec_group_id
#nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
openstack security group rule create --remote-ip 0.0.0.0/0 --dst-port 80 --protocol tcp $sec_group_id
#nova secgroup-add-rule default tcp 80 80 0.0.0.0/0
#nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
openstack security group rule create --remote-ip 0.0.0.0/0 --protocol icmp $sec_group_id
TENANT_NET_1_ID=$(openstack network create -c id -f value tenant-1-net)
openstack subnet create --allocation-pool start=172.21.1.10,end=172.21.1.200 --network tenant-1-net --subnet-range 172.21.1.0/24 tenant-1-subnet
TENANT_NET_2_ID=$(openstack network create -c id -f value tenant-2-net)
openstack subnet create --allocation-pool start=172.21.2.10,end=172.21.2.200 --network tenant-2-net --subnet-range 172.21.2.0/24 tenant-2-subnet
openstack router add subnet router1 tenant-1-subnet
openstack router add subnet router1 tenant-2-subnet
NEUTRON_ROUTER_IP=$(openstack router show router1 | grep external_gateway_info | awk -F'|' '{ print $3 }' | jq -r '.external_fixed_ips[0].ip_address')
PRIVATE_SUBNET_CIDR=$(openstack subnet show private-subnet -c cidr -f value)
sudo ip route add 172.21.1.0/24 via $NEUTRON_ROUTER_IP dev br-ex
sudo ip route add 172.21.2.0/24 via $NEUTRON_ROUTER_IP dev br-ex
sudo ip route add $PRIVATE_SUBNET_CIDR via $NEUTRON_ROUTER_IP dev br-ex
CIRROS_IMAGE=$(openstack image list --sort name:desc | grep -m 1 cirros | awk '{print $2}')
openstack keypair create --public-key /scripts/webservers/webserver_ssh_key.pub webserver_ssh_key
openstack server create --key-name webserver_ssh_key --image $CIRROS_IMAGE --flavor 1 --nic net-id=$TENANT_NET_1_ID webserver1
openstack server create --key-name webserver_ssh_key --image $CIRROS_IMAGE --flavor 1 --nic net-id=$TENANT_NET_2_ID webserver2
wait_for_nova_active "webserver1"
wait_for_nova_active "webserver2"
echo "Instances booted"
IP1=$(openstack server show -c addresses -f value webserver1 | awk 'BEGIN {RS=";"}{match($0, /tenant-1-net=(.*)/, arr); printf "%s", arr[1]}'|tr -d '\n')
IP2=$(openstack server show -c addresses -f value webserver2 | awk 'BEGIN {RS=";"}{match($0, /tenant-2-net=(.*)/, arr); printf "%s", arr[1]}'|tr -d '\n')
ssh-keygen -R ${IP1}
ssh-keygen -R ${IP2}
# Keep trying to copy the script until sshd is up
until scp -i /scripts/webservers/webserver_ssh_key -o StrictHostKeyChecking=no /scripts/newcountingwebserver.sh cirros@${IP1}:webserver.sh
do
sleep 1
done
until scp -i /scripts/webservers/webserver_ssh_key -o StrictHostKeyChecking=no /scripts/newcountingwebserver.sh cirros@${IP2}:webserver.sh
do
sleep 1
done
ssh -i /scripts/webservers/webserver_ssh_key -o StrictHostKeyChecking=no cirros@${IP1} chmod 700 webserver.sh
ssh -i /scripts/webservers/webserver_ssh_key -o StrictHostKeyChecking=no cirros@${IP2} chmod 700 webserver.sh
ssh -o UserKnownHostsFile=/dev/null -i /scripts/webservers/webserver_ssh_key -o StrictHostKeyChecking=no -q cirros@${IP1} "screen -d -m sh webserver.sh"
ssh -o UserKnownHostsFile=/dev/null -i /scripts/webservers/webserver_ssh_key -o StrictHostKeyChecking=no -q cirros@${IP2} "screen -d -m sh webserver.sh"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment