Reflection-based template walking

Rather than deriving the identity of template variables by string parsing the
name, identify its relationship to the underlying struct using reflection.

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
Jonathon Anderson
2025-12-04 00:26:03 -07:00
parent 29136e17d4
commit 4e67db0be6
5 changed files with 451 additions and 118 deletions

View File

@@ -2,10 +2,10 @@
network:
version: 2
renderer: networkd
{{- $NetDevs := .NetDevs }}
{{- $ethernets := list }}
{{- $bonds := list }}
{{- $NetDevs := .NetDevs }}
{{- range $devname, $netdev := .NetDevs }}
{{- range $devname, $netdev := $NetDevs }}
{{- if $netdev.Device }}
{{- if eq (default "ethernet" (lower $netdev.Type)) "ethernet" }}
{{- $ethernets = append $ethernets $devname }}
@@ -16,8 +16,8 @@ network:
{{- end }}
{{- if $ethernets }}
ethernets:
{{- range $devname := $ethernets }}
{{- $netdev := (index $NetDevs $devname) }}
{{- range $netdev := $NetDevs }}
{{- if eq (default "ethernet" (lower $netdev.Type)) "ethernet" }}
{{$netdev.Device}}:
dhcp4: no
optional: true
@@ -30,10 +30,11 @@ network:
{{- end }}
{{- end }}
{{- end }}
{{- end }}
{{- if $bonds }}
bonds:
{{- range $devname := $bonds }}
{{- $netdev := (index $NetDevs $devname) }}
{{- range $netdev := $NetDevs }}
{{- if eq (lower $netdev.Type) "bond" }}
{{$netdev.Device}}:
dhcp4: no
optional: true
@@ -61,3 +62,4 @@ network:
{{- end }}
{{- end }}
{{- end }}
{{- end }}