# 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}]
	dev-python/netifaces[${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=(

	# 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}/${PV}-enable-ntp-for-cos.patch"
	# Remove dhclient dependency from /tmp.
	"${FILESDIR}/cloud-init-21.4-azure-remove-dhclient.patch"

)

python_prepare_all() {
	# remove network dependencies when not configuring network.
	# The below patches are resulting in different cloud-init-local.service
	# and cloud-init.service that is installed by cloud-init. It doesn't
	# result in any change in the cloud-init binary built.
	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() {
	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."
}
