diff --git a/templates/generate_configs.sh b/templates/generate_configs.sh new file mode 100644 index 0000000..cd84b42 --- /dev/null +++ b/templates/generate_configs.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -euo pipefail +ROOT=$(git rev-parse --show-toplevel) +CONFIGS=${ROOT}/configs + +# Generate the configuration for each node +{% set clusters = [] %} +{%- for node in nodes -%} +talosctl gen config {{ node.clusterName }} https://{{ node.controlplaneIp }}:6443 -f \ + --with-secrets ${ROOT}/secrets.yaml \ + --talos-version {{ node.talosVersion }} \ + --kubernetes-version {{ node.kubernesVersion }} \ + --output-types {{ node.type }} \ + --install-image factory.talos.dev/metal-installer/{{ node.schematicId }}:{{ node.talosVersion }} \ + {% for patch in node.patches -%} + {# The double call to tojson is needed to properly escape the patch (object -> json -> string) -#} + --config-patch {{ patch|tojson|tojson }} \ + {% endfor -%} + {% for patch in node.patchesControlplane -%} + --config-patch-control-plane {{ patch|tojson|tojson }} \ + {% endfor -%} + --with-docs=false \ + --with-examples=false \ + -o ${CONFIGS}/{{ node.filename }}.yaml + + {%- do clusters.append((node.clusterName, node.controlplaneIp)) %} +{% endfor %} + +# Generate the talosconfig file for each cluster +{% for cluster in clusters|unique -%} +talosctl gen config {{ cluster[0] }} https://{{ cluster[1] }}:6443 -f \ + --with-secrets ${ROOT}/secrets.yaml \ + --output-types talosconfig \ + -o ${CONFIGS}/{{ cluster[0] }}/talosconfig +{% endfor %} + +# Create merged talosconfig +export TALOSCONFIG=${CONFIGS}/talosconfig +rm -f ${TALOSCONFIG} +{% for cluster in clusters|unique -%} +talosctl config merge ${CONFIGS}/{{ cluster[0] }}/talosconfig +{% endfor %}