#
# Copyright 2021 Google LLC
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# version 2 as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
EAPI=7

inherit systemd create-overlay tmpfiles

DESCRIPTION="Kubernetes package for node"
HOMEPAGE="https://github.com/GoogleCloudPlatform/kubernetes"
VERSION=1.28.7-gke.1700
SRC_URI="gs://chromeos-localmirror-private/distfiles/kubernetes-node-linux-${ARCH}-v${VERSION}.tar.gz"

LICENSE="BSD-Google"
SLOT="0"
KEYWORDS="*"
RESTRICT="mirror"

# Default S=${WORKDIR}/${PV} but tarball does stores the binaries in a kubernetes folder.
S="${WORKDIR}/${PN}"

RDEPEND="
	app-arch/gzip
	>=net-misc/socat-1.7.3.0
	app-admin/logrotate
	acct-user/prodbin
"

src_install() {
	dobin node/bin/kubelet
	dobin node/bin/kubectl
	dobin node/bin/kubeadm

	insinto /etc/default
	newins "${FILESDIR}"/kubelet.env kubelet

	insinto /etc/sysctl.d
	newins "${FILESDIR}"/sysctl.conf 10-k8s.conf

	insinto /etc/cni/net.d
	newins "${FILESDIR}"/cni.conf 05-cilium.conf

	insinto /etc/modules-load.d
	doins "${FILESDIR}"/br_netfilter.conf

	insinto /etc/systemd/networkd.conf.d
	doins "${FILESDIR}"/10-kubernetes.conf

	insinto /usr/lib/tmpfiles.d
	doins "${FILESDIR}"/kubelet.conf

	insinto /etc/iproute2/rt_tables.d
	doins "${FILESDIR}"/kubernetes-routing.conf

	#                        mount path               owner:group   mode backing-root
	create_stateful_overlay  /opt                     -             -    -
	create_stateful_overlay  /etc/kubernetes          root:prodbin  775  -
	create_stateful_overlay  /etc/common_webhooks     root:prodbin  775  -
	create_stateful_overlay  /etc/srv/kubernetes      root:prodbin  775  -
	create_stateful_overlay  /etc/cni                 -             -    -
	create_stateful_overlay  /etc/containerd          -             -    -
	create_stateful_overlay  /usr/libexec/kubernetes  -             -    -

	systemd_dounit "${FILESDIR}"/kubelet.service
	systemd_dounit "${FILESDIR}"/kubelet-watcher.path
	systemd_dounit "${FILESDIR}"/kubelet-watcher.service

	systemd_enable_service multi-user.target kubelet.service
	systemd_enable_service multi-user.target kubelet-watcher.path

	dotmpfiles "${FILESDIR}"/kubernetes-tmpfiles.conf
}

pkg_postinst() {
	tmpfiles_process kubernetes-tmpfiles.conf
}

# Change this line so that new changes will be picked up:
# Next prime number: 3
