Получить список возможных исходящих IP-адресов в terraform - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь использовать экспорт из приложения-функции azure в terraform, чтобы получить возможные исходящие IP-адреса, которые я могу добавить в белый список для брандмауэра

Возвращаемый параметр представляет собой строку IPS разделены запятой.

Я пытался использовать функцию split в terraform, но он не дает список, он дает интерфейс, который нельзя использовать в качестве списка. Я попытался использовать локальные области видимости, чтобы добавить квадратные скобки вокруг него, но все еще то же самое.

Позвольте мне просто добавить это terraform 11, а не 12.

resource "azurerm_key_vault" "keyvault" {
  name                        = "${var.project_name}-${var.environment}-kv"
  location                    = "${azurerm_resource_group.environment.location}"
  resource_group_name         = "${azurerm_resource_group.environment.name}"
  enabled_for_disk_encryption = true
  tenant_id                   = "${var.tenant_id}"
  sku_name                    = "standard"

  network_acls {
    bypass         = "AzureServices"
    default_action = "Deny"
    ip_rules       = "${split(",", azurerm_function_app.function.possible_outbound_ip_addresses)}"
  }

  tags = {
    asset-code    = "${var.storage_tags["asset_code"]}"
    module-code   = "${var.storage_tags["module_code"]}"
    environment   = "${var.environment}"
    instance-code = "${var.storage_tags["instance_code"]}"
    source        = "terraform"
  }
}

Это возвращается с ошибкой "ip_rules должен быть списком".

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Я думаю, что вы видите здесь classi c Недостаток проекта Terraform 0.11: когда значение неизвестно в плановое время (поскольку оно будет принято только во время применения), Terraform 0.11 не может должным образом отслеживать информацию о типе для него.

Поскольку possible_outbound_ip_addresses является неизвестным значением во время планирования, результат split с этой строкой также неизвестен. Поскольку Terraform не отслеживает информацию о типе для этого результата, код SDK поставщика отклоняет это неизвестное значение, поскольку оно не является списком.

Для решения этой проблемы в Terraform 0.11 требуется выполнить первоначальный запуск с -target аргумент, чтобы Terraform мог сначала сосредоточиться на создании функции (и, следовательно, выделении своих исходящих IP-адресов), а затем заняться обработкой этой строки отдельно, как только она станет известна:

terraform apply -target=azurerm_function_app.function
terraform apply # to complete the rest of the work that -target excluded

Terraform 0.12 устранила это ограничение путем информация о типе отслеживания как для известных, так и для неизвестных значений, поэтому в Terraform 0.12 функция split увидит, что вы дали ей неизвестную строку, и примете ее как правильно введенную, а затем вернет неизвестный список строк служить заполнителем для результата, который будет окончательно определен на этапе применения.

0 голосов
/ 23 апреля 2020

Если значение var.string равно 1.2.3.4,5.6.7.8 -

split(',', var.string)[0] должно вернуть вам 1.2.3.4 в виде строки. Ваши вопросы сложны без примера.

...