首页 > 解决方案 > Terraform 根据条件在不同的提供者之间进行选择

问题描述

我正在尝试使用 Terraform 来自动部署环境,但是设置有些棘手:

我需要提供 DNS CNAME 记录,但我的问题是,根据环境,我需要在Dyn DNS或 Azure DNS 中提供该记录(它们是互斥的)

而且,出于同样的原因,例如,Dyn当我想在 Azure 中进行预配时,初始化 Terraform 提供程序对我来说是没有意义的。

我认为可行的是包括两个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环境提供程序,使用现有逻辑,我仍然需要传递正确的值(而不是空字符串)到其所需的变量。

有没有办法解决这个问题?也许类似于“仅在我真正需要时才使用提供程序”

标签: terraformterraform-provider-azure

解决方案


推荐阅读