Зависит от ошибки, требуется выражение статического списка - PullRequest
0 голосов
/ 06 ноября 2019

Итак, у меня есть блок кода -

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.

1 Ответ

0 голосов
/ 07 ноября 2019

Явные зависимости - это статические ссылки, а не произвольные выражения.

depends_on = [
  bigip_ltm_pool.agent_lb_443_pool,
  bigip_ltm_pool.agent_lb_30443_pool,
  null_resource.sync_check,
]

Здесь вам нужно перечислить исчерпывающий набор ресурсов, от которых зависит этот ресурс. Это означает, что Terraform будет ждать, пока все три из них не завершатся, прежде чем предпринимать действия для bigip_ltm_virtual_server.agent_vip, что может быть больше зависимостей, чем строго необходимо, но эти дополнительные зависимости не должны вызывать каких-либо практических проблем, потому что этот граф зависимостей conservative означает, что он имеет все необходимые зависимости и более , а не меньше, чем необходимо.

Идиоматический способ выразить это в 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_ltm_pool.agent_lb_443_pool, так и к bigip_ltm_pool.agent_lb_30443_pool, Terraformможет вывести эти зависимости автоматически. Поэтому в depends_on должно присутствовать только null_resource.sync_check, предположительно потому, что у этого ресурса есть некоторый побочный эффект, который нельзя описать как поток данных между ресурсами.

...