From ec25e79c434a072603f3e278fbc266d509ba6d58 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Tue, 4 Apr 2023 21:32:26 +0200 Subject: Initial commit --- description.txt | 1 + etc/defaults | 4 +++ etc/os.d/linux-gentoo | 2 ++ playbook.bash | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 description.txt create mode 100644 etc/defaults create mode 100644 etc/os.d/linux-gentoo create mode 100644 playbook.bash diff --git a/description.txt b/description.txt new file mode 100644 index 0000000..bf1fbab --- /dev/null +++ b/description.txt @@ -0,0 +1 @@ +Playbook for a k3s node diff --git a/etc/defaults b/etc/defaults new file mode 100644 index 0000000..51e58ad --- /dev/null +++ b/etc/defaults @@ -0,0 +1,4 @@ +pkg.curl=curl +pkg.helm=helm +pkg.k3s=k3s +pkg.kubectl=kubectl diff --git a/etc/os.d/linux-gentoo b/etc/os.d/linux-gentoo new file mode 100644 index 0000000..4aaaabf --- /dev/null +++ b/etc/os.d/linux-gentoo @@ -0,0 +1,2 @@ +pkg.k3s=sys-cluster/k3s +pkg.helm=app-admin/helm diff --git a/playbook.bash b/playbook.bash new file mode 100644 index 0000000..a2a301b --- /dev/null +++ b/playbook.bash @@ -0,0 +1,91 @@ +#!/usr/bin/env bash + +playbook_add() { + pkg install curl + + case "${BASHTARD_PLATFORM[key]}" in + linux-debian|linux-ubuntu) + info "$BASHTARD_PLAYBOOK" "Configure package manager repositories" + curl https://baltocdn.com/helm/signing.asc | gpg --dearmor > /usr/share/keyrings/helm.gpg + printf "deb [arch=%s signed-by=%s] %s all main\n" \ + "$(dpkg --print-architecture)" \ + "/usr/share/keyrings/helm.gpg" \ + "https://baltocdn.com/helm/stable/debian/" \ + > "/etc/apt/sources.list.d/$BASHTARD_PLAYBOOK.list" + apt update + ;; + esac + + info "$BASHTARD_PLAYBOOK" "Installing additional programs" + pkg install helm + + info "$BASHTARD_PLAYBOOK" "Writing config.yaml for k3s" + mkdir -pv -- /etc/rancher/k3s + cat <<-EOF > /etc/rancher/k3s/config.yaml + node-name: "${BASHTARD_PLATFORM[fqdn]}" + cluster-cidr: 172.19.0.0/16 + service-cidr: 172.20.0.0/16 + cluster-domain: cluster.local + EOF + + info "$BASHTARD_PLAYBOOK" "Installing k3s" + curl -sfL https://get.k3s.io | sh - # I hate this + + notice "$BASHTARD_PLAYBOOK" "Creating data directories" + mkdir -pv -- "$(playbook_path "data")/manifests.d" + mkdir -pv -- "$(playbook_path "data")/helm.d" + + notice "$BASHTARD_PLAYBOOK" "Waiting for node to become available" + { grep -q -m 1 "${BASHTARD_PLATFORM[fqdn]}[[:space:]]\+Ready"; kill $!; } < <(k3s kubectl get node -w) + + playbook_sync +} + +playbook_sync() { + local data + local helm_cmd + local kubeconfig + + data="$(playbook_path "data")" + kubeconfig="$(config "fs.etcdir")/rancher/k3s/k3s.yaml" + + notice "$BASHTARD_PLAYBOOK/manifests" "Applying manifests.d" + kubectl --kubeconfig "$kubeconfig" apply --recursive --filename "$data/manifests.d" + + notice "$BASHTARD_PLAYBOOK/helm" "Ensure all Helm repos exist" + while read -r repo + do + helm repo add "$repo" "$(config "$BASHTARD_PLAYBOOK.helm.repos.$repo.url")" + done < <(config_subkeys "$BASHTARD_PLAYBOOK.helm.repos") + + notice "$BASHTARD_PLAYBOOK/helm" "Updating Helm repository contents" + helm repo update + + notice "$BASHTARD_PLAYBOOK/helm" "Upgrading Helm charts" + while read -r app + do + helm_cmd=( + "helm" "upgrade" + "--install" + "--kubeconfig" "$kubeconfig" + "--timeout" "$(config "$BASHTARD_PLAYBOOK.helm.timeout" "30s")" + "--namespace" "$(config "$BASHTARD_PLAYBOOK.helm.apps.$app.namespace" "default")" + ) + + # Add values + helm_cmd+=("--values" "$data/helm.d/$(config "$BASHTARD_PLAYBOOK.helm.apps.$app.values")") + + # Set which chart to upgrade + helm_cmd+=("$app") + helm_cmd+=("$(config "$BASHTARD_PLAYBOOK.helm.apps.$app.repo")/$(config "$BASHTARD_PLAYBOOK.helm.apps.$app.chart")") + + notice "$BASHTARD_PLAYBOOK/helm/$app" "> ${helm_cmd[*]}" + ${helm_cmd[@]} + + unset helm_cmd + done < <(config_subkeys "$BASHTARD_PLAYBOOK.helm.apps") +} + +playbook_del() { + /usr/local/bin/k3s-uninstall.sh +} -- cgit v1.1