Files
IKT210-kubernetes-cluster/terraform/compute.tf
2026-07-26 09:35:26 +02:00

99 lines
2.9 KiB
HCL

locals {
image_name = "talos-1.10.2"
flavor_name = "medium"
net_id = openstack_networking_network_v2.net.id
secgroup_id = openstack_networking_secgroup_v2.secgroup.id # Using existing security group ID
cp_fixed_ips = ["10.0.0.10", "10.0.0.11", "10.0.0.12"]
worker_fixed_ips = ["10.0.0.20", "10.0.0.21", "10.0.0.22"]
}
# 3 control-planes
resource "openstack_compute_instance_v2" "cp" {
count = 3
name = "ikt210-g04-control-plane-${count.index}"
image_name = local.image_name
flavor_name = local.flavor_name
security_groups = [local.secgroup_id]
user_data = yamlencode(merge(
yamldecode(file("./../talos/worker.yaml")),
{
cluster = merge(
yamldecode(file("./../talos/controlplane.yaml")).cluster,
{
controlPlane = {
endpoint = "https://${openstack_networking_floatingip_v2.talos_ikt210_g04_floatingip[0].address}:6443"
}
}
)
machine = merge(
yamldecode(file("./../talos/controlplane.yaml")).machine,
{
certSANs = [
openstack_networking_floatingip_v2.talos_ikt210_g04_floatingip[count.index].address,
]
}
)
}
))
network {
uuid = local.net_id
fixed_ip_v4 = local.cp_fixed_ips[count.index]
}
}
# 3 workers
resource "openstack_compute_instance_v2" "worker" {
count = 3
name = "ikt210-g04-worker-${count.index}"
image_name = local.image_name
flavor_name = local.flavor_name
security_groups = [local.secgroup_id]
user_data = yamlencode(merge(
yamldecode(file("./../talos/worker.yaml")),
{
cluster = merge(
yamldecode(file("./../talos/worker.yaml")).cluster,
{
controlPlane = {
endpoint = "https://${openstack_networking_floatingip_v2.talos_ikt210_g04_floatingip[0].address}:6443"
}
}
)
machine = merge(
yamldecode(file("./../talos/worker.yaml")).machine,
{
certSANs = [
openstack_networking_floatingip_v2.talos_ikt210_g04_floatingip[count.index].address,
]
}
)
}
))
network {
uuid = local.net_id
fixed_ip_v4 = local.worker_fixed_ips[count.index]
}
}
# Reserve 3 floating IPs for the control-planes
resource "openstack_networking_floatingip_v2" "talos_ikt210_g04_floatingip" {
count = 3
pool = "provider"
# Openstack will automatically assign available IPs
}
# Associate each FIP with the corresponding control-plane
resource "openstack_compute_floatingip_associate_v2" "cp_assoc" {
count = 3
floating_ip = openstack_networking_floatingip_v2.talos_ikt210_g04_floatingip[count.index].address
instance_id = openstack_compute_instance_v2.cp[count.index].id
fixed_ip = openstack_compute_instance_v2.cp[count.index].network[0].fixed_ip_v4
}