--- # yaml-language-server: $schema=https://taskfile.dev/schema.json version: "3" vars: TALHELPER_CLUSTER_DIR: "{{.KUBERNETES_DIR}}/bootstrap/talos/clusterconfig" TALHELPER_SECRET_FILE: "{{.KUBERNETES_DIR}}/bootstrap/talos/talsecret.sops.yaml" TALHELPER_CONFIG_FILE: "{{.KUBERNETES_DIR}}/bootstrap/talos/talconfig.yaml" HELMFILE_FILE: "{{.KUBERNETES_DIR}}/bootstrap/helmfile.yaml" TALOSCONFIG_FILE: "{{.TALHELPER_CLUSTER_DIR}}/talosconfig" env: TALOSCONFIG: "{{.TALOSCONFIG_FILE}}" tasks: bootstrap: desc: Bootstrap the Talos cluster dir: "{{.KUBERNETES_DIR}}/bootstrap/talos" cmds: - | if [ ! -f "{{.TALHELPER_SECRET_FILE}}" ]; then talhelper gensecret > {{.TALHELPER_SECRET_FILE}} sops --encrypt --in-place {{.TALHELPER_SECRET_FILE}} fi - talhelper genconfig --config-file {{.TALHELPER_CONFIG_FILE}} --secret-file {{.TALHELPER_SECRET_FILE}} --out-dir {{.TALHELPER_CLUSTER_DIR}} - talhelper gencommand apply --config-file {{.TALHELPER_CONFIG_FILE}} --out-dir {{.TALHELPER_CLUSTER_DIR}} --extra-flags="--insecure" | bash - until talhelper gencommand bootstrap --config-file {{.TALHELPER_CONFIG_FILE}} --out-dir {{.TALHELPER_CLUSTER_DIR}} | bash; do sleep 10; done - task: fetch-kubeconfig - task: install-helm-apps - talosctl health --server=false preconditions: - msg: Missing talhelper config file sh: test -f {{.TALHELPER_CONFIG_FILE}} - msg: Missing Sops config file sh: test -f {{.SOPS_CONFIG_FILE}} - msg: Missing Sops Age key file sh: test -f {{.AGE_FILE}} fetch-kubeconfig: desc: Fetch kubeconfig dir: "{{.KUBERNETES_DIR}}/bootstrap/talos" cmd: until talhelper gencommand kubeconfig --config-file {{.TALHELPER_CONFIG_FILE}} --out-dir {{.TALHELPER_CLUSTER_DIR}} --extra-flags="{{.ROOT_DIR}} --force" | bash; do sleep 10; done preconditions: - msg: Missing talhelper config file sh: test -f {{.TALHELPER_CONFIG_FILE}} install-helm-apps: desc: Bootstrap core apps needed for Talos dir: "{{.KUBERNETES_DIR}}/bootstrap/talos" cmds: - until kubectl --kubeconfig {{.KUBECONFIG_FILE}} wait --for=condition=Ready=False nodes --all --timeout=600s; do sleep 10; done - helmfile --kubeconfig {{.KUBECONFIG_FILE}} --file {{.HELMFILE_FILE}} apply --skip-diff-on-install --suppress-diff - until kubectl --kubeconfig {{.KUBECONFIG_FILE}} wait --for=condition=Ready nodes --all --timeout=600s; do sleep 10; done preconditions: - msg: Missing kubeconfig sh: test -f {{.KUBECONFIG_FILE}} - msg: Missing helmfile sh: test -f {{.HELMFILE_FILE}} upgrade: desc: Upgrade Talos on a node dir: "{{.KUBERNETES_DIR}}/bootstrap/talos" cmds: - talosctl --nodes {{.node}} upgrade --image {{.image}} --wait=true --timeout=10m --preserve=true --reboot-mode={{.mode}} - talosctl --nodes {{.node}} health --wait-timeout=10m --server=false vars: mode: '{{.mode | default "default"}}' requires: vars: ["node", "image"] preconditions: - msg: Missing talosconfig sh: test -f {{.TALOSCONFIG_FILE}} - msg: Unable to retrieve Talos config sh: talosctl config info >/dev/null 2>&1 - msg: Node not found sh: talosctl --nodes {{.node}} get machineconfig >/dev/null 2>&1 upgrade-k8s: desc: Upgrade Kubernetes across the cluster dir: "{{.KUBERNETES_DIR}}/bootstrap/talos" cmd: talosctl --nodes {{.controller}} upgrade-k8s --to {{.to}} requires: vars: ["controller", "to"] preconditions: - msg: Missing talosconfig sh: test -f {{.TALOSCONFIG_FILE}} - msg: Unable to retrieve Talos config sh: talosctl config info >/dev/null 2>&1 - msg: Node not found sh: talosctl --nodes {{.controller}} get machineconfig >/dev/null 2>&1 nuke: desc: Resets nodes back to maintenance mode dir: "{{.KUBERNETES_DIR}}/bootstrap/talos" prompt: This will destroy your cluster and reset the nodes back to maintenance mode... continue? cmd: talhelper gencommand reset --config-file {{.TALHELPER_CONFIG_FILE}} --out-dir {{.TALHELPER_CLUSTER_DIR}} --extra-flags="--reboot {{- if eq .CLI_FORCE false }} --system-labels-to-wipe STATE --system-labels-to-wipe EPHEMERAL{{ end }} --graceful=false --wait=false" | bash .reset: internal: true cmd: rm -rf {{.TALHELPER_CLUSTER_DIR}} {{.TALHELPER_SECRET_FILE}} {{.TALHELPER_CONFIG_FILE}}