У меня есть данные CSV и JSON для анализа входных значений в главном файле Terraform. Здесь я могу анализировать данные, используя JSON, но не CSV - PullRequest
0 голосов
/ 18 марта 2020

У меня есть фрагмент 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.

...