gpt4 book ai didi

terraform - 如何获得多个模块的输出?

转载 作者:行者123 更新时间:2023-12-05 07:38:43 25 4
gpt4 key购买 nike

我有一个模块,我在一个 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}"]

关于terraform - 如何获得多个模块的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47741095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com