Terraform 取决于出错,需要静态列表表达式

Terraform 取决于出错,需要静态列表表达式,terraform,Terraform,所以,我有一段代码- resource "bigip_ltm_virtual_server" "agent_vip" { depends_on = [var.use_traefik ? bigip_ltm_pool.agent_lb_443_pool : bigip_ltm_pool.agent_lb_30443_pool, null_resource.sync_check] description = "${var.clus

所以,我有一段代码-

resource "bigip_ltm_virtual_server" "agent_vip" {
  depends_on                 = [var.use_traefik ? bigip_ltm_pool.agent_lb_443_pool : bigip_ltm_pool.agent_lb_30443_pool, null_resource.sync_check]
  description                = "${var.cluster_name}.${var.domain}_443"
  destination                = "${var.agent_f5_ip_address}"
  ip_protocol                = "tcp"
  name                       = "/Common/${var.cluster_name}.${var.domain}_443"
  pool                       = var.use_traefik ? "/Common/${var.cluster_name}-lbaas-agent_lb-443-pool" : "/Common/${var.cluster_name}-lbaas-agent_lb-30443-pool"
  port                       = 443
  profiles                   = ["/Common/tcp"]
  source_address_translation = "automap"
  translate_address          = "enabled"
  translate_port             = "enabled"
}
当我运行terraform时,应用它会出错-

Error: Invalid expression

  on main.tf line 193, in resource "bigip_ltm_virtual_server" "agent_vip":
 193:   depends_on                 = var.use_traefik ? [bigip_ltm_pool.agent_lb_443_pool, null_resource.sync_check] : [bigip_ltm_pool.agent_lb_30443_pool, null_resource.sync_check]

A static list expression is required.

显式依赖关系是静态引用,而不是任意表达式

depends_on = [
  bigip_ltm_pool.agent_lb_443_pool,
  bigip_ltm_pool.agent_lb_30443_pool,
  null_resource.sync_check,
]
这里需要做的是列出此资源所依赖的一组详尽的资源。这意味着Terraform将等到所有这三项都完成后,才能对
bigip\u ltm\u virtual\u server.agent\u vip
采取行动,这可能比严格必要的依赖性更为重要,但这些额外的依赖性不应导致任何实际问题,因为此依赖关系图是保守的,这意味着它拥有所需的所有依赖项,而且更多,而不是更少

在Terraform中表达这一点的惯用方法是尽可能通过引用使用隐式依赖关系。在这种情况下,您可以使用
pool
参数中的引用来暗示对两个池的依赖关系:

resource "bigip_ltm_virtual_server" "agent_vip" {
  depends_on = [null_resource.sync_check]

  description                = "${var.cluster_name}.${var.domain}_443"
  destination                = var.agent_f5_ip_address
  ip_protocol                = "tcp"
  name                       = "/Common/${var.cluster_name}.${var.domain}_443"
  pool                       = var.use_traefik ? bigip_ltm_pool.agent_lb_443_pool.name : bigip_ltm_pool.agent_lb_30443_pool.name
  port                       = 443
  profiles                   = ["/Common/tcp"]
  source_address_translation = "automap"
  translate_address          = "enabled"
  translate_port             = "enabled"
}
由于
pool
参数同时引用
bigip\u ltm\u pool.agent\u lb\u 443\u pool
bigip\u ltm\u pool.agent\u lb\u 30443\u pool
,Terraform可以自动推断这些依赖关系。因此,只有
null\u资源。sync\u check
必须出现在
depends\u on
中,这可能是因为该资源具有某种不能描述为资源之间数据流的副作用