Я пытаюсь использовать 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 мне по-прежнему нужно передавать правильные значения (а не пустые строки) в требуемые переменные.
Есть ли способ обойти это? Может быть, что-то вроде «использования только провайдера, если он мне действительно нужен»