# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7
PYTHON_COMPAT=( python3_6 python3_7 python3_8 )

inherit distutils-r1 systemd

if [[ ${PV} == *9999 ]];then
	inherit git-r3
	EGIT_REPO_URI="https://git.launchpad.net/cloud-init"
else
	SRC_URI="https://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.gz"
	KEYWORDS="*"
fi

DESCRIPTION="Cloud instance initialisation magic"
HOMEPAGE="https://launchpad.net/cloud-init"

LICENSE="GPL-3"
SLOT="0"
IUSE="test configure_network platform_azure"
RESTRICT="!test? ( test )"

CDEPEND="
	dev-python/jinja[${PYTHON_USEDEP}]
	dev-python/oauthlib[${PYTHON_USEDEP}]
	dev-python/pyserial[${PYTHON_USEDEP}]
	>=dev-python/configobj-5.0.2[${PYTHON_USEDEP}]
	dev-python/pyyaml[${PYTHON_USEDEP}]
	dev-python/requests[${PYTHON_USEDEP}]
	dev-python/jsonpatch[${PYTHON_USEDEP}]
	dev-python/jsonschema[${PYTHON_USEDEP}]
	dev-python/six[${PYTHON_USEDEP}]
"
DEPEND="
	dev-python/setuptools[${PYTHON_USEDEP}]
	test? (
		${CDEPEND}
		>=dev-python/httpretty-0.7.1[${PYTHON_USEDEP}]
		dev-python/mock[${PYTHON_USEDEP}]
		dev-python/nose[${PYTHON_USEDEP}]
		dev-python/unittest2[${PYTHON_USEDEP}]
		dev-python/coverage[${PYTHON_USEDEP}]
		dev-python/contextlib2[${PYTHON_USEDEP}]
	)
"
RDEPEND="
	${CDEPEND}
	sys-apps/iproute2
	virtual/logger
"

PATCHES=(
	# Fix Gentoo support
	# https://code.launchpad.net/~gilles-dartiguelongue/cloud-init/+git/cloud-init/+merge/358777
	"${FILESDIR}/${PN}-18.4-fix-packages-module.patch"
	"${FILESDIR}/${PN}-21.2-gentoo-support-upstream-templates.patch"
	"${FILESDIR}"/18.4-fix-filename-for-storing-locale.patch
	"${FILESDIR}"/18.4-fix-update_package_sources-function.patch
	"${FILESDIR}"/18.4-add-support-for-package_upgrade.patch

	# For lakitu
	# Google Metadata Server
	"${FILESDIR}/${PV}-datasource-gce-platform-google.patch"
	"${FILESDIR}/${PV}-add-retries-gce-metadata-server.patch"

	# Ensures the user added through cloud-init have UID in range [2000, 5000)
	"${FILESDIR}/${PV}-stable-uid.patch"
	"${FILESDIR}/${PV}-fix-cross-compile.patch"
	# Ensure we don't add ssh keys to the root user
	"${FILESDIR}/${PV}-skip-root-ssh-keys.patch"

	# Enable NTP for COS in cloud-init
	"${FILESDIR}/21.2-enable-ntp-for-cos.patch"
)

python_prepare_all() {
	# remove network dependencies when not configuring network
	if ! use configure_network; then
		PATCHES+=("${FILESDIR}/${PV}-cloud-init-remove-sshd-and-network-service-dependencies.patch")
	else
		PATCHES+=("${FILESDIR}/${PV}-remove-sshd-dependency.patch")
	fi

	# Remove dhclient dependency on cloud-init
	if use platform_azure; then
		PATCHES+=("${FILESDIR}"/cloud-init-azure-remove-dhclient.patch)
	fi

	# Fix location of documentation installation
	sed -i "s:USR + '/share/doc/cloud-init:USR + '/share/doc/${PF}:" setup.py || die
	sed -i 's/version=get_version(),/version=9999,/g' setup.py || die
	distutils-r1_python_prepare_all
}

python_test() {
	# Do not use Makefile target as it does not setup environment correclty
	esetup.py nosetests -v --where cloudinit --where tests/unittests || die
}

python_install() {
	distutils-r1_python_install --init-system=systemd
}

lakitu_python_install_all() {
	exeinto /usr/share/cloud
	doexe "${FILESDIR}"/rerun-cloudinit.sh

	systemd_dounit "${FILESDIR}"/var-lib-cloud.mount

	systemd_enable_service local-fs.target var-lib-cloud.mount
	systemd_enable_service multi-user.target cloud-config.service
	systemd_enable_service multi-user.target cloud-final.service
	systemd_enable_service multi-user.target cloud-init-local.service
	systemd_enable_service multi-user.target cloud-init.service
}

python_install_all() {
	keepdir /etc/cloud
	distutils-r1_python_install_all

	# lakitu: Comment out this because sysvinit scripts are not installed.
	## installs as non-executable
	#chmod +x "${D}"/etc/init.d/*

	lakitu_python_install_all
}

pkg_postinst() {
	# delete the default cloud.cfg to override in the cloud-init-config
	rm -f -v "${ROOT}/etc/cloud/cloud.cfg"

	# [2000, 5000) are reserved for users created by clout-init.
	# Start from 5000 for automatic uid selection in useradd.
	sed -i -r 's/^(UID_MIN\s+)1000/\15000/' "${ROOT}"/etc/login.defs

	elog "cloud-init-local needs to be run in the boot runlevel because it"
	elog "modifies services in the default runlevel.  When a runlevel is started"
	elog "it is cached, so modifications that happen to the current runlevel"
	elog "while you are in it are not acted upon."
}
