如何获得多个模块的输出



我有一个我在单个TF文件中多次调用的模块。它所做的一件事是创建一个S3存储桶。我在其输出中定义了此:

output "mybucket" {
  value = "${aws_s3_bucket.mybucket.id}"
}

为了查看此输出,因为我使用的模块是特定模块的范围,这意味着这样做:

terraform output -module=module1 mybucket

这意味着,如果我只想要通过TF文件创建的所有存储库的列表,那么我必须循环浏览它们。可悲的是通配符不起作用:

terraform output -module=* mybucket

现在,我该怎么做?我可以在所有模块上循环并多次调用输出,但是找不到列出当前正在使用的所有模块的Terraform命令。

使用状态列表,我获得了模块名称,但是我必须以一种格式来解析:

terraform state list aws_s3_bucket.mybucket
module.module1.aws_s3_bucket.mybucket
module.module2.aws_s3_bucket.mybucket

有没有办法查询状态并检索创建的所有存储桶或查看所有模块的输出的方法?


编辑:因此,似乎我可以从调用模块的TF文件中输出列表。TF文件将多个模块调用的输出收集到列表中:

module "mod1" {..do stuff, create s3 bucket, output{mybucket} ...}
module "mod2" {..do stuff, create s3 bucket, output{mybucket} ...}
module "mod3" {..do stuff, create s3 bucket, output{mybucket} ...}
output "my-buckets" {
  value = ["${module.mod1.mybucket}","${module.mod2.mybucket}"]
}

令人失望的是我必须通过名称手动输入每个模块。SPLAT操作员在这里没有工作来扩展模块 - 我是否使用它错误?:

output "my-buckets" {
  value = ["${module.*.mybucket}"]
}

我遇到的错误是:

* output 'my-buckets': unknown module referenced: *
    output 'my-buckets': undefined module referenced *

也跟进 @ydaetskcor的答案,您的情况的splat符号看起来有点像:

output "output-s3-buckets" {
  value       = "${aws_s3_bucket.mybuckets.*.id}"
  description = "List of buckets created"
}

可以在模块声明级别上读取

list_of_buckets = ["${modules.s3_module.output-s3-buckets}"]

最新更新