繁体   English   中英

在 terraform object 中使用 output 值

[英]Use output value in terraform object

我有多个 output 变量,我想制作一个父输出变量,然后将其他输出放入其中。 我对其进行了搜索,发现我们可以使用 terraform object ,但无法获得正确的语法。 Output.tf

output "public_subnet" {
  value = "${module.my_vpc.public_subnets_ids}"
}
output "vpc_id" {
  value = "${module.my_vpc.vpc_id}"
}
output "private_subnet" {
  value = "${module.my_vpc.private_subnets_ids}"
}

I want my output to be in a object or you can say parent output variable that have all child output vales, I have come up with few line which I know is not right syntax wise but will get you a picture of what I am thinking of .

output "vpc" {
  value = {
    vpc_id         = "${module.my_vpc.vpc_id}"
    public_subnet  = "${module.my_vpc.public_subnets_ids}"
    private_subnet = "${module.my_vpc.private_subnets_ids}"
  }
  type = object({ vpc_id = string, public_subnet = string, private_subnet = string })
}

Terraform output没有type 因此,您的vpc应该是:

output "vpc" {
  value = {
    vpc_id         = "${module.my_vpc.vpc_id}"
    public_subnet  = "${module.my_vpc.public_subnets_ids}"
    private_subnet = "${module.my_vpc.private_subnets_ids}"
  }  
}

但问题是子模块无法访问其父模块的输出。 因此,我不确定你想用你的输出实现什么。 通常,您可以使用variable将变量从父级传递给子级,然后您可以从子模块中的这些变量中生成新的 output。

更新

根据您之前的问题,有main.tf

module "my_vpc" {
  source            = "./modules/vpc"
  vpc_cidr          = var.vpc_cidr
  public_subnet     = var.public_subnet
  private_subnet    = var.private_subnet
  availability_zone = data.aws_availability_zones.azs.names
}

因此,您必须有一个文件夹./modules/vpc 在文件夹中,可能有一个名为./modules/vpc/vpc.tf的文件。 该文件将包含类似的内容(变量也可以在单独的文件中):

variable "vpc_cidr" {}

variable "public_subnet" {}

variable "private_subnet" {}

variable "availability_zone" {}

# the rest of the VPC definition. Since the file is not given,
# i can only speculate on the exact details of the content

resource "aws_subnet" "public" {

  count  = length(var.public_subnet)

  vpc_id = aws_vpc.my_vpc.id

  # other attributes
}

resource "aws_subnet" "private" {

  count  = length(var.private_subnet)

  vpc_id = aws_vpc.my_vpc.id

  # other attributes
}

如果是这样,那么您可以创建一个名为./modules/vpc/output.tf的新文件,其内容为:

output "vpc" {
  value = {
    vpc_id         = my_vpc.vpc_id
    public_subnet  = aws_subnet.public.*.id
    private_subnet = aws_subnet.private.*.id
  }  
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM