@@ -9,10 +9,12 @@ TALOS_IMAGE_PATH = $(TALOS_IMAGE_DIR)/$(TALOS_IMAGE_ISO)
9
9
10
10
TALOS_REGISTRY_MIRROR_NAME ?= talos-registry-mirror
11
11
# libvirt network gateway address
12
- TALOS_REGISTRY_MIRROR_HOST ?= 172.99.99.1
12
+ TALOS_REGISTRY_MIRROR_HOST_IPV4 ?= 172.99.99.1
13
+ TALOS_REGISTRY_MIRROR_HOST_IPV6 ?= 2001:db8:99:99::1
13
14
TALOS_REGISTRY_MIRROR_PORT ?= 6000
14
- TALOS_REGISTRY_MIRROR = $(TALOS_REGISTRY_MIRROR_HOST ) :$(TALOS_REGISTRY_MIRROR_PORT )
15
- TALOS_REGISTRY_MIRROR_URL = http://$(TALOS_REGISTRY_MIRROR )
15
+ TALOS_REGISTRY_MIRROR = [$(TALOS_REGISTRY_MIRROR_HOST ) ]:$(TALOS_REGISTRY_MIRROR_PORT )
16
+ TALOS_REGISTRY_MIRROR_URL_IPV4 = http://$(TALOS_REGISTRY_MIRROR_HOST_IPV4 ) :$(TALOS_REGISTRY_MIRROR_PORT )
17
+ TALOS_REGISTRY_MIRROR_URL_IPV6 = http://[$(TALOS_REGISTRY_MIRROR_HOST_IPV6 ) ]:$(TALOS_REGISTRY_MIRROR_PORT )
16
18
17
19
TALOS_LIBVIRT_NETWORK_NAME ?= talos
18
20
TALOS_LIBVIRT_NETWORK_XML ?= talos/libvirt-network.xml
@@ -23,6 +25,8 @@ TALOS_LIBVIRT_DOMAIN_XML ?= talos/libvirt-domain.xml
23
25
24
26
TALOS_CLUSTER_NAME ?= talos
25
27
TALOS_CONTROL_PLANE_NODE = $(TALOS_CLUSTER_NAME ) -control-plane
28
+ TALOS_CONTROL_PLANE_IPV4 = 172.99.99.10
29
+ TALOS_CONTROL_PLANE_IPV6 = 2001:db8:99:99::10
26
30
TALOS_WORKER_NODE = $(TALOS_CLUSTER_NAME ) -worker
27
31
TALOS_K8S_VERSION ?= 1.31.9
28
32
# DO NOT CHANGE CONTROL PLANE COUNT
@@ -114,12 +118,16 @@ talos-libvirt-init: talos-libvirt-clean
114
118
echo " >>> Creating libvirt domain for $$ {name}..." && \
115
119
sudo virsh create --validate " $( TALOS_LIBVIRT_DOMAIN_XML) " ; \
116
120
done
121
+ @$(MAKE ) talos-libvirt-wait-address
122
+
123
+ .PHONY : talos-libvirt-wait-address-%
124
+ talos-libvirt-wait-address-% :
117
125
@sudo virsh list --name | grep ' ^$(TALOS_CLUSTER_NAME)-' | while read name; do \
118
126
echo " >>> Waiting for interface addresses of libvirt domain $$ {name}..." ; \
119
127
while true ; do \
120
- ip=$$(sudo virsh domifaddr --full "$${name}" | grep -w vnet0 | grep -iw ipv4 | awk '{print $$NF}' | awk -F/ '{print $$1}' ) ; \
128
+ ip=$$(sudo virsh domifaddr --full "$${name}" | grep -w vnet0 | grep -iw $* | awk '{print $$NF}' | awk -F/ '{print $$1}' ) ; \
121
129
if [ -z " $$ {ip}" ]; then \
122
- echo " >>> Waiting for IP address..." ; \
130
+ echo " >>> Waiting for $* address..." ; \
123
131
sleep 2; \
124
132
else \
125
133
echo " >>> IP address $$ {ip} found." ; \
@@ -128,6 +136,9 @@ talos-libvirt-init: talos-libvirt-clean
128
136
done ; \
129
137
done
130
138
139
+ .PHONY : talos-libvirt-wait-address
140
+ talos-libvirt-wait-address : talos-libvirt-wait-address-ipv4
141
+
131
142
.PHONY : talos-libvirt-clean
132
143
talos-libvirt-clean :
133
144
@echo " >>> Cleaning up libvirt domains..."
@@ -140,38 +151,46 @@ talos-libvirt-clean:
140
151
sudo virsh net-destroy $(TALOS_LIBVIRT_NETWORK_NAME ) ; \
141
152
fi
142
153
143
- .PHONY : talos-init-%
144
- talos-init-% : talos-libvirt-init talos-prepare-images
145
- $(eval TALOS_CONTROL_PLANE_IP = $(shell sudo virsh domifaddr --full "$(TALOS_CONTROL_PLANE_NODE ) " | grep -w vnet0 | grep -iw ipv4 | awk '{print $$NF}' | awk -F/ '{print $$1}') )
146
- $(eval TALOS_ENDPOINT = https://$(TALOS_CONTROL_PLANE_IP ) :6443)
154
+ .PHONY : talos-apply-config-%
155
+ talos-apply-config-% :
156
+ $(eval TALOS_ENDPOINT_IP_FAMILY = $(shell echo $* | sed 's/dual/ipv4/') )
157
+ $(eval TALOS_CONTROL_PLANE_IP = $(TALOS_CONTROL_PLANE_$(shell echo $(TALOS_ENDPOINT_IP_FAMILY ) | tr '[:lower:]' '[:upper:]') ) )
158
+ $(eval TALOS_ENDPOINT = https://[$(TALOS_CONTROL_PLANE_IP ) ]:6443)
159
+ $(eval TALOS_REGISTRY_MIRROR_URL = $(TALOS_REGISTRY_MIRROR_URL_$(shell echo $(TALOS_ENDPOINT_IP_FAMILY ) | tr '[:lower:]' '[:upper:]') ) )
147
160
@echo " >>> Generating Talos configuration..."
148
- ip_family=$* jinjanate talos/cluster-patch .yaml.j2 -o talos/cluster-patch .yaml
149
- talosctl gen config --force \
161
+ ip_family=$* jinjanate talos/cluster-config .yaml.j2 -o talos/cluster-config .yaml
162
+ talosctl gen config --force -o talos \
150
163
--kubernetes-version " $( TALOS_K8S_VERSION) " \
151
164
--registry-mirror docker.io=$(TALOS_REGISTRY_MIRROR_URL ) \
152
165
--registry-mirror gcr.io=$(TALOS_REGISTRY_MIRROR_URL ) \
153
166
--registry-mirror ghcr.io=$(TALOS_REGISTRY_MIRROR_URL ) \
154
167
--registry-mirror registry.k8s.io=$(TALOS_REGISTRY_MIRROR_URL ) \
155
- --config-patch " @talos/cluster-patch .yaml" " $( TALOS_CLUSTER_NAME) " " $( TALOS_ENDPOINT) "
156
- mv talosconfig ~ /.talos/config
157
- @echo " >>> Applying Talos node configuration..."
168
+ --config-patch " @talos/cluster-config .yaml" " $( TALOS_CLUSTER_NAME) " " $( TALOS_ENDPOINT) "
169
+ mv talos/ talosconfig ~ /.talos/config
170
+ @echo " >>> Applying Talos node $* configuration..."
158
171
@sudo virsh list --name | grep ' ^$(TALOS_CONTROL_PLANE_NODE)' | while read node; do \
159
172
echo " >>>>>> Applying Talos control plane configuration to $$ {node}..." ; \
160
173
ip=$$(sudo virsh domifaddr --full "$${node}" | grep -w vnet0 | grep -iw ipv4 | awk '{print $$NF}' | awk -F/ '{print $$1}' ) ; \
161
- ip_family=$* cluster=$(TALOS_CLUSTER_NAME ) node=$$ {node} jinjanate talos/machine-patch .yaml.j2 -o talos/machine-patch .yaml && \
162
- talosctl apply-config --insecure --nodes $$ {ip} --file controlplane.yaml --config-patch " @talos/machine-patch .yaml" ; \
174
+ ip_family=$* cluster=$(TALOS_CLUSTER_NAME ) node=$$ {node} jinjanate talos/machine-config .yaml.j2 -o talos/machine-config .yaml && \
175
+ talosctl apply-config --insecure --nodes $$ {ip} --file talos/ controlplane.yaml --config-patch " @talos/machine-config .yaml" ; \
163
176
echo " >>>>>> Talos control plane configuration applied to $$ {node}." ; \
164
177
done
165
178
@sudo virsh list --name | grep ' ^$(TALOS_WORKER_NODE)' | while read node; do \
166
179
echo " >>>>>> Applying Talos worker configuration to $$ {node}..." ; \
167
180
ip=$$(sudo virsh domifaddr --full "$${node}" | grep -w vnet0 | grep -iw ipv4 | awk '{print $$NF}' | awk -F/ '{print $$1}' ) ; \
168
- ip_family=$* cluster=$(TALOS_CLUSTER_NAME ) node=$$ {node} jinjanate talos/machine-patch .yaml.j2 -o talos/machine-patch .yaml && \
169
- talosctl apply-config --insecure --nodes $$ {ip} --file worker.yaml --config-patch " @talos/machine-patch .yaml" ; \
181
+ ip_family=$* cluster=$(TALOS_CLUSTER_NAME ) node=$$ {node} jinjanate talos/machine-config .yaml.j2 -o talos/machine-config .yaml && \
182
+ talosctl apply-config --insecure --nodes $$ {ip} --file talos/ worker.yaml --config-patch " @talos/machine-config .yaml" ; \
170
183
echo " >>>>>> Talos worker configuration applied to $$ {node}." ; \
171
184
done
185
+ @$(MAKE ) talos-libvirt-wait-address-$(TALOS_ENDPOINT_IP_FAMILY )
186
+
187
+ .PHONY : talos-init-%
188
+ talos-init-% : talos-libvirt-init talos-prepare-images talos-apply-config-%
189
+ $(eval TALOS_ENDPOINT_IP_FAMILY = $(shell echo $* | sed 's/dual/ipv4/') )
190
+ $(eval TALOS_CONTROL_PLANE_IP = $(TALOS_CONTROL_PLANE_$(shell echo $(TALOS_ENDPOINT_IP_FAMILY ) | tr '[:lower:]' '[:upper:]') ) )
172
191
@echo " >>> Waiting for Talos machines to be ready for bootstrapping..."
173
192
@sudo virsh list --name | grep ' ^$(TALOS_CLUSTER_NAME)-' | while read node; do \
174
- ip=$$(sudo virsh domifaddr --full "$${node}" | grep -w vnet0 | grep -iw ipv4 | awk '{print $$NF}' | awk -F/ '{print $$1}' ) ; \
193
+ ip=$$(sudo virsh domifaddr --full "$${node}" | grep -w vnet0 | grep -iw $( TALOS_ENDPOINT_IP_FAMILY ) | awk '{print $$NF}' | awk -F/ '{print $$1}' ) ; \
175
194
echo " >>>>>> Machine $$ {node} has an ip address $$ {ip}." ; \
176
195
while true ; do \
177
196
stage=$$(talosctl --endpoints $${ip} --nodes $${ip} get machinestatus -o jsonpath='{.spec.stage}' 2>/dev/null ) ; \
@@ -263,7 +282,7 @@ talos-install: talos-install-prepare
263
282
$(MAKE ) install-chart
264
283
265
284
.PHONY : talos-install-%
266
- talos-install-% : talos-install-overlay-$*
285
+ talos-install-% : talos-install-overlay-%
267
286
268
287
.PHONY : talos-install-ipv4
269
288
talos-install-ipv4 : talos-install-overlay-ipv4
0 commit comments