15
15
locals {
16
16
k3s_initial_manager = hcloud_server. manager [0 ]
17
17
k3s_initial_manager_private_ip = tolist (local. k3s_initial_manager . network )[0 ]. ip
18
- k3s_tls_san = var. k3s_manager_count > 1 ? hcloud_load_balancer. k3s_manager [0 ]. ipv4 : local. k3s_initial_manager . ipv4_address
18
+ k3s_access_address = var. k3s_manager_count > 1 ? hcloud_load_balancer. k3s_manager [0 ]. ipv4 : local. k3s_initial_manager . ipv4_address
19
19
k3s_join_token = chomp (ssh_sensitive_resource. join_token . result )
20
20
k3s_kubeconfig = chomp (ssh_sensitive_resource. kubeconfig . result )
21
+ k3s_manager_install_command = join (" " , concat (
22
+ [
23
+ " server" ,
24
+ " --write-kubeconfig-mode=0644" ,
25
+ " --disable servicelb" ,
26
+ " --disable traefik" ,
27
+ " --node-name=$(hostname -f)" ,
28
+ " --node-external-ip=$(hostname -I | awk '{print $1}')" , # Public IP
29
+ " --node-ip=$(hostname -I | awk '{print $2}')" , # Private IP
30
+ " --advertise-address=$(hostname -I | awk '{print $2}')" , # Private IP
31
+ ],
32
+ # Set TLS SANs - first, add load balancer or managers's public address
33
+ var. k3s_manager_count > 1 ? [
34
+ " --cluster-init" ,
35
+ " --tls-san=${ hcloud_load_balancer . k3s_manager [0 ]. ipv4 } "
36
+ ] : [
37
+ " --tls-san=${ local . k3s_initial_manager_private_ip } "
38
+ ],
39
+ # Now, add all the servers
40
+ [for o in hcloud_server . manager : " --tls-san=${ tolist (o. network )[0 ]. ip } " ]
41
+ ))
21
42
}
22
43
23
44
resource "ssh_resource" "server_ready" {
@@ -26,6 +47,7 @@ resource "ssh_resource" "server_ready" {
26
47
host = hcloud_server. manager [count . index ]. ipv4_address
27
48
user = local. machine_user
28
49
private_key = file (var. ssh_key )
50
+ port = var. ssh_port
29
51
30
52
timeout = " 5m"
31
53
retry_delay = " 5s"
@@ -47,26 +69,19 @@ resource "ssh_resource" "initial_manager" {
47
69
host = local. k3s_initial_manager . ipv4_address
48
70
user = local. machine_user
49
71
private_key = file (var. ssh_key )
72
+ port = var. ssh_port
50
73
51
74
commands = [
52
75
format (
53
76
" curl -sfL %s | INSTALL_K3S_EXEC=\" %s\" %s sh -" ,
54
77
var. k3s_download_url ,
55
78
// Install configuration
56
- join (" " , [
57
- " server" ,
58
- " --write-kubeconfig-mode=0644" ,
59
- " --disable servicelb" ,
60
- " --disable traefik" ,
61
- " --tls-san=${ local . k3s_tls_san } " ,
62
- " --node-name=$(hostname -f)" ,
63
- " --node-external-ip=$(hostname -I | awk '{print $1}')" , # Public IP
64
- " --node-ip=$(hostname -I | awk '{print $2}')" , # Private IP
65
- " --advertise-address=$(hostname -I | awk '{print $2}')" , # Private IP
66
- ]),
79
+ local. k3s_manager_install_command ,
67
80
// Other k3s configuration
68
81
" "
69
- )
82
+ ),
83
+ # Ensure k3s is running
84
+ " sudo systemctl start k3s"
70
85
]
71
86
72
87
timeout = " 5m"
@@ -86,6 +101,7 @@ resource "ssh_sensitive_resource" "join_token" {
86
101
host = local. k3s_initial_manager . ipv4_address
87
102
user = local. machine_user
88
103
private_key = file (var. ssh_key )
104
+ port = var. ssh_port
89
105
90
106
commands = [
91
107
" sudo cat /var/lib/rancher/k3s/server/token"
@@ -103,9 +119,10 @@ resource "ssh_sensitive_resource" "kubeconfig" {
103
119
host = local. k3s_initial_manager . ipv4_address
104
120
user = local. machine_user
105
121
private_key = file (var. ssh_key )
122
+ port = var. ssh_port
106
123
107
124
commands = [
108
- format (" sudo cat /etc/rancher/k3s/k3s.yaml | sed 's/%s/%s/'" , " 127.0.0.1" , local. k3s_tls_san )
125
+ format (" sudo cat /etc/rancher/k3s/k3s.yaml | sed 's/%s/%s/'" , " 127.0.0.1" , local. k3s_access_address )
109
126
]
110
127
111
128
timeout = " 5m"
@@ -115,3 +132,40 @@ resource "ssh_sensitive_resource" "kubeconfig" {
115
132
ssh_resource . initial_manager
116
133
]
117
134
}
135
+
136
+ resource "ssh_resource" "additional_managers" {
137
+ count = var. k3s_manager_count - 1
138
+
139
+ host = hcloud_server. manager [count . index + 1 ]. ipv4_address
140
+ user = local. machine_user
141
+ private_key = file (var. ssh_key )
142
+ port = var. ssh_port
143
+
144
+ commands = [
145
+ format (
146
+ " curl -sfL %s | INSTALL_K3S_EXEC=\" %s\" %s sh -" ,
147
+ var. k3s_download_url ,
148
+ // Install configuration
149
+ local. k3s_manager_install_command ,
150
+ // Other k3s configuration
151
+ join (" " , [
152
+ " K3S_URL=https://${ local . k3s_initial_manager_private_ip } :6443" ,
153
+ " K3S_TOKEN=${ local . k3s_join_token } "
154
+ ])
155
+ ),
156
+ # Ensure k3s is running
157
+ " sudo systemctl start k3s"
158
+ ]
159
+
160
+ timeout = " 5m"
161
+ retry_delay = " 5s"
162
+
163
+
164
+ triggers = {
165
+ always_run = timestamp ()
166
+ }
167
+
168
+ depends_on = [
169
+ ssh_resource . initial_manager
170
+ ]
171
+ }
0 commit comments