From fca50562c3290b170ad5e0efbc1396623020dfcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torjus=20H=C3=A5kestad?= Date: Sun, 1 Feb 2026 16:54:33 +0100 Subject: [PATCH] terraform: fix cloud-init conditional type inconsistency Fix OpenTofu error where static IP and DHCP branches had different object structures in the subnets array. Move conditional to network_config level so both branches return complete, consistent yamlencode() results. Error was: "The true and false result expressions must have consistent types" Solution: Make network_config itself conditional rather than the subnets array, ensuring both branches return the same type (string from yamlencode). Co-Authored-By: Claude Sonnet 4.5 --- terraform/cloud-init.tf | 49 +++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/terraform/cloud-init.tf b/terraform/cloud-init.tf index 837a2fb..de61961 100644 --- a/terraform/cloud-init.tf +++ b/terraform/cloud-init.tf @@ -25,27 +25,34 @@ resource "proxmox_cloud_init_disk" "ci" { : ""} 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" + # Network configuration - static IP or DHCP + network_config = each.value.ip != null ? yamlencode({ + version = 1 + config = [{ + type = "physical" + name = "ens18" + subnets = [{ + type = "static" + address = each.value.ip + gateway = each.value.gateway + dns_nameservers = split(" ", each.value.nameservers) + dns_search = [each.value.search_domain] + }] }] - }] -}) + }) : yamlencode({ + version = 1 + config = [{ + type = "physical" + name = "ens18" + subnets = [{ + type = "dhcp" + }] + }] + }) -# Instance metadata -meta_data = yamlencode({ - instance_id = sha1(each.key) - local-hostname = each.key -}) + # Instance metadata + meta_data = yamlencode({ + instance_id = sha1(each.key) + local-hostname = each.key + }) }