# Cloud-init configuration for all VMs # # This file manages cloud-init disks for all VMs using the proxmox_cloud_init_disk resource. # VMs with flake_branch set will include NIXOS_FLAKE_BRANCH environment variable. resource "proxmox_cloud_init_disk" "ci" { for_each = local.vm_configs name = each.key pve_node = each.value.target_node storage = each.value.storage # User data includes SSH keys and optionally NIXOS_FLAKE_BRANCH user_data = <<-EOT #cloud-config ssh_authorized_keys: - ${each.value.ssh_public_key} ${each.value.flake_branch != null ? <<-BRANCH write_files: - path: /etc/environment content: | NIXOS_FLAKE_BRANCH=${each.value.flake_branch} append: true BRANCH : ""} EOT # Network configuration - static IP or DHCP network_config = yamlencode({ version = 1 config = [{ type = "physical" name = "ens18" subnets = each.value.ip != null ? [{ type = "static" address = each.value.ip gateway = each.value.gateway dns_nameservers = split(" ", each.value.nameservers) dns_search = [each.value.search_domain] }] : [{ type = "dhcp" }] }] }) # Instance metadata meta_data = yamlencode({ instance_id = sha1(each.key) local-hostname = each.key }) }