如何在Terraform中检查CIDR块或IP是否属于某一CIDR范围?
在Terraform中检查CIDR块/IP是否被包含的方法
Terraform没有内置的contains_cidr函数,但可以用**cidrcontains内置函数**实现你需要的功能,它的逻辑完全符合你描述的需求:当第二个CIDR块(或单个IP转成的/32 CIDR)被第一个CIDR块包含时,返回布尔值true,否则返回false。
基础用法示例
# 单个IP(转成/32)被包含,返回true cidrcontains("10.0.0.0/24", "10.0.0.1/32") => true # IP不在目标CIDR范围内,返回false cidrcontains("10.0.0.0/24", "10.1.1.1/32") => false
检查不带掩码的单个IP
如果要检查的是不带/32后缀的单个IP,可以直接拼接成/32格式,或者用cidrhost函数转换:
# 直接拼接/32 cidrcontains("10.0.0.0/24", "10.0.0.5/32") => true # 用cidrhost转换IP为/32 CIDR cidrcontains("10.0.0.0/24", cidrhost("10.0.0.5", 0)) => true
批量检查场景
如果需要批量验证一组IP或CIDR是否都在目标范围内,可以结合for表达式和all函数:
# 验证所有IP都在10.0.0.0/24内 all([for ip in ["10.0.0.1", "10.0.0.20", "10.0.0.100"] : cidrcontains("10.0.0.0/24", "${ip}/32")]) # 所有IP符合时返回true,否则返回false
内容的提问来源于stack exchange,提问作者Klugscheißer
相关产品推荐
相关产品推荐

