From ec25e79c434a072603f3e278fbc266d509ba6d58 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Tue, 4 Apr 2023 21:32:26 +0200 Subject: Initial commit --- playbook.bash | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 playbook.bash (limited to 'playbook.bash') 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