# 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"
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}-20.1-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
	"${FILESDIR}/${PV}-stable-uid.patch"
	"${FILESDIR}/${PV}-fix-cross-compile.patch"
	"${FILESDIR}/${PV}-datasource-gce-platform-google.patch"
	"${FILESDIR}/${PV}-skip-root-ssh-keys.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

	# 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() {
	# Overwrite the default cloud.cfg with our customized version.
	insinto /etc/cloud
	doins "${FILESDIR}"/cloud.cfg
	doins "${FILESDIR}"/ds-identify.cfg

	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() {
	# [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."
}
