summaryrefslogtreecommitdiff
path: root/files/network.sh
blob: 22b0623f40170187d4f639e3b658988dd8d05b00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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