module "vm" { source = "../../modules/proxmox-vm" for_each = var.vms name = each.key vm_id = var.vm_id_base + tonumber(split(".", each.value.ip)[3]) node_name = var.proxmox.node_name template_vm_id = var.proxmox.template_vm_id pool_id = var.proxmox.pool_id datastore_id = var.proxmox.datastore_id bridge = var.proxmox.bridge cores = each.value.cores memory = each.value.memory os_disk_size = each.value.os_disk_size osd_disks = each.value.osd_disks osd_disk_size = each.value.osd_disk_size ipv4_address = "${each.value.ip}/${var.network.prefix}" ipv4_gateway = var.network.gateway dns_servers = var.network.dns_servers ssh_user = var.ssh.user ssh_public_keys = [trimspace(file(pathexpand(var.ssh.public_key_file)))] tags = concat(["ceph-course", var.install_name], each.value.roles) } locals { roles = sort(distinct(flatten([for vm in var.vms : vm.roles]))) # Роли из tfvars превращаются в группы Ansible, а дальше в labels cephadm inventory = { all = { vars = { ansible_user = var.ssh.user } children = merge( { ceph = { hosts = { for name, vm in module.vm : name => { ansible_host = vm.ipv4 } } } }, { for role in local.roles : role => { hosts = { for name, vm in var.vms : name => null if contains(vm.roles, role) } } }, ) } } } resource "local_file" "inventory" { filename = "${path.root}/../../../ansible/inventories/${var.install_name}/hosts.yml" content = "# Сгенерировано Terraform (terraform/envs/${var.install_name}), не редактировать вручную\n${yamlencode(local.inventory)}" file_permission = "0644" directory_permission = "0755" }