#!/bin/sh
# This script is to be setup as a daily job to check if one of the
# OpenStack VM image needs an update, and generate a new one if
# needed.

set -e
set -x

if ! [ -e /etc/openstack-debian-images/openstack-debian-images.conf ] ; then
	echo "$0 Configuration file /etc/openstack-debian-images/openstack-debian-images.conf missing: exiting..."
	exit 1
fi

. /etc/openstack-debian-images/openstack-debian-images.conf

for RELEASE in $(echo ${RELEASE_LIST} | tr ',' ' ') ; do
	echo "***************************"
	echo "NOW LOOKING AT: ${RELEASE}"
	echo "***************************"
	if ! [ -d ${IMAGE_DEST}/${RELEASE}/current ] ; then
		mkdir -p ${IMAGE_DEST}/${RELEASE}/current
		cd ${IMAGE_DEST}/${RELEASE}/current
		echo "-> Building a new image for ${RELEASE}"
		build-openstack-debian-image \
			-r ${RELEASE} \
			-u ${DEB_MIRROR} \
			-s ${DEB_MIRROR} \
			--security-mirror ${SECURITY_MIRROR} \
			--generate-package-list --grab-release-number --generate-source-tarball --generate-sums-sign 1>${IMAGE_DEST}/${RELEASE}/current/build.log 2>&1
	else
		cd ${IMAGE_DEST}/${RELEASE}/current
		if ! check-openstack-debian-image \
			--release ${RELEASE} \
			--deb-mirror ${DEB_MIRROR} \
			--security-mirror ${SECURITY_MIRROR} ; then

			# Get info about the current installed image
			LATEST=$(cat latest)

			# Do a copy of the installed old version in the archive folder
			# Do not archive if we're doing Sid or Bullseye.
			if ! [ -e current_minor_version ] ; then
				echo "Skipping archive for not released suite"
			elif [ "${RELEASE}" = "sid" ] || [ "${RELEASE}" = "unstable" ] || [ "${RELEASE}" = "testing" ] ; then
				echo "Skipping archive for not released"
			else
				CURRENT_POINT_RELEASE=$(cat current_point_release)
				CURRENT_MINOR_VERSION=$(cat current_minor_version)
				ARCH_DIR=${IMAGE_DEST}/${RELEASE}/archive/${CURRENT_POINT_RELEASE}.${CURRENT_MINOR_VERSION}
				mkdir -p ${ARCH_DIR}
				cp current_point_release current_minor_version SHA512SUMS.sign SHA512SUMS SHA512SUMS.asc ${ARCH_DIR} || true
				mv ${LATEST}-packages.list ${LATEST}.raw ${LATEST}.qcow2 ${LATEST}-source.tar.gz ${ARCH_DIR} || true
			fi
			rm -f SHA512SUMS.sign SHA512SUMS SHA512SUMS.asc

			echo "-> Building a new image for ${RELEASE}"
			# Build a new version
			build-openstack-debian-image \
				-r ${RELEASE} \
				-u ${DEB_MIRROR} \
				-s ${DEB_MIRROR} \
				--security-mirror ${SECURITY_MIRROR} \
				--generate-package-list --grab-release-number --generate-source-tarball --generate-sums-sign 1>${IMAGE_DEST}/${RELEASE}/current/build.log 2>&1

			# Remove the old version of the image
			rm -f ${LATEST}-packages.list ${LATEST}.raw ${LATEST}.qcow2 ${LATEST}-source.tar.gz
		fi
	fi
done

