循环浏览 Terraform 列表
Cycle through Terraform list
如果我们创建多个 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
- host 3 = subnet-a (即循环到第一个元素)。
例如 Python 有 itertools.cycle
Terraform的声明式语言如何实现循环?
element
function 自动执行此操作,在序列末尾回绕。这几乎是该函数的主要用途,因为他们引入了您在那里使用的带有方括号的切片符号。
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)]
}
第一个选项在需要环绕时更常见,而在不需要环绕时更常见的是方括号切片符号。
如果我们创建多个 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
- host 3 = subnet-a (即循环到第一个元素)。
例如 Python 有 itertools.cycle
Terraform的声明式语言如何实现循环?
element
function 自动执行此操作,在序列末尾回绕。这几乎是该函数的主要用途,因为他们引入了您在那里使用的带有方括号的切片符号。
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)]
}
第一个选项在需要环绕时更常见,而在不需要环绕时更常见的是方括号切片符号。