File: oci-poc-provision-image

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 (87 lines) | stat: -rwxr-xr-x 2,573 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
#!/bin/sh

set -e
#set -x

. /root/oci-openrc

USE_DAILY_IMAGE=no
if [ "${1}" = "--use-daily-image" ] ; then
	USE_DAILY_IMAGE=yes
fi

DEBIAN_RELEASE=$(lsb_release -c -s)
DEBIAN_RELEASE_NUM=$(lsb_release -r -s)
DEBIAN_ARCH=$(dpkg-architecture -q DEB_BUILD_ARCH)
if [ "${USE_DAILY_IMAGE}" = "yes" ] ; then
	IMAGE_NAME_NO_EXT="debian-${DEBIAN_RELEASE_NUM}-generic-${DEBIAN_ARCH}-daily"
	IMAGE_NAME="${IMAGE_NAME_NO_EXT}.qcow2"
	IMAGE_URL=http://cdimage.debian.org/cdimage/cloud/${DEBIAN_RELEASE}/daily/latest/${IMAGE_NAME}
else
	IMAGE_NAME_NO_EXT="debian-${DEBIAN_RELEASE_NUM}-generic-${DEBIAN_ARCH}"
	IMAGE_NAME="${IMAGE_NAME_NO_EXT}.qcow2"
	IMAGE_URL=http://cdimage.debian.org/cdimage/cloud/${DEBIAN_RELEASE}/latest/${IMAGE_NAME}
fi
IMAGE_DOWNLOAD_TIMEOUT=30

####################
### GLANCE IMAGE ###
####################
oci_poc_prov_cloud_glance_image () {
	echo "===> Provisioning of a Glance image"
	if ! [ -f /root/${IMAGE_NAME} ] ; then
		echo "---> Fetching image from ${IMAGE_URL}"
		if [ -e /etc/oci/http_proxy_addr ] ; then
			http_proxy_addr=$(cat /etc/oci/http_proxy_addr)
			http_proxy=${http_proxy_addr} timeout ${IMAGE_DOWNLOAD_TIMEOUT} wget ${IMAGE_URL}
		else
			timeout ${IMAGE_DOWNLOAD_TIMEOUT} wget ${IMAGE_URL}
		fi
	else
		echo "---> Image already saved in /root"
	fi

	# Insert the password "password" in the image.
	if ! [ -e /root/password-inserted-in-image ] ; then
		if [ -e /root/${IMAGE_NAME_NO_EXT}.qcow2 ] ; then
			cd /root
			qemu-img convert -p -W -m 8 -f qcow2 ${IMAGE_NAME_NO_EXT}.qcow2 -O raw ${IMAGE_NAME_NO_EXT}.raw
			kpartx -av ${IMAGE_NAME_NO_EXT}.raw
			mount /dev/mapper/loop0p1 /mnt
			chroot /mnt sh -c "echo root:password | chpasswd"
			umount /mnt
			kpartx -d ${IMAGE_NAME_NO_EXT}.raw
			qemu-img convert -c -p -W -m 8 -f raw ${IMAGE_NAME_NO_EXT}.raw -O qcow2 ${IMAGE_NAME_NO_EXT}.qcow2
		fi
		touch /root/password-inserted-in-image
	fi

	if [ -z "${IMAGE_NAME}" ] ; then
		echo "Cannot find image to upload to Glance"
		exit 1
	fi
	if echo "${IMAGE_NAME}" | grep -q qcow2 ; then
		DISK_FORMAT=qcow2
	else
		DISK_FORMAT=raw
	fi

	echo "---> Fetching image list"
	IMAGE_ID=$(openstack image list --property os_distro=debian --format value -c ID)

	if [ -z "${IMAGE_ID}" ] ; then
		echo "---> Uploading image to OpenStack"
		openstack image create \
			--property hw_disk_bus=scsi \
			--property hw_scsi_model=virtio-scsi \
			--container-format bare --disk-format ${DISK_FORMAT} \
			--property os_distro=debian \
			--file /root/${IMAGE_NAME} \
			--public \
			${IMAGE_NAME}
	fi
}

oci_poc_prov_cloud_glance_image

exit 0