一千萬個為什麽

搜索

Terraform中的可重用模塊



我想在 module_apps 中獲得一個自動縮放組名變量,並在其他模塊中使用它,例如 module_init 。但是,當我嘗試運行 terraform plan 時,它不起作用。

module_apps的內容

resource "aws_autoscaling_group" "example" 
{
  name = "asg-ad"
}

output "asg_name" 
{
  value = "${aws_autoscaling_group.example.name}"
}

module_init的內容

module "module_init" 
{
  source = "../module_apps"
  asg_name = "${module.module_init.asg_name}"
}

試圖運行 terraform plan 似乎無法獲取源模塊:

o:Get: file:///home/user/terraform/application/module_apps
o:Get: file:///home/user//terraform/application/module_init
o:Get: file:///home/user//terraform/application/module_elb
o:Get: file:///home/user//terraform/application/module_deloy
o:Get: file:///home/user/terraform/application/module_apps
o:Get: file:///home/user//terraform/application/module_init
o:Get: file:///home/user//terraform/application/module_elb
o:Get: file:///home/user//terraform/application/module_deloy
o:Get: file:///home/user//terraform/application/module_init
o:Get: file:///home/user//terraform/application/module_elb
o:Get: file:///home/user//terraform/application/module_deloy
o:Get: file:///home/user/terraform/application/module_apps
o:Get: file:///home/user//terraform/application/module_init
o:Get: file:///home/user//terraform/application/module_elb
o:Get: file:///home/user//terraform/application/module_deloy
o:Get: file:///home/user//terraform/application/module_init
o:Get: file:///home/user//terraform/application/module_elb
o:Get: file:///home/user//terraform/application/module_deloy
o:Get: file:///home/user/terraform/application/module_apps
o:Get: file:///home/user//terraform/application/module_init
o:Get: file:///home/user//terraform/application/module_elb
o:Get: file:///home/user//terraform/application/module_deloy

轉載註明原文: Terraform中的可重用模塊

一共有 1 個回答:

如果它沒有徹底失敗,你可以期望看到一個循環警告,你已經在Terraform中創建了一個循環,並且它正在嘗試在創建asg之前完成對 asg-name 的請求。

為了得到你需要的東西,你需要像下面這樣:

module_apps/module_apps.tf </強>

resource "aws_autoscaling_group" "example" {
  name = "${var.asg_name}"
}

module_init.tf </強>

variable "asg_name" { default = "asg-ad" }

module "module_init" {
  source = "../module_apps"

  asg_name = "${var.asg_name}"
}

output "asg_name" {
  value = "${var.asg_name}"
}

這樣,如果您在其他地方調用 module_init ,則可以使用 asg_name 。在嘗試使用模塊的輸出來創建模塊時要小心,Terraform不會像那樣處理循環,並且這些錯誤可能會讓您感到困惑以進行診斷。