locals { netmask_to_prefix = { "0.0.0.0" = 0 "128.0.0.0" = 1 "192.0.0.0" = 2 "224.0.0.0" = 3 "240.0.0.0" = 4 "248.0.0.0" = 5 "252.0.0.0" = 6 "254.0.0.0" = 7 "255.0.0.0" = 8 "255.128.0.0" = 9 "255.192.0.0" = 10 "255.224.0.0" = 11 "255.240.0.0" = 12 "255.248.0.0" = 13 "255.252.0.0" = 14 "255.254.0.0" = 15 "255.255.0.0" = 16 "255.255.128.0" = 17 "255.255.192.0" = 18 "255.255.224.0" = 19 "255.255.240.0" = 20 "255.255.248.0" = 21 "255.255.252.0" = 22 "255.255.254.0" = 23 "255.255.255.0" = 24 "255.255.255.128" = 25 "255.255.255.192" = 26 "255.255.255.224" = 27 "255.255.255.240" = 28 "255.255.255.248" = 29 "255.255.255.252" = 30 "255.255.255.254" = 31 "255.255.255.255" = 32 } prefix_length = lookup(local.netmask_to_prefix, var.cobbler_netmask, 24) host_bits = 32 - local.prefix_length total_hosts = pow(2, local.host_bits) last_usable_ip = local.total_hosts - 2 # derive subnet base from instance IP cidr_block = cidrsubnet("${incus_instance.this.ipv4_address}/${local.prefix_length}", 0, 0) # get the last usable IP gateway_ip = cidrhost(local.cidr_block, local.last_usable_ip) }