terraform-incus/modules/instance/locals.tf
Ben Vincent cb67816eee feat: initial commit
- have been working on this for some time now
2025-05-30 22:36:55 +10:00

48 lines
1.3 KiB
HCL

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)
}