Files
terraform-libvirt-lab/main.tf
T
2025-12-26 15:47:40 +03:00

63 lines
1.5 KiB
Terraform

resource "libvirt_network" "default" {
name = "${var.naming_prefix}default"
mode = "nat"
addresses = local.cidrs
mtu = var.mtu
autostart = true
dns {
local_only = false
forwarders {
address = "1.1.1.1"
}
}
}
resource "libvirt_volume" "base" {
name = "${var.naming_prefix}ubuntu_noble"
source = local.image_source
}
resource "libvirt_volume" "node_image" {
name = "${var.naming_prefix}node_image"
base_volume_id = libvirt_volume.base.id
size = 10737418240
}
data "template_file" "user_data" {
for_each = local.user_templates
template = file("${path.root}/configs/cloud-init/${each.value}")
vars = {
hosts_file = base64encode(file("${path.root}/configs/hosts"))
}
}
data "template_file" "network_config" {
for_each = local.user_templates
template = file("${path.root}/configs/cloud-init/network.yaml.tpl")
vars = {
ipv4_address = local.node_addrs[each.key].ipv4
ipv4_prefix = local.ipv4_prefix
ipv4_gateway = local.ipv4_gateway
ipv6_address = local.node_addrs[each.key].ipv6
ipv6_prefix = local.ipv6_prefix
ipv6_gateway = local.ipv6_gateway
}
}
module "nodes" {
source = "./modules/instance"
for_each = local.nodes
name = "${var.naming_prefix}${each.key}"
network_id = libvirt_network.default.id
volume_base_id = each.value.image
user_data = each.value.user_data
network_config = each.value.network_config
vcpu = var.node_cpu
memory = var.node_mem
}