我的Terraform代码中定义了一堆aws_ecr_repositories
:
resource "aws_ecr_repository" "nginx_images" {
name = "nginx-test"
}
resource "aws_ecr_repository" "oracle_images" {
name = "oracle-test"
}
我希望能够拥有一个可以将所有aws_ecr_repository
资源列入一个输出的输出。这就是我试过的:
output "ecr_repository_urls" {
value = "[${aws_ecr_repository.*.repository_url}]"
}
这不起作用,因为Terraform似乎不允许在资源名称上使用通配符。是否有可能有这样的输出?我目前的解决方案是只列出每个定义资源的输出。
答案 0 :(得分:2)
Terraform's splat syntax用于使用count
meta parameter跟踪资源创建的每件事物。
如果您希望能够获取所有相关的网址,则可以拥有一个count
资源,并使用variable "images" {
default = [
"nginx-test",
"oracle-test",
]
}
resource "aws_ecr_repository" "images" {
count = "${length(var.images)}"
name = "${var.images[count.index]}"
}
output "ecr_repository_urls" {
value = "[${aws_ecr_repository.images.*.repository_url}]"
}
元参数,例如:
x
答案 1 :(得分:1)
您可以手动将它们组合为一个列表:
output "ecr_repository_urls" {
value = ["${aws_ecr_repository.nginx_images.repository_url}", "${aws_ecr_repository.oracle_images.repository_url}"]
}
尽管代码可能不太好。
您也可以这样做:
variable "ecr_repos" {
default = {
"0" = "foo"
"1" = "bar"
}
}
resource "aws_ecr_repository" "images" {
count = "${length(var.ecr_repos)}"
name = "${lookup(var.ecr_repos,count.index)}-test"
}
output "ecr_repository_urls" {
value = "${aws_ecr_repository.images.*.repository_url}"
}
但问题是,如果列表顺序发生变化,它会重新创建资源,并且因为每个仓库都被分配给索引号,所以非常快速变得非常丑陋。