У меня есть фрагмент azure_su bnet для создания ресурсов, как показано ниже.
locals {
csvlist = fileexists(var.csvfile) ? csvdecode(file(var.csvfile)) : []
subnets = length(var.subnets) > 0 ? var.subnets : local.csvlist
}
resource "azurerm_subnet" "subnet" {
lifecycle {
ignore_changes = [network_security_group_id]
}
count = length(local.subnets) > 0 && var.create ? length(local.subnets) : 0
name = local.subnets[count.index].name
resource_group_name = var.resource_group
virtual_network_name = var.vnet
address_prefix = local.subnets[count.index].address_prefix
dynamic "delegation" {
for_each = local.subnets[count.index].delegations
content{
name = delegation.value["delegation_name"]
service_delegation {
name = delegation.value["service_delegation_name"]
actions = delegation.value["service_delegation_actions"]
}
}
}
service_endpoints = [lookup(local.subnets[count.index],"endpoints")] == [""] ? [] : flatten([split(",",lookup(local.subnets[count.index],"endpoints"))])
}
Здесь я могу создать ресурсы на основе ввода JSON, как показано ниже
subnets = [{
name = "Active_Directory"
address_prefix = "10.101.4.128/27"
endpoints = "Microsoft.EventHub"
#delegations = []
delegations = [
{
delegation_name = "acctestdelegation"
service_delegation_name = "Microsoft.ContainerInstance/containerGroups"
service_delegation_actions = ["Microsoft.Network/virtualNetworks/subnets/join/action", "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action"]
}
]
}]
Но я не могу создать ресурсы на основе CSV, потому что его ищет ключ «делегирования». Мой CSV будет выглядеть так:
name,address_prefix,endpoints,delegation_name,service_delegation_name,service_delegation_actions
Active_Directory,"10.101.4.128/27","Microsoft.EventHub",acctestdelegation,"Microsoft.ContainerInstance/containerGroups","Microsoft.Network/virtualNetworks/subnets/join/action"
sql,"10.101.4.160/27","Microsoft.EventHub",acctestdelegation,"Microsoft.ContainerInstance/containerGroups","Microsoft.Network/virtualNetworks/subnets/join/action"
Как мне сделать так, чтобы CSV поддерживал мой main.tf? Здесь я планирую предоставить две опции, такие как JSON и CSV. Если пользователь хочет CSV, он будет использовать CSV в противном случае JSON.