在 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 中插入变量的值。

但是,您可以插入局部变量,如果您想避免在任何地方重复自己,则可以使用这些本地变量。

所以你可以做这样的事情:

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 函数在给定子网中生成主机地址。

所以在你的情况下,你会有这样的东西:

resource "aws_instance" "instance" {
  ...
  private_ip = "${cidrhost(var.subnet, 6)}"
}

这将创建一个私有 IP 地址为 10.250.3.6 的 AWS 实例。然后,这样可以更轻松地创建一系列计算机,这些计算机通过使用 count 元参数递增使用的 IP 地址。

Terraform 不允许在 default 中对变量进行插值声明。所以我得到 ;

Error: variable "myTestVM_subnet": default may not contain interpolations

而且语法错误真的在撞到我的头后得到了修复,所以这是 Terraform 喜欢的;

private_ip_address = "10.250.${element(split(".", "${var.subnet}"), 2)}.5"

最新更新