- OpenTofu 语言
- 函数
- cidrsubnets
cidrsubnets
函数
cidrsubnets
计算特定 CIDR 前缀内一系列连续的 IP 地址范围。
cidrsubnets(prefix, newbits...)
prefix
必须使用 CIDR 表示法给出,如 RFC 4632 第 3.1 节 中所定义。
上面指示为 newbits
的其余参数,每个参数都指定一个返回的地址范围的额外网络前缀位数。因此,返回值是一个列表,每个 newbits
参数对应一个元素,每个元素都是一个字符串,包含以 CIDR 表示法表示的地址范围。
有关 IP 地址概念的更多信息,请参阅相关函数 cidrsubnet
的文档。cidrsubnet
计算前缀内单个子网地址,同时允许您指定其子网编号,而 cidrsubnets
可以一次计算多个子网,这些子网的大小可能不同,并自动分配子网编号。
在使用此函数将地址空间划分为网络地址计划的一部分时,一旦将网络地址分配给实际基础设施,您绝不能更改任何现有参数,否则以后的地址分配将失效。但是,只要有足够的地址空间可用,您可以安全地将新参数附加到现有调用中。
此函数接受 IPv6 和 IPv4 前缀,结果始终使用与给定前缀相同的寻址方案。
注意
由于历史原因,此函数将具有前导零的 IPv4 地址八位字节解释为十进制数,这与某些将它们解释为八进制数的其他系统相反。我们为了向后兼容性保留了此行为,但建议不要依赖此行为。
注意
hashicorp/subnets/cidr
模块 封装了 cidrsubnets
以提供其他功能,用于为您的网络分配符号名称并跳过过时分配的前缀。其文档包含几个流行的云虚拟网络平台的用法示例。
示例
> cidrsubnets("10.1.0.0/16", 4, 4, 8, 4)
[
"10.1.0.0/20",
"10.1.16.0/20",
"10.1.32.0/24",
"10.1.48.0/20",
]
> cidrsubnets("fd00:fd12:3456:7890::/56", 16, 16, 16, 32)
[
"fd00:fd12:3456:7800::/72",
"fd00:fd12:3456:7800:100::/72",
"fd00:fd12:3456:7800:200::/72",
"fd00:fd12:3456:7800:300::/88",
]
您可以使用嵌套的 cidrsubnets
调用和 for
表达式 来简洁地分配网络地址块组
> [for cidr_block in cidrsubnets("10.0.0.0/8", 8, 8, 8, 8) : cidrsubnets(cidr_block, 4, 4)]
[
[
"10.0.0.0/20",
"10.0.16.0/20",
],
[
"10.1.0.0/20",
"10.1.16.0/20",
],
[
"10.2.0.0/20",
"10.2.16.0/20",
],
[
"10.3.0.0/20",
"10.3.16.0/20",
],
]
相关函数
cidrhost
计算给定网络地址前缀内单个主机的 IP 地址。cidrnetmask
将 CIDR 表示法中的 IPv4 网络前缀转换为网络掩码表示法。cidrsubnet
计算单个子网地址,允许您指定其网络编号。