diff --git a/CommonServerSetup.sh b/CommonServerSetup.sh index 3115070..9d6c7b6 100644 --- a/CommonServerSetup.sh +++ b/CommonServerSetup.sh @@ -36,6 +36,9 @@ apt-get -y install python3-openstackclient # easy modification of .ini configuration files apt-get -y install crudini +# setup bridge networking for provider networks +apt-get -y install bridge-utils + cat >> admin-openrc << EOF diff --git a/ExternalNetwork.sh b/ExternalNetwork.sh deleted file mode 100644 index 93aa77b..0000000 --- a/ExternalNetwork.sh +++ /dev/null @@ -1,55 +0,0 @@ -# -# -# associate elastic IP subnet with the controller node via the Packet Web GUI -# -export OS_USERNAME=admin -export OS_PASSWORD=ADMIN_PASS -export OS_PROJECT_NAME=admin -export OS_USER_DOMAIN_NAME=Default -export OS_PROJECT_DOMAIN_NAME=Default -export OS_AUTH_URL=http://controller:5000/v3 -export OS_IDENTITY_API_VERSION=3 - -#"147.75.38.128/25" -PROVIDER_CIDR=$1 - -if [ -z $PROVIDER_CIDR ]; then - echo "usage: $0 PROVIDER_CIDR" - exit -1 -fi - -export PROVIDER_ID=`openstack network create --share \ - --provider-physical-network provider \ - --provider-network-type flat provider \ - --external \ - -f value -c id` - -echo "Network ID is '${PROVIDER_ID}'" - -export SUBNET_ID=`openstack subnet create \ - --network ${PROVIDER_ID} \ - --subnet-range $PROVIDER_CIDR \ - $PROVIDER_CIDR -f value -c id` - -echo "Subnet ID is '${SUBNET_ID}'" - -# assign this gateway to all routers -for ROUTER_ID in `openstack router list -f value -c ID` -do -openstack router set --external-gateway $PROVIDER_ID $ROUTER_ID -done - -# assign this subnet to the provider bridge -PROVIDER_CIDR_MSV="$(echo $PROVIDER_CIDR | cut -d/ -f1 | cut -d. -f1-3)" -#echo $PROVIDER_CIDR_MSV -PROVIDER_CIDR_LSV="$(echo $PROVIDER_CIDR | cut -d/ -f1 | cut -d. -f4)" -#echo $PROVIDER_CIDR_LSV -PROVIDER_CIDR_LSV=$(( $PROVIDER_CIDR_LSV + 1 )) -#echo $PROVIDER_CIDR_LSV -PROVIDER_CIDR_SIZE="$(echo $PROVIDER_CIDR | cut -d/ -f2)" -#echo $PROVIDER_CIDR_SIZE - -PROVIDER_IP=${PROVIDER_CIDR_MSV}.${PROVIDER_CIDR_LSV}/${PROVIDER_CIDR_SIZE} -#PROVIDER_BRIDGE=`brctl show | grep bond0 | cut -f1` -#ip a a ${PROVIDER_IP} dev $PROVIDER_BRIDGE -ip a a ${PROVIDER_IP} dev lo:0 diff --git a/OpenStack.tf b/OpenStack.tf index a4c7a3f..337db6b 100644 --- a/OpenStack.tf +++ b/OpenStack.tf @@ -66,7 +66,8 @@ resource "null_resource" "controller-nova" { } resource "null_resource" "controller-neutron" { - depends_on = [null_resource.controller-nova] + depends_on = [null_resource.controller-nova, + null_resource.enable-br-public] connection { host = packet_device.controller.access_public_ipv4 diff --git a/ProviderNetwork.tf b/ProviderNetwork.tf index 8c8a392..0d4955d 100644 --- a/ProviderNetwork.tf +++ b/ProviderNetwork.tf @@ -37,6 +37,38 @@ resource "packet_ip_attachment" "controller_public_ipv6" { } +data "template_file" "network-interfaces-br-public" { + + template = file("templates/network-interfaces-br-public") + + vars = { + provider_ipv4_cidr = packet_ip_attachment.controller_private_ipv4.cidr_notation + provider_ipv6_cidr = packet_ip_attachment.controller_public_ipv6.cidr_notation + } +} + +resource "null_resource" "enable-br-public" { + depends_on = [null_resource.controller-keystone] + + connection { + host = packet_device.controller.access_public_ipv4 + private_key = file(var.cloud_ssh_key_path) + } + + provisioner "file" { + content = data.template_file.network-interfaces-br-public.rendered + destination = "network-interfaces-br-public" + } + +# controller-keystone is required for the bridge-utils package to ifup br-public + provisioner "remote-exec" { + inline = [ + "cat network-interfaces-br-public >> /etc/network/interfaces", + "ifup br-public", + ] + } +} + data "template_file" "provider-networks" { template = file("templates/ProviderNetworks.sh") diff --git a/templates/ProviderNetworks.sh b/templates/ProviderNetworks.sh index 0b50fff..52c23df 100644 --- a/templates/ProviderNetworks.sh +++ b/templates/ProviderNetworks.sh @@ -1,7 +1,7 @@ # -# # associate elastic IP subnet with the controller node via the Packet Web GUI # + export OS_USERNAME=admin export OS_PASSWORD=ADMIN_PASS export OS_PROJECT_NAME=admin @@ -33,3 +33,9 @@ for ROUTER_ID in `openstack router list -f value -c ID` do openstack router set --external-gateway $PROVIDER_4_ID $ROUTER_ID done + +# +# assign the subnet to an interface attached to the external bridge +# +brctl addbr br-public +ip a add $PROVIDER_4_CIDR dev br-public diff --git a/templates/network-interfaces-br-public b/templates/network-interfaces-br-public new file mode 100644 index 0000000..313fda1 --- /dev/null +++ b/templates/network-interfaces-br-public @@ -0,0 +1,5 @@ + +auto br-public +iface br-public inet static + address ${provider_ipv4_cidr} + bridge_ports none