#!/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 }