2022-03-04 22:04:07 +01:00
resource " random_pet " " control_planes " {
2022-03-04 23:41:49 +01:00
count = var . control_plane_count
length = 1
2022-03-04 22:04:07 +01:00
}
2022-02-19 13:38:24 +01:00
module " control_planes " {
source = " ./modules/host "
2022-03-05 04:02:09 +01:00
count = var . control_plane_count
2022-03-05 05:33:29 +01:00
name = var . use_cluster_name_in_node_name ? " ${ random_pet . cluster . id } -control-plane- ${ random_pet . control_planes [ count . index ] . id } " : " control-plane- ${ random_pet . control_planes [ count . index ] . id } "
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 ]
placement_group_id = hcloud_placement_group . k3s . id
location = var . location
server_type = var . control_plane_server_type
2022-02-26 12:26:14 +01:00
ipv4_subnet_id = hcloud_network_subnet . subnet [ " control_plane " ] . id
private_ipv4 = cidrhost ( var . network_ipv4_subnets [ " control_plane " ] , count . index + 1 )
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-19 13:38:24 +01:00
hcloud_token = var . hcloud_token
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-02-26 12:04:45 +01:00
count = var . control_plane_count
2022-02-17 13:19:21 +01:00
2022-02-19 13:38:24 +01:00
triggers = {
control_plane_id = module . control_planes [ count . index ] . 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
host = module . control_planes [ count . index ] . 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-02-19 13:38:24 +01:00
node - name = module . control_planes [ count . index ] . name
2022-02-22 08:50:54 +01:00
server = " https:// ${ element ( module . control_planes . * . private_ipv4_address , count . index > 0 ? 0 : 1 ) } :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-02-19 13:38:24 +01:00
disable = [ " servicelb " , " local-storage " ]
2022-02-07 12:56:13 +01:00
flannel - iface = " eth1 "
kubelet - arg = " cloud-provider=external "
2022-02-22 08:50:54 +01:00
node - ip = module . control_planes [ count . index ] . private_ipv4_address
advertise - address = module . control_planes [ count . index ] . private_ipv4_address
2022-02-08 09:12:16 +01:00
node - taint = var . allow_scheduling_on_control_plane ? [ ] : [ " node-role.kubernetes.io/master:NoSchedule " ]
2022-02-16 11:06:47 +01:00
node - label = var . automatically_upgrade_k3s ? [ " k3s_upgrade=true " ] : [ ]
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
]
}