在 Terraform 中是否有编程方式将 CIDR 块减半?

Is there a programatic way to half a CIDR block in Terraform?

我有一个 CIDR 块,我想把它减半,这样我就有两个范围可以在我的 Terraform 项目中使用。

例如10.10.10.0/24,其中包括 10.10.10.0 - 10.10.10.255 范围内的 IP 可以拆分为 10.10.10.0/25 & 10.10.10.128/25

我试过用 cidrsubnet function 看这个,但我真的不明白如何使用它从第一个范围到第二个范围。

如有任何帮助,我们将不胜感激!

正如您所指出的,这可以通过 cidrsubnet 来完成。

output "first_half" {
  value = cidrsubnet("10.10.10.0/24", 1, 0) # 10.10.10.0/25
}

output "second_half" {
  value = cidrsubnet("10.10.10.0/24", 1, 1) # 10.10.10.128/25
}

解释:

cidrsubnet 接受 3 个参数:cidrsubnet(prefix, newbits, netnum).

  • prefix 是您要减半的实际 CIDR 范围。
  • newbits 是您要扩展前缀的附加位数。例如,如果您有 /24 前缀,而您想要有 /25 前缀,则 newbits 是 25 和 24 之间的差值:25 - 24 = 1
  • netnum是一个不超过newbits位二进制数的整数。在我们的例子中,它可以是 010 将是 10.10.10.0/25 的范围,而 1 将代表后半部分,即 10.10.10.128/25

再给你举个例子,让它更容易理解,让我们 cut 10.10.10.0/24 if 4 ranges:

我们知道,我们需要 /26 个范围,因此 26 - 24 = 2 用于 newbits。对于netnum,我们可以有0、1、2、3,其二进制数为00011011。 =39=]

cidrsubnet("10.10.10.0/24", 2, 0) # 10.10.10.0/26
cidrsubnet("10.10.10.0/24", 2, 1) # 10.10.10.64/26
cidrsubnet("10.10.10.0/24", 2, 2) # 10.10.10.128/26
cidrsubnet("10.10.10.0/24", 2, 3) # 10.10.10.192/26