0

outputs.tf我的模块目录下有一个文件。我有一个Main.tf文件。当我创建资源并应用 Terraform 时,不显示输出。但是,如果我不使用模块并严格从Main.tf文件中创建资源,则输出显示正常。outputs.tf使用模块和单独的文件时,我需要为输出显示做些什么不同的事情吗?

    Terraform v0.11.14
+ provider.aws v2.19.0

但是,如果我不使用模块并严格从Main.tf文件中创建资源,则输出显示正常。

主文件

module "identity-provider" {
  source = "./modules/identity-provider"
}



module "saml-role1" {
  source = "./modules/saml-roles/"
}

================

模块文件

resource "aws_iam_role" "role1" {
  name                 = "saml-role1"
  description          = "Blah Blah"
  path                 = "/"
  assume_role_policy   = "${data.aws_iam_policy_document.assume_role.json}"
  permissions_boundary = ""
  max_session_duration = 43200



resource "aws_iam_role_policy_attachment" "Read-Only" {
  role       = "${aws_iam_role.role1.name}"
  policy_arn = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}

==================

输出.tf

output "Role1-ARN" {
  value = "${module.saml-role1.arn}"
}
4

2 回答 2

1

Terraform 仅捕获和显示根模块的输出。如果您需要将输出从模块传递到根模块,您必须明确地执行此操作(例如,您无法访问由根模块创建的所有资源,只能访问指定为输出的值)。如果您在模块文件中包含这样的输出:

resource "aws_iam_role" "role1" {
  name                 = "saml-role1"
  description          = "Blah Blah"
  path                 = "/"
  assume_role_policy   = "${data.aws_iam_policy_document.assume_role.json}"
  permissions_boundary = ""
  max_session_duration = 43200



resource "aws_iam_role_policy_attachment" "Read-Only" {
  role       = "${aws_iam_role.role1.name}"
  policy_arn = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}

output "saml-role1-arn" {
    value = "aws_iam_role.role1.arn"
}

然后从根模块中,您可以访问输出:


module "saml-role1" {
  source = "./modules/saml-roles/"
}

output "saml-role1-arn" {
    value = "${module.saml-role1.saml-role1-arn}"
}
于 2019-07-22T19:15:38.100 回答
0

您还需要另一个 output.tf 文件和 main.tf 文件来捕获模块的输出。

以下是 output.tf 文件的内容。

output "Role1-ARN" {
  value = "${module.saml-role1.Role1-ARN}"
}

问候,

维诺特

于 2019-07-22T03:43:53.550 回答