File: oci-poc-provision-vm

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 (147 lines) | stat: -rwxr-xr-x 4,990 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
#!/bin/sh

set -e
#set -x

. /root/oci-openrc

DEBIAN_RELEASE=$(lsb_release -c -s)
DEBIAN_RELEASE_NUM=$(lsb_release -r -s)
DEBIAN_ARCH=$(dpkg-architecture -q DEB_BUILD_ARCH)

#########################
### Enable nova hosts ###
#########################
oci_poc_prov_cloud_enable_all_compute_hosts () {
	echo "===> Enabling compute"
	echo "---> Discovering compute hosts"
	su nova -s /bin/sh -c 'nova-manage cell_v2 discover_hosts'

	for host in $(openstack compute service list --format csv | q -H -d, "SELECT Host FROM - WHERE Binary='nova-compute'") ; do
		echo "---> Enabling $host"
		openstack compute service set --enable $host nova-compute
	done
}

oci_poc_prov_cloud_security_group () {
	echo "===> Settting-up default security group to allow ICMP and SSH"
	# Add rules to the admin's security group to allow ping and ssh
	echo "---> Fetching security group ID"
	SECURITY_GROUP=$(openstack security group list --project admin --format=csv | q -d , -H 'SELECT ID FROM -')
	echo "---> Checking if SSH rule exists"
	if ! openstack security group rule list --ingress --protocol tcp --format value -c 'Port Range' ${SECURITY_GROUP} | grep -q -E "^22:22\$" ; then
		echo "---> Creating SSH rule"
		openstack security group rule create --ingress --protocol tcp --dst-port 22 ${SECURITY_GROUP}
	fi
	echo "---> Checking if ICMP rule exists"
	ICMP_RULE_ID=$(openstack security group rule list --ingress --protocol icmp --format value -c ID ${SECURITY_GROUP})
	if [ -z "${ICMP_RULE_ID}" ] ; then
		echo "---> Creating ICMP rule"
		openstack security group rule create --protocol icmp --ingress ${SECURITY_GROUP}
	fi
}

###############
### SSH KEY ###
###############
oci_poc_prov_cloud_keypair () {
	echo "===> Creating keypair"
	echo "---> Checking if keypair exists"
	if ! openstack keypair list --format value -c Name | grep -q -E "^demo-keypair\$" ; then
		echo "---> Creating keypair"
		openstack keypair create --public-key ~/.ssh/id_rsa.pub demo-keypair
	fi
}

###############
### FLAVORS ###
###############
oci_poc_prov_cloud_flavors () {
	echo "===> Creating flavors"
	for F in cpu1-ram2-disk5 cpu2-ram6-disk20 cpu4-ram12-disk40 ; do
		echo "---> Checking for $F"
		if ! openstack flavor list --format value -c Name | grep -q -E "^${F}\$" ; then
			CPU=$(echo ${F} | cut -d- -f1 | sed s/cpu//)
			RAM=$(( $(echo ${F} | cut -d- -f2 | sed s/ram//) * 1024 ))
			DISK=$(echo ${F} | cut -d- -f3 | sed s/disk//)
			echo "---> Creating $F"
			openstack flavor create --ram ${RAM} --disk ${DISK} --vcpus ${CPU} ${F}
		fi
	done
}

###################
### Spawn 2 VMs ###
###################
oci_poc_prov_cloud_create_server () {
	local SERVER_NAME
	SERVER_NAME=$1
	echo "===> Spawning server ${SERVER_NAME}"
	echo "---> Searching Debian image"
	OPENSTACK_IMAGE=$(openstack image list --property os_distro=debian --format value -c Name --public | head -n 1)

	echo "---> Checking if server exists"
	SERVER_ID=$(openstack server show ${SERVER_NAME} --format value -c id || true)
	if [ -z "${SERVER_ID}" ] ; then
		echo "---> Spawning server"
		openstack server create --image ${OPENSTACK_IMAGE} --nic net-id=ext-net1 --key-name demo-keypair --flavor cpu1-ram2-disk5 ${SERVER_NAME}
	else
		echo "---> Already spawned"
	fi
}

oci_poc_prov_cloud_wait_for_server_status () {
	local SERVER_NAME SERVER_STATUS TIMEOUT
	SERVER_NAME=$1
	SERVER_TARGET_STATUS=$2
	TIMEOUT=$3

	START_TIMESTAMP=$(date +%s)

	echo -n "Waiting for ${SERVER_NAME} status ${SERVER_TARGET_STATUS}:"
	SERVER_STATUS=$(openstack server show ${SERVER_NAME} --format value -c status)
	while [ "${SERVER_STATUS}" != "${SERVER_TARGET_STATUS}" ] ; do
		if [ "${STATUS}" = "ERROR" ] ; then
			echo "Server went into error: exiting."
			exit 1
		fi
		sleep 2
		CUR__TIMESTAMP=$(date +%s)
		RUNTIME=$(( ${START_TIMESTAMP} - ${CUR__TIMESTAMP} ))
		if [ ${RUNTIME} -gt ${TIMEOUT} ] ; then
			echo "Timeout waiting for server status."
			exit 1
		fi

		SERVER_STATUS=$(openstack server show ${SERVER_NAME} --format value -c status)
		echo -n "."
	done
	echo "Ok."

}

# openstack server add floating ip
oci_poc_prov_cloud_add_floating_to_server () {
	local SERVER_NAME
	SERVER_NAME=$1

	echo "===> Adding floating IP to ${SERVER_NAME}"
	echo "---> Checking if server already has a floating"
	if ! openstack server show --format value -c addresses demo-server-1 | grep -q ',' ; then
		echo "---> Fetching the first available floating IP"
		FLOATING_UUID=$(openstack floating ip list --status DOWN --format value -c ID | head -n 1)
		echo "---> Adding it to ${SERVER_NAME}"
		openstack server add floating ip ${SERVER_NAME} ${FLOATING_UUID}
	fi
}

oci_poc_prov_cloud_enable_all_compute_hosts
oci_poc_prov_cloud_security_group
oci_poc_prov_cloud_keypair
oci_poc_prov_cloud_create_server demo-server-1
oci_poc_prov_cloud_create_server demo-server-2
oci_poc_prov_cloud_wait_for_server_status demo-server-1 ACTIVE 30
oci_poc_prov_cloud_wait_for_server_status demo-server-2 ACTIVE 30
#oci_poc_prov_cloud_add_floating_to_server demo-server-1

exit 0