我想将一个变量的子字符串声明给另一个变量。我测试了使用 terraform 控制台获取子字符串。
> echo 'element(split (".", "10.250.3.0/24"), 2)' | terraform console
> 3
我的子网是 10.250.3.0/24,我希望我的虚拟机获得此子网掩码 10.250.3.6 内的私有 IP 地址。我希望通过查看子网地址来自动分配它。我尝试过什么;
test.tf
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"
}
然后我测试它
terraform console
>Failed to load root config module: Error parsing /home/anum/test/test.tf: At 9:25: illegal char
我猜这只是简单的语法问题。但不明白是什么!
正如您所看到的,您无法在 Terraform 中插入变量的值。
但是,您可以插入locals https://www.terraform.io/docs/configuration/locals.html相反,如果您想避免在任何地方重复自己,请使用它们。
所以你可以这样做:
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}"
}
哪里的aws_instance
仅用于演示,可以是任何需要/采用 IP 地址的资源。
作为这个特定用例中更好的选择,尽管您可以使用cidrhost https://www.terraform.io/docs/configuration/interpolation.html#cidrhost-iprange-hostnum-函数生成给定子网中的主机地址。
所以在你的情况下,你会得到这样的东西:
resource "aws_instance" "instance" {
...
private_ip = "${cidrhost(var.subnet, 6)}"
}
这将创建一个私有 IP 地址为的 AWS 实例10.250.3.6
。这样就可以更轻松地创建一系列机器,通过使用来增加所使用的 IP 地址count
元参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)