Compare commits

..

4 Commits

Author SHA1 Message Date
6edb869cd9 Added source script to set environment variables 2025-11-09 03:06:30 +01:00
2cca38c860 Made repo root available for templates
This allows for embedding the repo root inside of, for example, scripts
to make them function properly no matter where they are run from.
2025-11-09 03:03:46 +01:00
d2a1eca146 Find root of repo that contains the actual script
This makes it possible to run the render script from anywhere and have
it still function correctly.
2025-11-09 03:03:21 +01:00
0049b5cb46 Moved logic for getting clusters to render script 2025-11-09 02:58:01 +01:00
3 changed files with 29 additions and 12 deletions

View File

@@ -1,11 +1,10 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT=$(git rev-parse --show-toplevel)
ROOT={{ root }}
CONFIGS=${ROOT}/configs
# Generate the configuration for each node
{% set clusters = [] %}
{%- for node in nodes -%}
{% for node in nodes -%}
talosctl gen config {{ node.clusterName }} https://{{ node.controlplaneIp }}:6443 -f \
--with-secrets ${ROOT}/secrets.yaml \
--talos-version {{ node.talosVersion }} \
@@ -22,21 +21,20 @@ talosctl gen config {{ node.clusterName }} https://{{ node.controlplaneIp }}:644
--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 \
{# NOTE: This assumes that each node in a cluster specifies the same controlplane IP -#}
{% for cluster in clusters -%}
talosctl gen config {{ cluster.name }} https://{{ cluster.controlplaneIp }}:6443 -f \
--with-secrets ${ROOT}/secrets.yaml \
--output-types talosconfig \
-o ${CONFIGS}/{{ cluster[0] }}/talosconfig
-o ${CONFIGS}/{{ cluster.name }}/talosconfig
{% endfor %}
# Create merged talosconfig
export TALOSCONFIG=${CONFIGS}/talosconfig
rm -f ${TALOSCONFIG}
{% for cluster in clusters|unique -%}
talosctl config merge ${CONFIGS}/{{ cluster[0] }}/talosconfig
{% for cluster in clusters -%}
talosctl config merge ${CONFIGS}/{{ cluster.name }}/talosconfig
{% endfor %}

6
templates/source.sh Normal file
View File

@@ -0,0 +1,6 @@
export TALOSCONFIG={{ root }}/configs/talosconfig
{% set paths = [] %}
{%- for cluster_name in nodes|map(attribute="clusterName")|unique -%}
{%- do paths.append(root ~ "/configs/" ~ cluster_name ~ "/kubeconfig") -%}
{% endfor -%}
export KUBECTL={{ paths|join(":") }}

View File

@@ -5,13 +5,14 @@
import functools
import json
import pathlib
import sys
import git
import requests
import yaml
from jinja2 import Environment, FileSystemLoader, StrictUndefined, Template
REPO = git.Repo(".", search_parent_directories=True)
REPO = git.Repo(sys.path[0], search_parent_directories=True)
assert REPO.working_dir is not None
ROOT = pathlib.Path(REPO.working_dir)
@@ -134,6 +135,16 @@ def main():
)
)
# Get all clusterName & controlplaneIp pairs
clusters = map(
lambda node: {
"name": node["clusterName"],
"controlplaneIp": node["controlplaneIp"],
},
nodes,
)
clusters = [dict(s) for s in set(frozenset(d.items()) for d in clusters)]
with open(ROOT.joinpath("config.yaml")) as fyaml:
config = yaml.safe_load(fyaml)
@@ -141,7 +152,9 @@ def main():
for template_name in TEMPLATES.list_templates():
template = TEMPLATES.get_template(template_name)
rendered = template.render(nodes=nodes, config=config)
rendered = template.render(
nodes=nodes, clusters=clusters, config=config, root=ROOT
)
with open(RENDERED.joinpath(template_name), "w") as f:
f.write(rendered)