Terraform выбирает между различными провайдерами в зависимости от условий - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь использовать Terraform для автоматизации развертывания среды, но с настройкой есть кое-что сложное:

Мне нужно подготовить запись DNS CNAME, но моя проблема заключается в том, что на основе В этой среде мне нужно было бы подготовить эту запись либо в Dyn DNS , либо Azure DNS (и они взаимоисключающие)

И по той же причине она не для меня смысл, например, инициализировать провайдера Terraform Dyn, когда я хочу обеспечить в Azure.

. Я подумал, что будет работать, это включить два providers:

provider azurerm {
  version = "=1.44.0"

  client_id       = var.dns_provider_client_id
  client_secret   = var.dns_provider_client_secret
  subscription_id = var.dns_provider_subscription_id
  tenant_id       = var.dns_provider_tenant_id
}

provider dyn {
  version = "=1.2.0"

  customer_name = var.dyn_customer_name
  password      = var.dyn_password
  username      = var.dyn_username
}

И затем при запуске tf plan я бы установил переменные, относящиеся к провайдеру, которого я не использую, в пустую строку, а затем, при подготовке записи, с помощью здесь Я думал, что могу предоставить ресурсы условно:

resource azurerm_dns_cname_record dns_name {
  count = var.dyn_dns_zone.name == "" ? 1 : 0

  name                = "..."
  record              = "..."
  resource_group_name = "..."
  ttl                 = 60
  zone_name           = "..."
}

resource dyn_record dyn {
  count = var.dyn_dns_zone.name == "" ? 0 : 1

  zone  = "..."
  name  = "..."
  value = "..."
  type  = "..."
  ttl   = 60
}

Но моя проблема в том, что независимо от того, какую запись я создаю, мне нужно инициализировать обоих провайдеров, поэтому даже если мне не понадобится Dyn поставщик для В среде с существующим логикой c мне по-прежнему нужно передавать правильные значения (а не пустые строки) в требуемые переменные.

Есть ли способ обойти это? Может быть, что-то вроде «использования только провайдера, если он мне действительно нужен»

...