如何获取多个模块的输出?

时间:2017-12-10 16:47:55

标签: terraform

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

 $string_to_encrypt="password";
 $key="key";
 $encrypted_string=openssl_encrypt($string_to_encrypt,"AES-128-ECB",$password);
 $decrypted_string=openssl_decrypt($encrypted_string,"AES-128-ECB",$password);

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

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

这意味着如果我只想要一个通过tf文件创建的所有桶的列表,我必须以编程方式循环它们。可悲的是,通配符不起作用:

terraform output -module=module1 mybucket

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

使用状态列表,我得到模块名称,但是我需要解析的格式:

terraform output -module=* mybucket

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

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

terraform state list aws_s3_bucket.mybucket

module.module1.aws_s3_bucket.mybucket
module.module2.aws_s3_bucket.mybucket

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

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}"]
}

我得到的错误是:

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

1 个答案:

答案 0 :(得分:0)

还要跟上@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}"]