File: oci-poc-provision-network

package info (click to toggle)
openstack-cluster-installer 43.0.22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,544 kB
  • sloc: php: 19,169; sh: 18,137; ruby: 75; makefile: 31; xml: 8
file content (221 lines) | stat: -rwxr-xr-x 11,697 bytes parent folder | download | duplicates (2)
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