summaryrefslogtreecommitdiff
path: root/files/network.sh
diff options
context:
space:
mode:
Diffstat (limited to 'files/network.sh')
-rwxr-xr-xfiles/network.sh69
1 files changed, 69 insertions, 0 deletions
diff --git a/files/network.sh b/files/network.sh
new file mode 100755
index 0000000..22b0623
--- /dev/null
+++ b/files/network.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+router_name="${1}"
+private_network_name="${2}"
+private_network_cidr="${3}"
+ext_network_name="${4}"
+dns_servers="${5}"
+
+if [ "${router_name}" == "" ]; then
+ echo "No router name supplied." >&2
+ exit 1
+elif [ "${private_network_name}" == "" ]; then
+ echo "No private network name supplied." >&2
+ exit 1
+elif [ "${private_network_cidr}" == "" ]; then
+ echo "No private network CIDR supplied." >&2
+ exit 1
+elif [ "${ext_network_name}" == "" ]; then
+ echo "No external network name supplied." >&2
+ exit 1
+elif [ "${dns_servers}" == "" ]; then
+ echo "No dns servers supplied." >&2
+ exit 1
+fi
+
+ext_network_id=$(openstack network show -f shell -c id "${ext_network_name}" 2>/dev/null | awk -F= '{print $2;}' | sed -e 's/\"//g')
+if [ "${ext_network_id}" == "" ]; then
+ echo "No ${ext_network_name} network exists." >&2
+ exit 1
+fi
+
+private_network_id=$(openstack network show -f shell -c id "${private_network_name}" 2>/dev/null | awk -F= '{print $2;}' |sed -e 's/\"//g')
+if [ "${private_network_id}" == "" ]; then
+ openstack network create "${private_network_name}" >/dev/null
+ openstack subnet create \
+ "${private_network_name}" \
+ --network "${private_network_name}" \
+ --subnet-range "${private_network_cidr}" \
+ --dns-nameserver $(echo ${dns_servers} | awk '{print $1;}') \
+ --dns-nameserver $(echo ${dns_servers} | awk '{print $2;}') \
+ --dns-nameserver $(echo ${dns_servers} | awk '{print $3;}') \
+ >/dev/null
+ private_network_id=$(openstack network show -f shell -c id "${private_network_name}" 2>/dev/null | awk -F= '{print $2;}' |sed -e 's/\"//g')
+ if [ "${private_network_id}" == "" ]; then
+ echo "Cannot retrieve private network ID after creation." >&2
+ exit 1
+ fi
+fi
+
+router_id=$(openstack router show -f shell -c id "${router_name}" 2>/dev/null | awk -F= '{print $2;}' | sed -e 's/\"//g')
+if [ "${router_id}" == "" ]; then
+ openstack router create "${router_name}" >/dev/null
+ router_id=$(openstack router show -f shell -c id "${router_name}" 2>/dev/null | awk -F= '{print $2;}' | sed -e 's/\"//g')
+ if [ "${router_id}" == "" ]; then
+ echo "Cannot retrieve router ID after creation." >&2
+ exit 1
+ fi
+fi
+
+gateway_info=$(openstack router show -f shell -c external_gateway_info "${router_name}" 2>/dev/null | grep -F 'external_fixed_ips')
+if [ "${gateway_info}" == "" ]; then
+ openstack router set "${router_id}" --external-gateway "${ext_network_id}" >/dev/null
+fi
+
+openstack router add subnet "${router_id}" "${private_network_name}" >/dev/null 2>&1 || true
+
+echo -n "${private_network_id}"
+
+exit 0