2022-02-19 13:38:24 +01:00
module " control_planes " {
source = " ./modules/host "
2022-04-06 20:38:24 +02:00
for_each = local . control_plane_nodepools
2022-04-12 14:48:43 +02:00
name = " ${ var . use_cluster_name_in_node_name ? " ${ var . cluster_name } - " : " " } ${ each . value . nodepool_name } "
2022-02-20 11:30:07 +01:00
ssh_keys = [ hcloud_ssh_key . k3s . id ]
public_key = var . public_key
private_key = var . private_key
additional_public_keys = var . additional_public_keys
firewall_ids = [ hcloud_firewall . k3s . id ]
2022-04-13 09:29:29 +02:00
placement_group_id = var . placement_group_disable ? 0 : element ( hcloud_placement_group . control_plane . * . id , ceil ( each . value . index / 10 ) )
2022-04-06 20:38:24 +02:00
location = each . value . location
server_type = each . value . server_type
2022-04-09 09:51:11 +02:00
ipv4_subnet_id = hcloud_network_subnet . subnet [ [ for i , v in var . control_plane_nodepools : i if v . name == each . value . nodepool_name ] [ 0 ] + 1 ] . id
2022-03-06 00:59:19 +01:00
# We leave some room so 100 eventual Hetzner LBs that can be created perfectly safely
2022-03-11 14:24:24 +01:00
# It leaves the subnet with 254 x 254 - 100 = 64416 IPs to use, so probably enough.
2022-04-09 09:51:11 +02:00
private_ipv4 = cidrhost ( local . network_ipv4_subnets [ [ for i , v in var . control_plane_nodepools : i if v . name == each . value . nodepool_name ] [ 0 ] + 1 ] , each . value . index + 101 )
2022-02-06 08:40:51 +01:00
labels = {
" provisioner " = " terraform " ,
2022-02-19 13:38:24 +01:00
" engine " = " k3s "
2022-02-06 08:40:51 +01:00
}
2022-02-25 19:16:38 +01:00
depends_on = [
hcloud_network_subnet . subnet
]
2022-02-19 13:38:24 +01:00
}
2022-02-06 08:40:51 +01:00
2022-02-19 13:38:24 +01:00
resource " null_resource " " control_planes " {
2022-04-06 20:38:24 +02:00
for_each = local . control_plane_nodepools
2022-02-17 13:19:21 +01:00
2022-02-19 13:38:24 +01:00
triggers = {
2022-04-06 20:38:24 +02:00
control_plane_id = module . control_planes [ each . key ] . id
2022-02-06 08:40:51 +01:00
}
2022-02-19 13:38:24 +01:00
connection {
user = " root "
private_key = local . ssh_private_key
agent_identity = local . ssh_identity
2022-04-06 20:38:24 +02:00
host = module . control_planes [ each . key ] . ipv4_address
2022-02-06 08:40:51 +01:00
}
# Generating k3s server config file
provisioner " file " {
2022-02-07 12:56:13 +01:00
content = yamlencode ( {
2022-04-06 20:38:24 +02:00
node - name = module . control_planes [ each . key ] . name
2022-04-12 17:35:09 +02:00
server = length ( module . control_planes ) = = 1 ? null : " https:// ${ module . control_planes [ each . key ] . private_ipv4_address == module . control_planes [ keys ( module . control_planes ) [ 0 ] ] . private_ipv4_address ? module . control_planes [ keys ( module . control_planes ) [ 1 ] ] . private_ipv4_address : module . control_planes [ keys ( module . control_planes ) [ 0 ] ] . private_ipv4_address } :6443 "
2022-02-16 04:24:20 +01:00
token = random_password . k3s_token . result
2022-02-07 12:56:13 +01:00
disable - cloud - controller = true
2022-03-22 11:47:51 +01:00
disable = local . disable_extras
2022-02-07 12:56:13 +01:00
flannel - iface = " eth1 "
kubelet - arg = " cloud-provider=external "
2022-04-06 20:38:24 +02:00
node - ip = module . control_planes [ each . key ] . private_ipv4_address
advertise - address = module . control_planes [ each . key ] . private_ipv4_address
node - label = each . value . labels
node - taint = each . value . taints
2022-02-06 08:40:51 +01:00
} )
2022-02-16 03:18:40 +01:00
destination = " /tmp/config.yaml "
}
# Install k3s server
provisioner " remote-exec " {
inline = local . install_k3s_server
}
2022-02-20 02:04:37 +01:00
# Start the k3s server and wait for it to have started correctly
2022-02-06 08:40:51 +01:00
provisioner " remote-exec " {
inline = [
2022-02-20 13:36:41 +01:00
" systemctl start k3s 2> /dev/null " ,
2022-02-10 03:01:40 +01:00
< < - EOT
2022-02-16 03:18:40 +01:00
timeout 120 bash < < EOF
until systemctl status k3s > / dev / null ; do
2022-02-20 13:36:41 +01:00
systemctl start k3s 2 > / dev / null
2022-02-16 03:18:40 +01:00
echo " Waiting for the k3s server to start... "
2022-02-16 04:24:20 +01:00
sleep 2
2022-02-10 03:01:40 +01:00
done
2022-02-16 03:18:40 +01:00
EOF
2022-02-10 03:01:40 +01:00
EOT
2022-02-06 08:40:51 +01:00
]
}
depends_on = [
2022-02-19 13:38:24 +01:00
null_resource . first_control_plane ,
2022-02-25 19:16:38 +01:00
hcloud_network_subnet . subnet
2022-02-06 08:40:51 +01:00
]
}