for OCTAVIA_IMAGE in $(echo ${OCTAVIA_IMAGES} | tr ',' ' ') ; do
	echo "***************************"
	echo "NOW LOOKING AT: ${OCTAVIA_IMAGE}"
	echo "***************************"
	DEB_REL=$(echo ${OCTAVIA_IMAGE} | cut -d- -f1)
	OS_REL=$(echo ${OCTAVIA_IMAGE} | cut -d- -f2)
	if [ "${DEB_REL}" = "${OS_REL}" ] ; then
		REL=${DEB_REL}
		EXT=""
	else
		REL=${DEB_REL}-${OS_REL}
		EXT="--extrepo ${OS_REL}"
	fi
	if ! [ -d ${IMAGE_DEST}/octavia/${REL}/current ] ; then
		mkdir -p ${IMAGE_DEST}/octavia/${REL}/current
		cd ${IMAGE_DEST}/octavia/${REL}/current
		echo "-> Building a new Octavia image for ${REL}"
		build-openstack-debian-image \
			-r ${DEB_REL} \
			-u ${DEB_MIRROR} \
			-s ${DEB_MIRROR} \
			--security-mirror ${SECURITY_MIRROR} \
			--generate-package-list --grab-release-number --generate-source-tarball --generate-sums-sign \
			--octavia-agent ${EXT} \
			1>${IMAGE_DEST}/octavia/${REL}/current/build.log 2>&1
	else
		cd ${IMAGE_DEST}/octavia/${REL}/current
		if ! check-openstack-debian-image \
			--release ${DEB_REL} \
			--deb-mirror ${DEB_MIRROR} \
			--security-mirror ${SECURITY_MIRROR} ; then

			# Get info about the current installed image
			LATEST=$(cat latest)

			# Do a copy of the installed old version in the archive folder
			# Do not archive if we're doing Sid or Testing.
			if ! [ -e current_minor_version ] ; then
				echo "Skipping archive for not released suite"
			elif [ "${DEB_REL}" = "sid" ] || [ "${DEB_REL}" = "unstable" ] || [ "${DEB_REL}" = "testing" ] ; then
				echo "Skipping archive for not released suite"
			else
				CURRENT_POINT_RELEASE=$(cat current_point_release)
				CURRENT_MINOR_VERSION=$(cat current_minor_version)
				ARCH_DIR=${IMAGE_DEST}/octavia/${REL}/archive/${CURRENT_POINT_RELEASE}.${CURRENT_MINOR_VERSION}
				mkdir -p ${ARCH_DIR}
				cp current_point_release current_minor_version SHA512SUMS.sign SHA512SUMS SHA512SUMS.asc ${ARCH_DIR} || true
				mv ${LATEST}-packages.list ${LATEST}.raw ${LATEST}.qcow2 ${LATEST}-source.tar.gz ${ARCH_DIR} || true
			fi
			rm -f SHA512SUMS.sign SHA512SUMS SHA512SUMS.asc

			echo "-> Building a new image for ${DEB_REL}"
			# Build a new version
			build-openstack-debian-image \
				-r ${DEB_REL} \
				-u ${DEB_MIRROR} \
				-s ${DEB_MIRROR} \
				--security-mirror ${SECURITY_MIRROR} \
				--generate-package-list --grab-release-number --generate-source-tarball --generate-sums-sign \
				--octavia-agent ${EXT} \
				1>${IMAGE_DEST}/octavia/${REL}/current/build.log 2>&1

			# Remove the old version of the image
			rm -f ${LATEST}-packages.list ${LATEST}.raw ${LATEST}.qcow2 ${LATEST}-source.tar.gz
		fi
	fi
done

for MANILA_IMAGE in $(echo ${MANILA_IMAGES} | tr ',' ' ') ; do
	echo "***************************"
	echo "NOW LOOKING AT MANILA: ${MANILA_IMAGE}"
	echo "***************************"
	DEB_REL=$(echo ${MANILA_IMAGE})
	REL=${MANILA_IMAGE}
	if ! [ -d ${IMAGE_DEST}/manila/${REL}/current ] ; then
		mkdir -p ${IMAGE_DEST}/manila/${REL}/current
		cd ${IMAGE_DEST}/manila/${REL}/current
		echo "-> Building a new Manila image for ${REL}"
		build-openstack-debian-image \
			-r ${DEB_REL} \
			-u ${DEB_MIRROR} \
			-s ${DEB_MIRROR} \
			--security-mirror ${SECURITY_MIRROR} \
			--generate-package-list --grab-release-number --generate-source-tarball --generate-sums-sign \
			--manila-agent \
			1>${IMAGE_DEST}/manila/${REL}/current/build.log 2>&1
	else
		cd ${IMAGE_DEST}/manila/${REL}/current
		if ! check-openstack-debian-image \
			--release ${DEB_REL} \
			--deb-mirror ${DEB_MIRROR} \
			--security-mirror ${SECURITY_MIRROR} ; then

			# Get info about the current installed image
			LATEST=$(cat latest)

			# Do a copy of the installed old version in the archive folder
			# Do not archive if we're doing Sid or Testing.
			if ! [ -e current_minor_version ] ; then
				echo "Skipping archive for not released suite"
			elif [ "${DEB_REL}" = "sid" ] || [ "${DEB_REL}" = "unstable" ] || [ "${DEB_REL}" = "testing" ] ; then
				echo "Skipping archive for not released suite"
			else
				CURRENT_POINT_RELEASE=$(cat current_point_release)
				CURRENT_MINOR_VERSION=$(cat current_minor_version)
				ARCH_DIR=${IMAGE_DEST}/manila/${REL}/archive/${CURRENT_POINT_RELEASE}.${CURRENT_MINOR_VERSION}
				mkdir -p ${ARCH_DIR}
				cp current_point_release current_minor_version SHA512SUMS.sign SHA512SUMS SHA512SUMS.asc ${ARCH_DIR} || true
				mv ${LATEST}-packages.list ${LATEST}.raw ${LATEST}.qcow2 ${LATEST}-source.tar.gz ${ARCH_DIR} || true
			fi
			rm -f SHA512SUMS.sign SHA512SUMS SHA512SUMS.asc

			echo "-> Building a new image for ${DEB_REL}"
			# Build a new version
			build-openstack-debian-image \
				-r ${DEB_REL} \
				-u ${DEB_MIRROR} \
				-s ${DEB_MIRROR} \
				--security-mirror ${SECURITY_MIRROR} \
				--generate-package-list --grab-release-number --generate-source-tarball --generate-sums-sign \
				--manila-agent \
				1>${IMAGE_DEST}/manila/${REL}/current/build.log 2>&1
		fi
	fi
done
