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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
|
#!/bin/sh
set -e
#set -x
. /root/oci-openrc
DEBIAN_RELEASE=$(lsb_release -c -s)
DEBIAN_RELEASE_NUM=$(lsb_release -r -s)
if ! [ -r /etc/oci-poc/oci-poc.conf ] ; then
echo "Cannot load /etc/oci-poc/oci-poc.conf."
exit 1
fi
. /etc/oci-poc/oci-poc.conf
##################
### NETWORKING ###
##################
oci_poc_prov_cloud_provision_bgp_dynamic_routing () {
echo "===> Provisionning BGP networking"
echo "-> Create BGP peers"
if [ ""$(openstack bgp peer list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='leaf1'") = "leaf1" ] ; then
echo 'leaf1 already created'
else
openstack bgp peer create --peer-ip ${BGP_NET_LEAF1_PEER_IP} --remote-as ${BGP_NET_LEAF_1_REMOTE_AS} leaf1
fi
if [ ""$(openstack bgp peer list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='leaf2'") = "leaf2" ] ; then
echo 'leaf1 already created'
else
openstack bgp peer create --peer-ip ${BGP_NET_LEAF2_PEER_IP} --remote-as ${BGP_NET_LEAF_2_REMOTE_AS} leaf2
fi
echo "-> Create spearkers"
# First speaker is for IPv4, 2nd one is for v6
if [ ""$(openstack bgp speaker list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='speaker-leaf1'") = "speaker-leaf1" ] ; then
echo "speaker-leaf1 already created"
else
openstack bgp speaker create --local-as ${BGP_NET_SPEAKER_LOCAL_AS} --ip-version 6 --no-advertise-floating-ip-host-routes speaker-leaf1
fi
if [ ""$(openstack bgp speaker list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='speaker-leaf2'") = "speaker-leaf2" ] ; then
echo "speaker-leaf2 already created"
else
openstack bgp speaker create --local-as ${BGP_NET_SPEAKER_LOCAL_AS} --ip-version 4 --no-advertise-floating-ip-host-routes speaker-leaf2
fi
echo "-> Add peers to BGP spearker"
if [ ""$(openstack bgp speaker show speaker-leaf1 --format value -c peers) = "[]" ] ; then
echo "adding leaf1 as peer to speaker-leaf1"
openstack bgp speaker add peer speaker-leaf1 leaf1
else
echo "leaf1 already added as peer to speaker-leaf1"
fi
if [ ""$(openstack bgp speaker show speaker-leaf2 --format value -c peers) = "[]" ] ; then
echo "adding leaf2 as peer to speaker-leaf2"
openstack bgp speaker add peer speaker-leaf2 leaf2
else
echo "leaf2 already added as peer to speaker-leaf2"
fi
echo "-> Fetching BGP network agent ID for cl1-network-1"
BGP_AGENT_NODE_1=$(openstack network agent list --agent-type bgp --host cl1-network-1.infomaniak.ch --format value -c ID)
BGP_AGENT_NODE_2=$(openstack network agent list --agent-type bgp --host cl1-network-2.infomaniak.ch --format value -c ID)
echo "-> Adding spearker to BGP dragent of network node 1"
if [ ""$(openstack bgp dragent list --bgp-speaker speaker-leaf2 --format value -c Host 2>/dev/null) = "" ] ; then
openstack bgp dragent add speaker ${BGP_AGENT_NODE_1} speaker-leaf2 || true
fi
if [ ""$(openstack bgp dragent list --bgp-speaker speaker-leaf1 --format value -c Host 2>/dev/null) = "" ] ; then
openstack bgp dragent add speaker ${BGP_AGENT_NODE_2} speaker-leaf1 || true
fi
}
oci_poc_prov_cloud_create_networks_ext_net1 () {
echo "===> Creating networking for ext-net1 dual-stack, direct-attached to VMs"
echo "-> Creating address scopes"
if [ ""$(openstack address scope list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-bgp4'") = "ext-bgp4" ] ; then
echo "Address scope ext-bgp4 already exists."
else
openstack address scope create --ip-version 4 ext-bgp4
fi
if [ ""$(openstack address scope list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-bgp6'") = "ext-bgp6" ] ; then
echo "Address scope ext-bgp6 already exists."
else
openstack address scope create --ip-version 6 ext-bgp6
fi
echo "-> Creating the IPv4 transport subnet pool"
if [ ""$(openstack subnet pool list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='poolv4-provider1'") = "poolv4-provider1" ] ; then
echo "Subnetpool poolv4-provider1 already created"
else
openstack subnet pool create --pool-prefix ${BGP_NET_TRANSPORT_IPV4}.0/24 --address-scope ext-bgp4 --default-prefix-length 24 --max-prefix-length 24 --min-prefix-length 24 poolv4-provider1
fi
echo "-> Creating the IPv6 transport subnet pool"
if [ ""$(openstack subnet pool list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='poolv6-provider1'") = "poolv6-provider1" ] ; then
echo "Subnetpool poolv6-provider1 already created"
else
openstack subnet pool create --pool-prefix ${BGP_NET_TRANSPORT_IPV6}/64 --address-scope ext-bgp6 --default-prefix-length 64 --max-prefix-length 64 --min-prefix-length 64 poolv6-provider1
fi
echo "-> Creating the direct attach IPv4 subnet pool"
if [ ""$(openstack subnet pool list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='poolv4-shared1'") = "poolv4-shared1" ] ; then
echo "Subnetpool poolv4-shared1 already created"
else
openstack subnet pool create --pool-prefix ${BGP_NET_SHARED_IPV4}.0/24 --address-scope ext-bgp4 --default-prefix-length 24 --max-prefix-length 24 --min-prefix-length 24 poolv4-shared1
fi
echo "-> Creating the direct attach IPv6 subnet pool"
if [ ""$(openstack subnet pool list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='poolv6-shared1'") = "poolv6-shared1" ] ; then
echo "Subnetpool poolv6-shared1 already created"
else
openstack subnet pool create --pool-prefix ${BGP_NET_SHARED_IPV6}/56 --address-scope ext-bgp6 --default-prefix-length 64 --max-prefix-length 64 --min-prefix-length 64 poolv6-shared1
fi
echo "-> Creating the ext-provider1 network"
if [ ""$(openstack network list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-provider1'") = "ext-provider1" ] ; then
echo "ext-provider1 already created"
else
openstack network create --description "Transport network for public ranges" --external --provider-network-type vlan --provider-physical-network external --provider-segment ${BGP_NET_TRANSPORT_VLAN} ext-provider1
fi
echo "-> Creating the ext-provider1-v4subnet1"
if [ ""$(openstack subnet list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-provider1-v4subnet1'") = "ext-provider1-v4subnet1" ] ; then
echo "ext-provider1-v4subnet1 already created"
else
openstack subnet create --subnet-pool poolv4-provider1 --subnet-range ${BGP_NET_TRANSPORT_IPV4}.0/24 --gateway ${BGP_NET_TRANSPORT_IPV4}.1 --network ext-provider1 --allocation-pool start=${BGP_NET_TRANSPORT_IPV4}.2,end=${BGP_NET_TRANSPORT_IPV4}.252 ext-provider1-v4subnet1
fi
echo "-> Creating the ext-provider1-v6subnet1"
if [ ""$(openstack subnet list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-provider1-v6subnet1'") = "ext-provider1-v6subnet1" ] ; then
echo "ext-provider1-v6subnet1 already created"
else
openstack subnet create --ip-version 6 --subnet-pool poolv6-provider1 --subnet-range ${BGP_NET_TRANSPORT_IPV6}/64 --gateway ${BGP_NET_TRANSPORT_IPV6}1 --network ext-provider1 --allocation-pool start=${BGP_NET_TRANSPORT_IPV6}4,end=${BGP_NET_TRANSPORT_IPV6}ffff:ffff:ffff --ipv6-ra-mode dhcpv6-stateful --ipv6-address-mode dhcpv6-stateful ext-provider1-v6subnet1
fi
echo "-> Creating ext-net1"
if [ ""$(openstack network list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-net1'") = "ext-net1" ] ; then
echo "ext-net1 already created"
else
openstack network create --share --description "Public shared network" ext-net1
fi
echo "-> Creating ext-net1-v4subnet1"
if [ ""$(openstack subnet list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-net1-v4subnet1'") = "ext-net1-v4subnet1" ] ; then
echo "ext-net1-v4subnet1 already created"
else
openstack subnet create --description "Public shared IPv4 subnet" --subnet-pool poolv4-shared1 --subnet-range ${BGP_NET_SHARED_IPV4}.0/24 --gateway auto --network ext-net1 --allocation-pool start=${BGP_NET_SHARED_IPV4}.2,end=${BGP_NET_SHARED_IPV4}.254 --dns-nameserver ${PRIMARY_DNS} --dns-nameserver ${SECONDA_DNS} ext-net1-v4subnet1
fi
echo "-> Creating ext-net1-v6subnet1"
if [ ""$(openstack subnet list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-net1-v6subnet1'") = "ext-net1-v6subnet1" ] ; then
echo "ext-net1-v6subnet1 already created"
else
openstack subnet create --ip-version 6 --description "Public shared IPv6 subnet" --subnet-pool poolv6-shared1 --subnet-range ${BGP_NET_SHARED_IPV6}/64 --gateway ${BGP_NET_SHARED_IPV6}1 --network ext-net1 --dns-nameserver ${PRIMARY_DNS6} --dns-nameserver ${SECONDA_DNS6} --ipv6-ra-mode dhcpv6-stateful --ipv6-address-mode dhcpv6-stateful ext-net1-v6subnet1
fi
echo "-> Creating router ext-net1-router1"
if [ ""$(openstack router list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-net1-router1'") = "ext-net1-router1" ] ; then
echo "Router ext-net1-router1 already exists"
else
openstack router create --description "Router for public shared network" --ha ext-net1-router1
fi
echo "-> Setting ext-net1-router1 external gateway"
if [ ""$(openstack router show ext-net1-router1 --format json -c external_gateway_info | jq '.["external_gateway_info"]' -r) = "null" ] ; then
openstack router set --external-gateway ext-provider1 ext-net1-router1
else
echo "External gateway ext-provider1 already set in ext-net1-router1"
fi
echo "-> Adding ext-net1-v4subnet1 and ext-net1-v6subnet1 subnets to ext-net1-router1"
# The test below does not work. Not sure how to get it fixed.
# In the mean time, lets just do || true, always.
# ROUTER_SHOW=$(openstack router show ext-net1-router1 --format json -c interfaces_info | jq '.["interfaces_info"]' -r)
# if [ "${ROUTER_SHOW}" = '[]' ] ; then
# openstack router add subnet ext-net1-router1 ext-net1-v4subnet1
# openstack router add subnet ext-net1-router1 ext-net1-v6subnet1
# else
# echo "Subnet already there"
# fi
openstack router add subnet ext-net1-router1 ext-net1-v4subnet1 || true
openstack router add subnet ext-net1-router1 ext-net1-v6subnet1 || true
echo "-> Adding ext-provider1 to speaker-leaf1"
if [ ""$(openstack bgp speaker show speaker-leaf1 --format value -c networks) = "[]" ] ; then
openstack bgp speaker add network speaker-leaf1 ext-provider1
else
echo "Network ext-provider1 already added to speaker-leaf1"
fi
echo "-> Adding ext-provider1 to speaker-leaf2"
if [ ""$(openstack bgp speaker show speaker-leaf2 --format value -c networks) = "[]" ] ; then
openstack bgp speaker add network speaker-leaf2 ext-provider1
else
echo "Network ext-provider1 already added to speaker-leaf2"
fi
}
oci_poc_prov_cloud_create_networks_floating_ips () {
echo "===> Creating networking for ext-floating1 IPv4 only."
echo "-> Creating the ext-floating1 network"
if [ ""$(openstack network list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-floating1'") = "ext-floating1" ] ; then
echo "ext-floating1 already created"
else
openstack network create --description "Floating IPs provider network" --external --provider-network-type vlan --provider-physical-network external --provider-segment ${FLOATING_IP_SUBNET_VLAN} ext-floating1
fi
echo "-> Creating the ext-floating1-v4subnet network"
if [ ""$(openstack subnet list --format csv | q -H -d, "SELECT Name FROM - WHERE Name='ext-floating1-v4subnet'") = "ext-floating1-v4subnet" ] ; then
echo "ext-floating1-v4subnet already created"
else
openstack subnet create --subnet-range ${FLOATING_IP_SUBNET_PREFIX}.0/24 --gateway auto --network ext-floating1 --allocation-pool start=${FLOATING_IP_SUBNET_PREFIX}.2,end=${FLOATING_IP_SUBNET_PREFIX}.252 --dns-nameserver ${PRIMARY_DNS} --dns-nameserver ${SECONDA_DNS} ext-floating1-v4subnet1
fi
}
oci_poc_prov_cloud_provision_bgp_dynamic_routing
oci_poc_prov_cloud_create_networks_ext_net1
oci_poc_prov_cloud_create_networks_floating_ips
exit 0
|