declare a variable using `execute` Interpolation in Terraform
我想将一个变量的子字符串声明为另一个变量。我测试了使用 terraform 控制台获取子字符串。
1 2 | > echo 'element(split (".","10.250.3.0/24"), 2)' | terraform console > 3 |
我的子网是 10.250.3.0/24,我希望我的虚拟机在这个子网掩码 10.250.3.6 内获得私有 IP 地址。我希望通过查看子网地址来自动分配它。我试过的;
test.tf
1 2 3 4 5 6 7 8 9 10 | variable subnet { type ="string" default ="10.250.3.0/24" description ="subnet mask myTestVM will live" } variable myTestVM_subnet { type ="string" default ="10.250." ${element(split(".", var.trusted_zone_onpremises_subnet), 2)}".6" } |
然后我通过
对其进行测试
1 2 | terraform console >Failed to load root config module: Error parsing /home/anum/test/test.tf: At 9:25: illegal char |
我猜这只是简单的语法问题。但不知道是什么!
如您所见,您无法在 Terraform 中插入变量的值。
但是,如果您想避免在任何地方重复自己,您可以插入局部变量并使用它们。
所以你可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | variable"subnet" { type ="string" default ="10.250.3.0/24" description ="subnet mask myTestVM will live" } locals { myTestVM_subnet ="10.250.${element(split(".", var.trusted_zone_onpremises_subnet), 2)}.6" } resource"aws_instance""instance" { ... private_ip ="${local.myTestVM_subnet}" } |
尽管您可以使用
所以在你的情况下,你会得到这样的东西:
1 2 3 4 | resource"aws_instance""instance" { ... private_ip ="${cidrhost(var.subnet, 6)}" } |
这将创建一个私有 IP 地址为
Terraform 不允许在
1 | Error: variable"myTestVM_subnet": default may not contain interpolations |
在敲了我的脑袋之后语法错误真的得到了修复,所以这就是 Terraform 喜欢的;
1 | private_ip_address ="10.250.${element(split(".","${var.subnet}"), 2)}.5" |