循环浏览地形列表



如果我们创建多个aws_instance资源:

variable "cluster_size" {
type = number
default = 4
}
variable "private_subnets" {
type = list(string)
default = ["subnet-a", "subnet-b", "subnet-c"]
}
resource "aws_instance" "cassandra" {
instance_type = var.instance_type
count         = var.cluster_size
ami           = var.ami
key_name      = var.security_key.name
subnet_id     = var.private_subnets[count.index]
}

如您所见,我有 3 个私有子网,但有 4 个主机要运行。如何循环浏览private_subnets列表?

所以

  • 主机 0 = 子网 A
  • 主机 1 = 子网 B
  • 主机 2 = 子网 C
  • 主机 3 = 子网 A(即循环到第一个元素(。

例如,Python有itertools.cycle

如何在Terraform的声明式语言中实现循环?

element函数会自动执行此操作,在序列末尾环绕。这几乎是该函数的主要用途,因为他们引入了您在那里使用的带有方括号的切片表示法。

variable "cluster_size" {
type = number
default = 4
}
variable "private_subnets" {
type = list(string)
default = ["subnet-a", "subnet-b", "subnet-c"]
}
resource "aws_instance" "cassandra" {
instance_type = var.instance_type
count         = var.cluster_size
ami           = var.ami
key_name      = var.security_key.name
subnet_id     = element(var.private_subnets, count.index)
}

或者,您可以使用%运算符取模,就像在其他编程语言中一样:

variable "cluster_size" {
type = number
default = 4
}
variable "private_subnets" {
type = list(string)
default = ["subnet-a", "subnet-b", "subnet-c"]
}
resource "aws_instance" "cassandra" {
instance_type = var.instance_type
count         = var.cluster_size
ami           = var.ami
key_name      = var.security_key.name
subnet_id     = var.private_subnets[count.index % length(var.private_subnets)]
}

第一个选项在需要使用方括号切片表示法时更常见,当您不需要环绕时更常见。

相关内容

  • 没有找到相关文章

最新更新