-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2c88ef8
commit e44a5a7
Showing
34 changed files
with
877 additions
and
620 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
--- | ||
# yaml-language-server: $schema=https://taskfile.dev/schema.json | ||
version: "3" | ||
|
||
vars: | ||
GITHUB_DEPLOY_KEY_FILE: "{{.KUBERNETES_DIR}}/bootstrap/flux/github-deploy-key.sops.yaml" | ||
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" | ||
|
||
env: | ||
TALOSCONFIG: "{{.TALHELPER_CLUSTER_DIR}}/talosconfig" | ||
|
||
tasks: | ||
talos: | ||
desc: Bootstrap the Talos cluster | ||
dir: "{{.KUBERNETES_DIR}}/bootstrap/talos" | ||
cmds: | ||
- '{{if eq .TALHELPER_SECRET_EXISTS "false"}}talhelper gensecret > {{.TALHELPER_SECRET_FILE}}{{end}}' | ||
- '{{if eq .TALHELPER_SECRET_EXISTS "false"}}sops --encrypt --in-place {{.TALHELPER_SECRET_FILE}}{{end}}' | ||
- 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 | ||
- until talhelper gencommand kubeconfig --config-file {{.TALHELPER_CONFIG_FILE}} --out-dir {{.TALHELPER_CLUSTER_DIR}} --extra-flags="{{.ROOT_DIR}} --force" | bash; do sleep 10; done | ||
- task: apps | ||
- talosctl health --server=false | ||
vars: | ||
TALHELPER_SECRET_EXISTS: | ||
sh: test -f {{.TALHELPER_SECRET_FILE}} && echo true || echo 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 {{.SOPS_AGE_KEY_FILE}} | ||
|
||
flux: | ||
desc: Bootstrap Flux into the Talos cluster | ||
cmds: | ||
- '{{if eq .GITHUB_DEPLOY_KEY_EXISTS "true"}}kubectl create namespace flux-system --dry-run=client -o yaml | kubectl apply --filename -{{end}}' | ||
- '{{if eq .GITHUB_DEPLOY_KEY_EXISTS "true"}}sops exec-file {{.GITHUB_DEPLOY_KEY_FILE}} "kubectl apply --server-side --filename {}"{{end}}' | ||
- kubectl apply --server-side --kustomize {{.KUBERNETES_DIR}}/bootstrap/flux | ||
- '{{if eq .SOPS_SECRET_EXISTS "false"}}cat {{.SOPS_AGE_KEY_FILE}} | kubectl --namespace flux-system create secret generic sops-age --from-file=age.agekey=/dev/stdin{{end}}' | ||
- sops exec-file {{.KUBERNETES_DIR}}/flux/vars/cluster-secrets.sops.yaml "kubectl apply --server-side --filename {}" | ||
- kubectl apply --server-side --filename {{.KUBERNETES_DIR}}/flux/vars/cluster-settings.yaml | ||
- kubectl apply --server-side --kustomize {{.KUBERNETES_DIR}}/flux/config | ||
vars: | ||
GITHUB_DEPLOY_KEY_EXISTS: | ||
sh: test -f {{.GITHUB_DEPLOY_KEY_FILE}} && echo true || echo false | ||
SOPS_SECRET_EXISTS: | ||
sh: kubectl --namespace flux-system get secret sops-age &>/dev/null && echo true || echo false | ||
preconditions: | ||
- msg: Missing kubeconfig | ||
sh: test -f {{.KUBECONFIG}} | ||
- msg: Missing Sops Age key file | ||
sh: test -f {{.SOPS_AGE_KEY_FILE}} | ||
|
||
apps: | ||
internal: true | ||
dir: "{{.KUBERNETES_DIR}}/bootstrap/talos" | ||
cmds: | ||
- until kubectl wait --for=condition=Ready=False nodes --all --timeout=600s; do sleep 10; done | ||
- helmfile --file {{.KUBERNETES_DIR}}/bootstrap/helmfile.yaml apply --skip-diff-on-install --suppress-diff | ||
- until kubectl wait --for=condition=Ready nodes --all --timeout=600s; do sleep 10; done | ||
preconditions: | ||
- msg: Missing kubeconfig | ||
sh: test -f {{.KUBECONFIG}} | ||
- msg: Missing helmfile | ||
sh: test -f {{.KUBERNETES_DIR}}/bootstrap/helmfile.yaml | ||
|
||
age-keygen: | ||
desc: Bootstrap the Sops Age key | ||
cmd: age-keygen --output {{.SOPS_AGE_KEY_FILE}} | ||
status: | ||
- test -f {{.SOPS_AGE_KEY_FILE}} | ||
|
||
encrypt: | ||
desc: Encrypt all Kubernetes SOPS secrets | ||
cmd: | | ||
find "{{.KUBERNETES_DIR}}" -type f -name "*.sops.*" | while read -r file; do | ||
if sops filestatus "${file}" | jq --exit-status ".encrypted == false" &>/dev/null; then | ||
sops --encrypt --in-place "${file}" | ||
fi | ||
done | ||
preconditions: | ||
- msg: Missing Sops config file | ||
sh: test -f {{.SOPS_CONFIG_FILE}} | ||
- msg: Missing Sops Age key file | ||
sh: test -f {{.SOPS_AGE_KEY_FILE}} | ||
|
||
clean: | ||
desc: Clean files and directories no longer needed after cluster bootstrap | ||
cmds: | ||
# Create backup directory | ||
- mkdir -p {{.ROOT_DIR}}/.private | ||
# Clean up CI | ||
- rm -rf {{.ROOT_DIR}}/.github/tests | ||
- rm -rf {{.ROOT_DIR}}/.github/workflows/e2e.yaml | ||
# Clean up devcontainer | ||
- rm -rf {{.ROOT_DIR}}/.devcontainer/ci | ||
- rm -rf {{.ROOT_DIR}}/.github/workflows/devcontainer.yaml | ||
# Move bootstrap directory to gitignored directory | ||
- mv {{.BOOTSTRAP_DIR}} {{.ROOT_DIR}}/.private/bootstrap-{{.TS}} | ||
- mv {{.MAKEJINJA_CONFIG_FILE}} {{.ROOT_DIR}}/.private/makejinja-{{.TS}}.toml | ||
# Update renovate.json5 | ||
- sed -i {{if eq OS "darwin"}}''{{end}} 's/(..\.j2)\?//g' {{.ROOT_DIR}}/.github/renovate.json5 | ||
vars: | ||
TS: "{{now | unixEpoch}}" | ||
preconditions: | ||
- msg: Missing bootstrap directory | ||
sh: test -d {{.BOOTSTRAP_DIR}} | ||
- msg: Missing Renovate config file | ||
sh: test -f {{.ROOT_DIR}}/.github/renovate.json5 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.