File: oci-poc-openstack-provisionning

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 (213 lines) | stat: -rwxr-xr-x 11,096 bytes parent folder | download | duplicates (4)
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
#!/bin/sh

set -e
set -x

if ! [ -e /root/oci-openrc ] ; then
	echo "Cloud not find /root/oci-openrc"
	exit 1
fi

. /root/oci-openrc

echo "===> Discovering compute hosts..."
su nova -s /bin/sh -c "nova-manage cell_v2 discover_hosts"

echo "===> Listing compute hosts..."
openstack hypervisor list

echo "===> Uploading Debian image..."
DEB_IMAGE_FILE=$(ls debian-*-amd64.qcow2)
if [ -z "${DEB_IMAGE_FILE}" ] ; then
	echo "Please upload a debian Qcow2 image in /root/debian-*-amd64.qcow2"
	exit 1
fi
UPLOADED_IMAGE=$(openstack image list -f value -c Name 2>/dev/null)

if [ "${DEB_IMAGE_FILE}" != "${UPLOADED_IMAGE}" ] ; then
	openstack image create \
	--container-format bare --disk-format qcow2 \
	--file ${DEB_IMAGE_FILE} \
	--public \
	${DEB_IMAGE_FILE}
fi

create_flavor_if_not_exist () {
	local FLAVOR_NAME FLAVOR_RAM FLAVOR_DISK FLAVOR_VCPU
	FLAVOR_NAME=${1}
	FLAVOR_RAM=${2}
	FLAVOR_DISK=${3}
	FLAVOR_VCPU=${4}
	FLAVOR_ID=$(openstack flavor list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='${FLAVOR_NAME}'" 2>/dev/null | cut -d , -f 1)
	if [ -z "${FLAVOR_ID}" ] ; then
		openstack flavor create --ram ${FLAVOR_NAME} --disk ${FLAVOR_RAM} --vcpus ${FLAVOR_VCPU} ${FLAVOR_NAME}
	fi
}

echo "===> Creating flavors..."
create_flavor_if_not_exist demo-flavor 2048 5 1
create_flavor_if_not_exist cpu1-ram3-disk10 3072 10 1
create_flavor_if_not_exist cpu1-ram3-disk20 3072 20 1
create_flavor_if_not_exist cpu1-ram6-disk10 6144 10 1
create_flavor_if_not_exist cpu1-ram6-disk20 6144 20 1

echo "===> Setting-up rating..."
HASHMAP_ENABLED=$(cloudkitty module list -f csv | q -H -d , "SELECT Enabled FROM - WHERE Module='hashmap'")
if [ "${HASHMAP_ENABLED}" != "True" ] ; then
	cloudkitty module enable hashmap
	cloudkitty module set priority hashmap 100
fi
HASHMAP_GROUP_ID=$(cloudkitty hashmap group list -f csv | q -H -d , "SELECT * FROM - WHERE Name='instance_uptime_flavor'" 2>/dev/null | cut -d , -f 2)
if [ -z "${HASHMAP_GROUP_ID}" ] ; then
	cloudkitty hashmap group create instance_uptime_flavor
	HASHMAP_GROUP_ID=$(cloudkitty hashmap group list -f csv | q -H -d , "SELECT * FROM - WHERE Name='instance_uptime_flavor'" 2>/dev/null | cut -d , -f 2)
fi

COMPUTE_SERVICE_ID=$(cloudkitty hashmap service list -f csv | q -H -d , "SELECT * FROM - WHERE Name='compute'" 2>/dev/null | cut -d , -f 2)
if [ -z "${COMPUTE_SERVICE_ID}" ] ; then
	cloudkitty hashmap service create compute
	COMPUTE_SERVICE_ID=$(cloudkitty hashmap service list -f csv | q -H -d , "SELECT * FROM - WHERE Name='compute'" 2>/dev/null | cut -d , -f 2)
fi

FIELD_ID=$(cloudkitty hashmap field list -f csv ${COMPUTE_SERVICE_ID} | q -H -d , "SELECT * FROM - WHERE Name='flavor'" 2>/dev/null | cut -d , -f 2)
if [ -z "${FIELD_ID}" ] ; then
	cloudkitty hashmap field create ${COMPUTE_SERVICE_ID} flavor
	FIELD_ID=$(cloudkitty hashmap field list -f csv ${COMPUTE_SERVICE_ID} | q -H -d , "SELECT * FROM - WHERE Name='flavor'" 2>/dev/null | cut -d , -f 2)
fi

create_flavor_mapping_if_not_exists () {
	FLAVOR_NAME=${1}
	FLAVOR_PRICE=${2}
	MAPPING_ID=$(cloudkitty hashmap mapping list --field-id ${FIELD_ID}  -g ${HASHMAP_GROUP_ID} -f csv | q -H -d , "SELECT * FROM - WHERE Value='${FLAVOR_NAME}'" 2>/dev/null | cut -d , -f 1)
	if [ -z "${MAPPING_ID}" ] ; then
		cloudkitty hashmap mapping create --field-id ${FIELD_ID} --value ${FLAVOR_NAME} -t flat -g ${HASHMAP_GROUP_ID} ${FLAVOR_PRICE}
	fi
}
create_flavor_mapping_if_not_exists demo-flavor 0.03
create_flavor_mapping_if_not_exists cpu1-ram3-disk10 0.04
create_flavor_mapping_if_not_exists cpu1-ram3-disk20 0.05
create_flavor_mapping_if_not_exists cpu1-ram6-disk10 0.07
create_flavor_mapping_if_not_exists cpu1-ram6-disk20 0.08

# Add role rating to the admin user
openstack role add --user admin --project admin rating

echo "===> Fixing-up keypair ..."
chmod 600 .ssh/id_rsa
chmod 600 .ssh/id_rsa.pub
KEYPAIR_NAME=$(openstack keypair list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='demo-keypair'" 2>/dev/null | cut -d , -f 1)
if [ -z "${KEYPAIR_NAME}" ] ; then
	openstack keypair create --public-key ~/.ssh/id_rsa.pub demo-keypair
fi

echo "===> Fixing-up networking ..."
# Create external network
EXT_NET_NETWORK_ID=$(openstack network list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='ext-net'" 2>/dev/null | cut -d , -f 1)
if [ -z "${EXT_NET_NETWORK_ID}" ] ; then
	openstack network create --external --provider-physical-network external --provider-network-type flat ext-net
	EXT_NET_NETWORK_ID=$(openstack network list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='ext-net'" 2>/dev/null | cut -d , -f 1)
fi
# Create external subnet
EXT_NET_SUBNET_ID=$(openstack subnet list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='ext-subnet'" 2>/dev/null | cut -d , -f 1)
if [ -z "${EXT_NET_SUBNET_ID}" ] ; then
	openstack subnet create --network ext-net \
		--allocation-pool start=192.168.105.100,end=192.168.105.199 \
		--dns-nameserver 84.16.67.69 \
		--gateway 192.168.105.1 \
		--subnet-range 192.168.105.0/24 \
		--no-dhcp ext-subnet
	EXT_NET_SUBNET_ID=$(openstack subnet list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='ext-subnet'" 2>/dev/null | cut -d , -f 1)
fi

# Create internal network
DEMO_NET_NETWORK_ID=$(openstack network list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='demo-net'" 2>/dev/null | cut -d , -f 1)
if [ -z "${DEMO_NET_NETWORK_ID}" ] ; then
	openstack network create --share demo-net
	DEMO_NET_NETWORK_ID=$(openstack network list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='demo-net'" 2>/dev/null | cut -d , -f 1)
fi

DEMO_NET_SUBNET_ID=$(openstack subnet list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='demo-subnet'" 2>/dev/null | cut -d , -f 1)
if [ -z "${DEMO_NET_SUBNET_ID}" ] ; then
	openstack subnet create --network demo-net --subnet-range 192.168.200.0/24 --dns-nameserver 84.16.67.69 demo-subnet
	DEMO_NET_SUBNET_ID=$(openstack subnet list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='demo-subnet'" 2>/dev/null | cut -d , -f 1)
fi

# Create router, add it to demo-subnet and set it as gateway
ROUTER_ID=$(openstack router list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='demo-router'" 2>/dev/null | cut -d , -f 1)
if [ -z "${}" ] ; then
	openstack router create demo-router
	ROUTER_ID=$(openstack router list -f csv 2>/dev/null | q -H -d , "SELECT * FROM - WHERE Name='demo-router'" 2>/dev/null | cut -d , -f 1)
fi

# Attach demo-subnet to demo-router
SUBNET_ID_IN_ROUTER=$(openstack router show demo-router -f value -c interfaces_info 2>/dev/null | jq --raw-output '.[]["subnet_id"]')
if [ -z "${SUBNET_ID_IN_ROUTER}" ] ; then
	openstack router add subnet demo-router demo-subnet
fi

ROUTER_GATEWAY_INFO=$(openstack router show demo-router -f value -c external_gateway_info 2>/dev/null)
#ROUTER_GATEWAY_NETWORK_ID=$(openstack router show demo-router -f value -c external_gateway_info 2>/dev/null | jq --raw-output '.["network_id"]')
if [ "${ROUTER_GATEWAY_INFO}" = "None" ] ; then
	openstack router set demo-router --external-gateway ext-net
fi

# Create a few floating IPs
FLOATING_COUNT=$(openstack floating ip list -f csv 2>/dev/null | q -H -d , "SELECT COUNT(ID) FROM -" 2>/dev/null)
if [ -z "${FLOATING_COUNT}" -o "${FLOATING_COUNT}" -lt 5 ] ; then
	openstack floating ip create ext-net
	openstack floating ip create ext-net
	openstack floating ip create ext-net
	openstack floating ip create ext-net
	openstack floating ip create ext-net
fi

echo "===> Setting-up security group ..."
# Add rules to the admin's security group to allow ping and ssh
SECURITY_GROUP=$(openstack security group list --project admin --format=csv 2>/dev/null | q -d , -H 'SELECT ID FROM -')
SSH_RULE_ID=$(openstack security group rule list -f csv ${SECURITY_GROUP} 2>/dev/null | q -H -d , "SELECT ID FROM - WHERE \`IP Protocol\`='tcp' AND \`Port Range\`='22:22' AND \`IP Range\`='0.0.0.0/0'")
if [ -z "${SSH_RULE_ID}" ] ; then
	openstack security group rule create --ingress --protocol tcp --dst-port 22 ${SECURITY_GROUP}
fi
ICPM_RULE_ID=$(openstack security group rule list -f csv ${SECURITY_GROUP} 2>/dev/null | q -H -d , "SELECT ID FROM - WHERE \`IP Protocol\`='icmp' AND \`IP Range\`='0.0.0.0/0'")
if [ -z "${ICMP_RULE_ID}" ] ; then
	openstack security group rule create --protocol icmp --ingress ${SECURITY_GROUP}
fi

echo "===> Setting-up Octavia ..."
apt-get install -y openstack-pkg-tools
oci-octavia-amphora-secgroups-sshkey-lbrole-and-network
oci-octavia-certs

# Fix the new values for Octavia in the cluster's value
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no oci-puppet-master.infomaniak.ch "apt-get install -y openstack-cluster-installer-cli"
pkgos_inifile get /etc/octavia/octavia.conf controller_worker amp_boot_network_list
OCTAVIA_NET=$RET
pkgos_inifile get /etc/octavia/octavia.conf controller_worker amp_secgroup_list
OCTAVIA_SECGROUP=$RET
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no oci-puppet-master.infomaniak.ch "OCI_API_URL=http://localhost/oci/api.php? ocicli cluster-set z --amp-boot-network-list ${OCTAVIA_NET} --amp-secgroup-list ${OCTAVIA_SECGROUP}"

# Copy the Octavia certs and ssh keys to the other controllers.
# Set the network boot and security group list as well
ME=$(hostname --fqdn)
for i in $(grep controller /etc/hosts | grep -v ${ME} | awk '{print $2}') ; do
	rsync -e 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' -avz --delete /etc/octavia/.ssh/ root@${i}:/etc/octavia/.ssh/ ;
	rsync -e 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' -avz --delete /etc/octavia/certs/ root@${i}:/etc/octavia/certs/ ;
	ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@${i} "apt-get install -y openstack-pkg-tools"
	ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@${i} ". /usr/share/openstack-pkg-tools/pkgos_func ; pkgos_inifile set /etc/octavia/octavia.conf controller_worker amp_secgroup_list ${OCTAVIA_SECGROUP} ; pkgos_inifile set /etc/octavia/octavia.conf controller_worker amp_boot_network_list ${OCTAVIA_NET}"
	ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@${i} "/etc/init.d/octavia-api restart"
	ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@${i} "/etc/init.d/octavia-health-manager restart"
	ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@${i} "/etc/init.d/octavia-housekeeping restart"
	ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@${i} "/etc/init.d/octavia-worker restart"
done

# Create the load-balancer_admin role
LB_ADMIN_ROLE_ID=$(openstack role list -f csv 2>/dev/null | q -H -d , "SELECT ID FROM - WHERE Name='load-balancer_admin'")
if [ -z "${LB_ADMIN_ROLE_ID}" ] ; then
	openstack role create load-balancer_admin
fi

# Assign it to admin
LB_ADMIN_ROLE_ASSIGNED=$(openstack role assignment list --user admin --project admin --names -f csv 2>/dev/null | q -H -d , "SELECT Role FROM - WHERE Role='load-balancer_admin'")
if [ -z "${LB_ADMIN_ROLE_ASSIGNED}" ] ; then
	openstack role add --project admin --user admin load-balancer_admin
fi