我正在尝试使用 Terraform 来自动部署环境,但设置有些棘手:
我需要配置 DNS CNAME 记录,但我的问题是,根据环境,我需要在 Dyn DNS 或 Azure DNS 中配置该记录(并且它们是互斥的)
而且,出于同样的原因,当我想在 Azure 中配置时,初始化 Terraform
Dyn
提供程序对我来说是没有意义的。
我认为可行的是包括两个
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
时,我会将与我不使用的提供程序相关的变量设置为空字符串,然后,在配置记录时,在here的帮助下,我认为我可以配置资源有条件地:
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
提供程序,但使用现有逻辑,我仍然需要传递正确的值(而不是空字符串)为其所需的变量。
有什么办法可以解决这个问题吗?也许类似于“仅在我确实需要时才使用提供商”
即使您没有根据逻辑为它们提供资源,您也需要初始化两个提供程序。
您的 dyn dns 或 Azure 资源不是幸运的资源,因为它的计数为零,因此不应出现在计划中,并且应该对它们进行评估的唯一值将是您用于配置的布尔表达式中的值设置计数。