fix: derive k3s node IPs from terraform private addresses
Some checks failed
Deploy Cluster / Terraform (push) Successful in 18s
Deploy Cluster / Ansible (push) Failing after 3m9s

This commit is contained in:
2026-03-01 03:08:56 +00:00
parent f0dd31c552
commit b5b8f89dc2
3 changed files with 39 additions and 15 deletions

View File

@@ -1,7 +1,6 @@
#!/usr/bin/env python3
import json
import os
import subprocess
import sys
from pathlib import Path
@@ -27,9 +26,34 @@ def get_terraform_outputs():
def main():
outputs = get_terraform_outputs()
control_plane_ips = outputs["control_plane_ips"]["value"]
control_plane_private_ips = outputs["control_plane_private_ips"]["value"]
worker_ips = outputs["worker_ips"]["value"]
worker_private_ips = outputs["worker_private_ips"]["value"]
control_planes = [
{
"name": f"cp-{i + 1}",
"public_ip": public_ip,
"private_ip": private_ip,
}
for i, (public_ip, private_ip) in enumerate(
zip(control_plane_ips, control_plane_private_ips)
)
]
workers = [
{
"name": f"worker-{i + 1}",
"public_ip": public_ip,
"private_ip": private_ip,
}
for i, (public_ip, private_ip) in enumerate(zip(worker_ips, worker_private_ips))
]
data = {
"control_plane_ips": outputs["control_plane_ips"]["value"],
"worker_ips": outputs["worker_ips"]["value"],
"control_planes": control_planes,
"workers": workers,
"private_key_file": outputs["ssh_private_key_path"]["value"],
}

View File

@@ -1,11 +1,11 @@
[control_plane]
{% for ip in control_plane_ips %}
{{ ip }}
{% for node in control_planes %}
{{ node.name }} ansible_host={{ node.public_ip }} k3s_private_ip={{ node.private_ip }}
{% endfor %}
[workers]
{% for ip in worker_ips %}
{{ ip }}
{% for node in workers %}
{{ node.name }} ansible_host={{ node.public_ip }} k3s_private_ip={{ node.private_ip }}
{% endfor %}
[cluster:children]

View File

@@ -20,10 +20,10 @@
vars:
k3s_primary: true
k3s_token: "{{ lookup('password', '/dev/null length=32 chars=ascii_letters,digits') }}"
k3s_primary_private_ip: "{{ ansible_all_ipv4_addresses | select('match', '^10\\.') | first }}"
k3s_primary_public_ip: "{{ ansible_default_ipv4.address }}"
k3s_primary_ip: "{{ ansible_all_ipv4_addresses | select('match', '^10\\.') | first }}"
k3s_node_ip: "{{ ansible_all_ipv4_addresses | select('match', '^10\\.') | first }}"
k3s_primary_private_ip: "{{ k3s_private_ip }}"
k3s_primary_public_ip: "{{ ansible_host }}"
k3s_primary_ip: "{{ k3s_private_ip }}"
k3s_node_ip: "{{ k3s_private_ip }}"
roles:
- k3s-server
@@ -40,8 +40,8 @@
- name: Set join token fact
set_fact:
k3s_token: "{{ node_token.stdout }}"
k3s_primary_private_ip: "{{ ansible_all_ipv4_addresses | select('match', '^10\\.') | first }}"
k3s_primary_public_ip: "{{ ansible_default_ipv4.address }}"
k3s_primary_private_ip: "{{ k3s_private_ip }}"
k3s_primary_public_ip: "{{ ansible_host }}"
- name: Fetch kubeconfig
fetch:
@@ -58,7 +58,7 @@
k3s_token: "{{ hostvars[groups['control_plane'][0]]['k3s_token'] }}"
k3s_primary_ip: "{{ hostvars[groups['control_plane'][0]]['k3s_primary_private_ip'] }}"
k3s_primary_public_ip: "{{ hostvars[groups['control_plane'][0]]['k3s_primary_public_ip'] }}"
k3s_node_ip: "{{ ansible_all_ipv4_addresses | select('match', '^10\\.') | first }}"
k3s_node_ip: "{{ k3s_private_ip }}"
roles:
- k3s-server
@@ -70,7 +70,7 @@
vars:
k3s_token: "{{ hostvars[groups['control_plane'][0]]['k3s_token'] }}"
k3s_server_url: "https://{{ hostvars[groups['control_plane'][0]]['k3s_primary_private_ip'] }}:6443"
k3s_node_ip: "{{ ansible_all_ipv4_addresses | select('match', '^10\\.') | first }}"
k3s_node_ip: "{{ k3s_private_ip }}"
roles:
- k3s-agent